From: cuz Date: Fri, 29 Nov 2002 14:40:31 +0000 (+0000) Subject: New API for access to extended memory X-Git-Tag: V2.12.0~1976 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a1a3022b5cbf40b82096e208d74db19ada703e07;p=cc65 New API for access to extended memory git-svn-id: svn://svn.cc65.org/cc65/trunk@1675 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/include/em.h b/include/em.h new file mode 100644 index 000000000..3a49e6733 --- /dev/null +++ b/include/em.h @@ -0,0 +1,119 @@ +/*****************************************************************************/ +/* */ +/* em.h */ +/* */ +/* API for extended memory access */ +/* */ +/* */ +/* */ +/* (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 _EM_H +#define _EM_H + + + +/*****************************************************************************/ +/* Definitions */ +/*****************************************************************************/ + + + +/* Size of an extended memory page */ +#define EM_PAGE_SIZE 256 + +/* Driver constants */ +#define EM_DRV_DETECT 0 + +/* 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 */ + +/* Parameters for the em_copy_... functions */ +struct em_copy { + unsigned page; /* Starting page to copy from or to */ + unsigned char offs; /* Offset into page */ + void* buf; /* Memory buffer 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 (unsigned char driver); +/* Load the extended memory driver and return an error code. */ + +unsigned char __fastcall__ em_load_driver (const char* driver); +/* Load an extended memory driver and return an error code */ + +unsigned char em_unload (void); +/* Unload the currently loaded driver. */ + +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. + */ + +void* __fastcall__ em_mapclean (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. This function differs from + * em_map_page() in that it will discard the contents of the currently mapped + * page, assuming that the page has not been modified or that the modifications + * are no longer needed, if this leads to better performance. NOTE: This does + * NOT mean that the contents of currently mapped page are always discarded! + */ + +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 new file mode 100644 index 000000000..63939e04f --- /dev/null +++ b/include/em/em-kernel.h @@ -0,0 +1,93 @@ +/*****************************************************************************/ +/* */ +/* em-kernel.h */ +/* */ +/* Internally used EM functions */ +/* */ +/* */ +/* */ +/* (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 _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* 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 */ + + + + +/*****************************************************************************/ +/* Functions */ +/*****************************************************************************/ + + + +unsigned char __fastcall__ em_install (void* driver); +/* Install the driver once it is loaded, return an error code. */ + +void __fastcall__ em_deinstall (void); +/* Deinstall the driver before unloading it */ + + + +/* End of em-kernel.h */ +#endif + + +