- /* Parameters passed into the loader routine. The second pointer
- * (callerdata) is an opaque pointer 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 called with a size of 1, so you may choose to make this
- * a special case when implementing read().
- */
- unsigned char (*read) (struct mod_ctrl*, void* buffer, unsigned size);
- void* callerdata;
+ /* 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;