X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fem%2Fem-kernel.s;h=1c9591e28d9b2c9b97c60c98a37a5a825504048c;hb=22d1cb2e210692f626a8070510256efcd737683d;hp=473cbb55c83198baa17278bd28923eab2fde9004;hpb=f7244c4e19193d4dc6d462239bc3e0add8647a14;p=cc65 diff --git a/libsrc/em/em-kernel.s b/libsrc/em/em-kernel.s index 473cbb55c..1c9591e28 100644 --- a/libsrc/em/em-kernel.s +++ b/libsrc/em/em-kernel.s @@ -4,8 +4,7 @@ ; Common functions of the extended memory API. ; - .export _em_install, _em_deinstall - + .export em_clear_ptr .import return0 .importzp ptr1 @@ -24,7 +23,7 @@ _em_drv: .res 2 ; Pointer to driver .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 @@ -34,8 +33,7 @@ emd_copyto: 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 ;---------------------------------------------------------------------------- @@ -51,7 +49,7 @@ _em_install: ; 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 @@ -60,12 +58,12 @@ _em_install: ; 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 @@ -80,29 +78,25 @@ inv_drv: ; 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 - 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