An already loaded driver is an error in ser_load_driver, because the library

cannot know if it was dynamically loaded or statically linked.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5794 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz
2012-07-22 19:54:04 +00:00
parent e7ed3b374f
commit dcff1d0774
3 changed files with 32 additions and 27 deletions

View File

@@ -37,22 +37,22 @@ ctrl: .addr _read
.proc _ser_load_driver
; Save name on the C stack. We will need it later as parameter passed to open()
; Check if we do already have a driver loaded. This is an error. Do not
; touch A/X because they contain the file name.
jsr pushax
; Check if we do already have a driver loaded. If so, remove it.
lda _ser_drv
ora _ser_drv+1
ldy _ser_drv
bne @L0
ldy _ser_drv+1
beq @L1
jsr _ser_uninstall
@L0: lda #SER_ERR_INSTALLED
bne @L4
; Open the file. The name parameter is already on stack and will get removed
; by open().
; Push the name onto the C stack and open the file. The parameter will get
; removed by open().
; ctrl.callerdata = open (name, O_RDONLY);
@L1: lda #<O_RDONLY
@L1: jsr pushax
lda #<O_RDONLY
jsr pusha0
ldy #4 ; Argument size
jsr _open
@@ -113,7 +113,7 @@ ctrl: .addr _read
; Open or mod_load failed. Return an error code.
@L3: lda #<SER_ERR_CANNOT_LOAD
ldx #>SER_ERR_CANNOT_LOAD
@L4: ldx #0
rts
.endproc