; Common functions of the extended memory API.
;
- .export _em_install, _em_deinstall
-
+ .export em_clear_ptr
.import return0
.importzp ptr1
.data
emd_vectors:
emd_install: jmp return0
-emd_deinstall: jmp return0
+emd_uninstall: jmp return0
emd_pagecount: jmp return0
emd_map: jmp return0
emd_use: jmp return0
rts
;----------------------------------------------------------------------------
-; void __fastcall__ em_deinstall (void);
-; /* Deinstall the driver before unloading it */
-
-_em_deinstall:
- jsr emd_deinstall ; Call driver routine
+; unsigned char __fastcall__ em_uninstall (void);
+; /* Uninstall the currently loaded driver and return an error code.
+; * Note: This call does not free allocated memory.
+; */
-; Point all jump vectors to return0
+_em_uninstall:
+ jsr emd_uninstall ; Call driver routine
- ldx #0
-@L1: inx ; Skip JMP opcode
- lda #<return0
- jsr set
- lda #>return0
- jsr set
- cpx #(EMD_HDR_JUMPCOUNT*3)
- bne @L1
-
- rts
+em_clear_ptr: ; External entry point
+ lda #0
+ sta _em_drv
+ sta _em_drv+1 ; Clear the driver pointer
+ tax
+ rts ; Return zero
/* */
/* */
/* */
-/* (C) 2002 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 2002-2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
/* Check if we do already have a driver loaded. If so, remove it. */
if (em_drv != 0) {
- em_deinstall ();
+ em_uninstall ();
}
/* Now open the file */
; /* Unload the currently loaded driver. */
+ .import em_clear_ptr
+
.include "em-kernel.inc"
.include "em-error.inc"
.include "modload.inc"
ora _em_drv+1
beq no_driver ; No driver
- jsr _em_deinstall ; Deinstall the driver
+ jsr emd_uninstall ; Deinstall the driver
lda _em_drv
ldx _em_drv+1
jsr _mod_free ; Free the driver
- lda #0
- sta _em_drv
- sta _em_drv+1 ; Clear the driver pointer
-
- tax
- rts ; Return zero
+ jmp em_clear_ptr ; Clear the driver pointer, return zero
no_driver:
tax ; X = 0