From: cuz Date: Thu, 5 Dec 2002 18:57:53 +0000 (+0000) Subject: Added em_use X-Git-Tag: V2.12.0~1937 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f7244c4e19193d4dc6d462239bc3e0add8647a14;p=cc65 Added em_use git-svn-id: svn://svn.cc65.org/cc65/trunk@1719 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc index ab17cc2cc..22fcfa4c0 100644 --- a/asminc/em-kernel.inc +++ b/asminc/em-kernel.inc @@ -44,11 +44,12 @@ EMD_HDR_INSTALL = EMD_HDR_JUMPTAB+0 ; INSTALL routine EMD_HDR_DEINSTALL = EMD_HDR_JUMPTAB+2 ; DEINSTALL routine EMD_HDR_PAGECOUNT = EMD_HDR_JUMPTAB+4 ; PAGECOUNT routine EMD_HDR_MAP = EMD_HDR_JUMPTAB+6 ; MAP routine -EMD_HDR_MAPCLEAN = EMD_HDR_JUMPTAB+8 ; MAPCLEAN routine -EMD_HDR_COPYFROM = EMD_HDR_JUMPTAB+10 ; COPYFROM routine -EMD_HDR_COPYTO = EMD_HDR_JUMPTAB+12 ; COPYTO routine +EMD_HDR_USE = EMD_HDR_JUMPTAB+8 ; USE routine +EMD_HDR_MAPCLEAN = EMD_HDR_JUMPTAB+10 ; MAPCLEAN routine +EMD_HDR_COPYFROM = EMD_HDR_JUMPTAB+12 ; COPYFROM routine +EMD_HDR_COPYTO = EMD_HDR_JUMPTAB+14 ; COPYTO routine -EMD_HDR_JUMPCOUNT = 7 ; Number of jump vectors +EMD_HDR_JUMPCOUNT = 8 ; Number of jump vectors ;------------------------------------------------------------------------------ ; Offsets into the em_copy structure @@ -69,7 +70,8 @@ EM_COPY_COUNT = 5 .global emd_install .global emd_deinstall .global emd_pagecount - .global emd_map + .global emd_map + .global emd_use .global emd_commit .global emd_copyfrom .global emd_copyto @@ -81,6 +83,7 @@ EM_COPY_COUNT = 5 .global _em_deinstall .global _em_pagecount .global _em_map + .global _em_use .global _em_commit .global _em_copyfrom .global _em_copyto diff --git a/include/em.h b/include/em.h index a69c9598d..5064d137f 100644 --- a/include/em.h +++ b/include/em.h @@ -90,6 +90,15 @@ void* __fastcall__ em_map (unsigned page); * 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 __fastcall__ 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 diff --git a/include/em/em-kernel.h b/include/em/em-kernel.h index 63939e04f..8a3938fb6 100644 --- a/include/em/em-kernel.h +++ b/include/em/em-kernel.h @@ -58,6 +58,7 @@ typedef struct { 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 */ diff --git a/libsrc/c128/c128-georam.s b/libsrc/c128/c128-georam.s index dee4eaa1e..bc98f6101 100644 --- a/libsrc/c128/c128-georam.s +++ b/libsrc/c128/c128-georam.s @@ -29,6 +29,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -79,6 +80,13 @@ 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 diff --git a/libsrc/c128/c128-ram.s b/libsrc/c128/c128-ram.s index 806192edf..ebb1beecc 100644 --- a/libsrc/c128/c128-ram.s +++ b/libsrc/c128/c128-ram.s @@ -30,6 +30,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -114,6 +115,15 @@ MAP: sta curpage 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 ; Return the window + rts + ; ------------------------------------------------------------------------ ; COMMIT: Commit changes in the memory window to extended storage. diff --git a/libsrc/c128/c128-reu.s b/libsrc/c128/c128-reu.s index 358b9a427..a812fa85d 100644 --- a/libsrc/c128/c128-reu.s +++ b/libsrc/c128/c128-reu.s @@ -30,6 +30,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -138,6 +139,15 @@ MAP: sta curpage 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 ; Return the window + rts + ; ------------------------------------------------------------------------ ; COMMIT: Commit changes in the memory window to extended storage. diff --git a/libsrc/c64/c64-georam.s b/libsrc/c64/c64-georam.s index dee4eaa1e..bc98f6101 100644 --- a/libsrc/c64/c64-georam.s +++ b/libsrc/c64/c64-georam.s @@ -29,6 +29,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -79,6 +80,13 @@ 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 diff --git a/libsrc/c64/c64-ram.s b/libsrc/c64/c64-ram.s index f1ece72f3..023f86529 100644 --- a/libsrc/c64/c64-ram.s +++ b/libsrc/c64/c64-ram.s @@ -29,6 +29,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -109,6 +110,14 @@ MAP: sta curpage ; Remember the new page 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 ; Return the window + rts + ; ------------------------------------------------------------------------ ; COMMIT: Commit changes in the memory window to extended storage. @@ -249,7 +258,7 @@ common: ldy #EM_COPY_COUNT+1 ; Done -@L4: rts +@L4: rts ; ------------------------------------------------------------------------ ; COPYTO: Copy from linear into extended memory. A pointer to a structure diff --git a/libsrc/c64/c64-reu.s b/libsrc/c64/c64-reu.s index 96a6ebebc..2c8238078 100644 --- a/libsrc/c64/c64-reu.s +++ b/libsrc/c64/c64-reu.s @@ -29,6 +29,7 @@ .word DEINSTALL .word PAGECOUNT .word MAP + .word USE .word COMMIT .word COPYFROM .word COPYTO @@ -137,6 +138,15 @@ MAP: sta curpage 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 ; Return the window + rts + ; ------------------------------------------------------------------------ ; COMMIT: Commit changes in the memory window to extended storage. diff --git a/libsrc/em/Makefile b/libsrc/em/Makefile index 7766183c3..714010ee8 100644 --- a/libsrc/em/Makefile +++ b/libsrc/em/Makefile @@ -20,6 +20,7 @@ S_OBJS = em-kernel.o \ em_map.o \ em_pagecount.o \ em_unload.o \ + em_use.o all: $(C_OBJS) $(S_OBJS) diff --git a/libsrc/em/em-kernel.s b/libsrc/em/em-kernel.s index d2920b354..473cbb55c 100644 --- a/libsrc/em/em-kernel.s +++ b/libsrc/em/em-kernel.s @@ -23,13 +23,14 @@ _em_drv: .res 2 ; Pointer to driver ; Jump table for the driver functions. .data emd_vectors: -emd_install: jmp $0000 -emd_deinstall: jmp $0000 -emd_pagecount: jmp $0000 -emd_map: jmp $0000 -emd_commit: jmp $0000 -emd_copyfrom: jmp $0000 -emd_copyto: jmp $0000 +emd_install: jmp return0 +emd_deinstall: 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 diff --git a/libsrc/em/em_use.s b/libsrc/em/em_use.s new file mode 100644 index 000000000..3f07a5147 --- /dev/null +++ b/libsrc/em/em_use.s @@ -0,0 +1,17 @@ +; +; 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 +