; 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
; Driver header signature
.rodata
-emd_sig: .byte $65, $6d, $64, $00 ; "emd", version
-emd_sig_len = * - emd_sig
+emd_sig: .byte $65, $6d, $64, EMD_API_VERSION ; "emd", version
;----------------------------------------------------------------------------
; Check the driver signature
- ldy #emd_sig_len-1
+ ldy #.sizeof(emd_sig)-1
@L0: lda (ptr1),y
cmp emd_sig,y
bne inv_drv
; Copy the jump vectors
- ldy #EMD_HDR_JUMPTAB
+ ldy #EMD_HDR::JUMPTAB
ldx #0
@L1: inx ; Skip the JMP opcode
jsr copy ; Copy one byte
jsr copy ; Copy one byte
- cpx #(EMD_HDR_JUMPCOUNT*3)
+ cpy #(EMD_HDR::JUMPTAB + .sizeof(EMD_HDR::JUMPTAB))
bne @L1
jmp emd_install ; Call driver install routine
; Copy one byte from the jump vectors
copy: lda (ptr1),y
+ sta emd_vectors,x
iny
-set: sta emd_vectors,x
inx
rts
;----------------------------------------------------------------------------
-; void __fastcall__ em_deinstall (void);
-; /* Deinstall the driver before unloading it */
-
-_em_deinstall:
- jsr emd_deinstall ; Call driver routine
-
-; Point all jump vectors to return0
+; unsigned char __fastcall__ em_uninstall (void);
+; /* Uninstall the currently loaded driver and return an error code.
+; * Note: This call does not free allocated memory.
+; */
- ldx #0
-@L1: inx ; Skip JMP opcode
- lda #<return0
- jsr set
- lda #>return0
- jsr set
- cpx #(EMD_HDR_JUMPCOUNT*3)
- bne @L1
+_em_uninstall:
+ jsr emd_uninstall ; Call driver routine
- rts
+em_clear_ptr: ; External entry point
+ lda #0
+ sta _em_drv
+ sta _em_drv+1 ; Clear the driver pointer
+ tax
+ rts ; Return zero