Hi,
RaveGuru wrote:
zap wrote:
If we were to take a shot in the dark, how many concurrent connections are we talking about, just a soft figure. 4 - 6 ?
I think that handling the network traffic and console i/o for 2-3 simultaneous users or more will not be a problem,
Full ACK. Just look how the webserver performs with multiple simultanious HTTP sessions when running it in VICE with "Turbo Disk" but authentic CPU speed.
RaveGuru wrote:
the deal breaker is disk access. Unless it can be done asynchronous (using an IRQ loader) but that would probably require severe Contiki surgery.
Yeah, the ordinary (I think "Kernal-based" is the proper term) disk I/O isn't actually that fast on the C64 - isn't it
Some background info on disk I/O in Contiki...
All Contiki-internal disk I/O uses the CFS (Contiki File System) API. Loading the contiki.cfg TCPI/IP config file is an example of Contiki-internal disk I/O. Apart from that all Contiki sample applications doing disk I/O use the CFS. Examples are the webserver and the wget client.
This
CFS API doc is somewhat old but still relevant.
The Contiki codebase contains several implementations of the CFS API. Some of them are targeted towards embedded systems using Flash memory. One is a simple wrapper around the standard POSIX API - this is the default for cc65 based Contiki targets. And there are even two specific for cc65 targets:
1) On the Apple II the cc65 C library implementation of the POSIX API needs to have quite some overhead. Therefore there's a minimal (aka small) CFS implementation bypassing the cc65 C library allowing just enough functionality to read the config file and Ethernet driver on startup.
2) On the C64 soci contributed a CFS implementation that uses proprietary IDE64 calls if an IDE64 device is found - and uses the standard Kernal calls otherwise. Because it bypasses the cc65 C library in both cases the resulting binary is smaller than with the default POSIX-based CFS implementation. So the IDE64 support comes "for more than free". Therefore soci's CFS implementation ist used for all C64 Contiki binaries I deliver - even those which don't benefit from the IDE64 support because they just load the config file and the Ethernet driver.
Regarding Ethernet driver loading: The cc65 low level module loader fortunately allows to supply a custom read() function as callback. In the Contiki framework I built for Ethernet driver loading (and cc65-stock-mouse-driver loading) I leverage that feature by setting the CFS read() function as custom read function. This way even the file reading code inside the cc65 C library doesn't necessarily use the cc65 C library POSIX calls but rather whatever CFS implementation is activated at build time
Now back to the statement above: I don't understand what you exactly mean with "asynchronous" here. Maybe you could elaborate.
And it should probably be noted that the actual ContikiBBS code doesn't use the CFS API but rather uses cbm_... functions from the cc65 C library because it works with REL files.
Regards,
Oliver