1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-12 02:30:44 +00:00

Added em_use

git-svn-id: svn://svn.cc65.org/cc65/trunk@1719 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2002-12-05 18:57:53 +00:00
parent e4d25caa56
commit f7244c4e19
12 changed files with 100 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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
ldx #>window ; Return the window
rts
; ------------------------------------------------------------------------
; COMMIT: Commit changes in the memory window to extended storage.

View File

@ -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
ldx #>window ; Return the window
rts
; ------------------------------------------------------------------------
; COMMIT: Commit changes in the memory window to extended storage.

View File

@ -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

View File

@ -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
ldx #>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

View File

@ -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
ldx #>window ; Return the window
rts
; ------------------------------------------------------------------------
; COMMIT: Commit changes in the memory window to extended storage.

View File

@ -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)

View File

@ -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

17
libsrc/em/em_use.s Normal file
View File

@ -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