Added library reference em_libref to EMD interface.

Occasionally dynamically drivers suffer from not being to refer to
content in the C library. Therefore I added a mechanism to allow
a C library for a certian target to define a symbol that will be
handed over to dynamic drivers for that target. Then the drivers
can use their refernce to that symbol to access content in the C
library.
This commit is contained in:
Oliver Schmidt
2013-06-01 00:11:31 +02:00
parent 7024e2789d
commit 619b215260
31 changed files with 364 additions and 206 deletions

View File

@@ -39,28 +39,29 @@
.struct EMD_HDR .struct EMD_HDR
ID .byte 3 ; Contains 0x65, 0x6d, 0x64 ("emd") ID .byte 3 ; Contains 0x65, 0x6d, 0x64 ("emd")
VERSION .byte 1 ; Interface version VERSION .byte 1 ; Interface version
LIBREF .addr ; Library reference
JUMPTAB .struct JUMPTAB .struct
INSTALL .word ; INSTALL routine INSTALL .addr ; INSTALL routine
UNINSTALL .word ; UNINSTALL routine UNINSTALL .addr ; UNINSTALL routine
PAGECOUNT .word ; PAGECOUNT routine PAGECOUNT .addr ; PAGECOUNT routine
MAP .word ; MAP routine MAP .addr ; MAP routine
USE .word ; USE routine USE .addr ; USE routine
MAPCLEAN .word ; MAPCLEAN routine MAPCLEAN .addr ; MAPCLEAN routine
COPYFROM .word ; COPYFROM routine COPYFROM .addr ; COPYFROM routine
COPYTO .word ; COPYTO routine COPYTO .addr ; COPYTO routine
.endstruct .endstruct
.endstruct .endstruct
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; The EMD API version, stored in EMD_HDR::VERSION ; The EMD API version, stored in EMD_HDR::VERSION
EMD_API_VERSION = $00 EMD_API_VERSION = $01
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; The asm equivalent to the C em_copy structure ; The asm equivalent to the C em_copy structure
.struct EM_COPY .struct EM_COPY
BUF .word ; Memory buffer to copy from or to BUF .addr ; Memory buffer to copy from or to
OFFS .byte ; Offset into page OFFS .byte ; Offset into page
PAGE .word ; Starting page to copy from or to PAGE .word ; Starting page to copy from or to
COUNT .word ; Number of bytes to copy COUNT .word ; Number of bytes to copy

View File

@@ -20,16 +20,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word DEINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants
@@ -69,11 +73,11 @@ INSTALL:
; rts ; rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; DEINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; Can do cleanup or whatever. Must not return anything. ; Can do cleanup or whatever. Must not return anything.
; ;
DEINSTALL: UNINSTALL:
rts rts

8
libsrc/apple2/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -43,16 +43,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word DEINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants
@@ -191,11 +195,11 @@ INSTALL:
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; DEINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; Can do cleanup or whatever. Must not return anything. ; Can do cleanup or whatever. Must not return anything.
; ;
DEINSTALL: UNINSTALL:
rts rts

8
libsrc/atari/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -27,16 +27,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -25,16 +25,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -28,16 +28,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -26,16 +26,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -25,16 +25,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -23,16 +23,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word DEINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants
@@ -141,11 +145,11 @@ settestadr2:
jmp vdcsetsrcaddr jmp vdcsetsrcaddr
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; DEINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; Can do cleanup or whatever. Must not return anything. ; Can do cleanup or whatever. Must not return anything.
; ;
DEINSTALL: UNINSTALL:
;on C128 restore font and clear the screen? ;on C128 restore font and clear the screen?
rts rts

8
libsrc/c128/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -24,16 +24,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

8
libsrc/c16/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -22,16 +22,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -22,16 +22,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -27,16 +27,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -22,16 +22,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -24,16 +24,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -26,16 +26,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -24,16 +24,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -27,16 +27,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -26,16 +26,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

8
libsrc/c64/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -24,16 +24,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

8
libsrc/cbm510/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -24,16 +24,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

8
libsrc/cbm610/libref.s Normal file
View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit

View File

@@ -4,7 +4,7 @@
; Common functions of the extended memory API. ; Common functions of the extended memory API.
; ;
.import return0 .import return0, em_libref
.importzp ptr1 .importzp ptr1
.include "em-kernel.inc" .include "em-kernel.inc"
@@ -55,6 +55,15 @@ _em_install:
dey dey
bpl @L0 bpl @L0
; Set the library reference
ldy #EMD_HDR::LIBREF
lda #<em_libref
sta (ptr1),y
iny
lda #>em_libref
sta (ptr1),y
; Copy the jump vectors ; Copy the jump vectors
ldy #EMD_HDR::JUMPTAB ldy #EMD_HDR::JUMPTAB

View File

@@ -21,16 +21,20 @@
.byte $65, $6d, $64 ; "emd" .byte $65, $6d, $64 ; "emd"
.byte EMD_API_VERSION ; EM API version number .byte EMD_API_VERSION ; EM API version number
; Jump table. ; Library reference
.word INSTALL .addr $0000
.word UNINSTALL
.word PAGECOUNT ; Jump table
.word MAP
.word USE .addr INSTALL
.word COMMIT .addr UNINSTALL
.word COPYFROM .addr PAGECOUNT
.word COPYTO .addr MAP
.addr USE
.addr COMMIT
.addr COPYFROM
.addr COPYTO
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Constants ; Constants

View File

@@ -0,0 +1,8 @@
;
; Oliver Schmidt, 2013-05-31
;
.export em_libref
.import _exit
em_libref := _exit