;
-; Extended memory driver for the Commodore REU
+; Extended memory driver for the Commodore REU. Driver works without
+; problems when statically linked.
;
; Ullrich von Bassewitz, 2002-11-29
;
; Driver signature
.byte $65, $6d, $64 ; "emd"
- .byte $00 ; EM API version number
+ .byte EMD_API_VERSION ; EM API version number
; Jump table.
.word INSTALL
- .word DEINSTALL
+ .word UNINSTALL
.word PAGECOUNT
.word MAP
+ .word USE
.word COMMIT
.word COPYFROM
.word COPYTO
; ------------------------------------------------------------------------
; Data.
-.data
+.bss
pagecount: .res 2 ; Number of pages available
-curpage: .word $FFFF ; Current page number (invalid)
+curpage: .res 2 ; Current page number
-.bss
window: .res 256 ; Memory "window"
reu_params: .word $0000 ; Host address, lo, hi
;
INSTALL:
+ ldx #$00 ; High byte of return code
lda #$55
sta REU_REUADDR
cmp REU_REUADDR ; Check for presence of REU
bne nodevice
- lda #$AA
+ asl a ; A = $AA
sta REU_REUADDR
cmp REU_REUADDR ; Check for presence of REU
bne nodevice
- ldx #>(128*4) ; Assume 128KB
+ ldy #>(128*4) ; Assume 128KB
lda REU_STATUS
and #$10 ; Check size bit
beq @L1
- ldx #>(256*4) ; 256KB when size bit is set
-@L1: stx pagecount+1
+ ldy #>(256*4) ; 256KB when size bit is set
+@L1: sty pagecount+1
- lda #<EM_ERR_OK
- ldx #>EM_ERR_OK
+ ldy #$FF
+ sty curpage
+ sty curpage+1 ; Invalidate the current page
+ txa ; X = A = EM_ERR_OK
rts
; No REU found
nodevice:
- lda #<EM_ERR_NO_DEVICE
- ldx #>EM_ERR_NO_DEVICE
- rts
+ lda #EM_ERR_NO_DEVICE
+; rts ; Run into UNINSTALL instead
; ------------------------------------------------------------------------
-; 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.
;
-DEINSTALL:
+UNINSTALL:
rts
ldx #>window ; Return the window address
done: rts
+; ------------------------------------------------------------------------
+; USE: Tell the driver that the window is now associated with a given page.
+
+USE: sta curpage
+ stx curpage+1 ; Remember the page
+ lda #<window
+ ldx #>window ; Return the window
+ rts
+
; ------------------------------------------------------------------------
; COMMIT: Commit changes in the memory window to extended storage.