Added size checking code contributed by Marco van den Heuvel.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4568 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
cf4d3d0a16
commit
6c2fb80084
1 changed files with 82 additions and 5 deletions
|
@ -3,6 +3,9 @@
|
||||||
; problems when statically linked.
|
; problems when statically linked.
|
||||||
;
|
;
|
||||||
; Ullrich von Bassewitz, 2002-11-29
|
; Ullrich von Bassewitz, 2002-11-29
|
||||||
|
;
|
||||||
|
; GEORAM page size checking routine by
|
||||||
|
; Marco van den Heuvel, 2010-01-21
|
||||||
;
|
;
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
|
@ -32,7 +35,7 @@
|
||||||
.word MAP
|
.word MAP
|
||||||
.word USE
|
.word USE
|
||||||
.word COMMIT
|
.word COMMIT
|
||||||
.word COPYFROM
|
.word COPYFROM
|
||||||
.word COPYTO
|
.word COPYTO
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
|
@ -47,7 +50,7 @@ GR_PAGE_HI = $DFFF ; Page register high
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
pagecount: .word 2048 ; Currently fixed
|
pagecount: .res 2 ; Number of available pages
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
|
@ -59,9 +62,83 @@ pagecount: .word 2048 ; Currently fixed
|
||||||
;
|
;
|
||||||
|
|
||||||
INSTALL:
|
INSTALL:
|
||||||
lda #<EM_ERR_OK
|
ldx GR_WINDOW
|
||||||
ldx #>EM_ERR_OK
|
cpx GR_WINDOW
|
||||||
; rts ; Run into UNINSTALL instead
|
bne @notpresent
|
||||||
|
inc GR_WINDOW
|
||||||
|
cpx GR_WINDOW
|
||||||
|
beq @notpresent
|
||||||
|
|
||||||
|
lda #4
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has64k
|
||||||
|
lda #8
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has128k
|
||||||
|
lda #16
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has256k
|
||||||
|
lda #32
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has512k
|
||||||
|
lda #64
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has1024k
|
||||||
|
lda #128
|
||||||
|
jsr check
|
||||||
|
cpy GR_WINDOW
|
||||||
|
beq @has2048k
|
||||||
|
ldx #>16384
|
||||||
|
bne @setok
|
||||||
|
|
||||||
|
@has64k:
|
||||||
|
ldx #>256
|
||||||
|
bne @setok
|
||||||
|
@has128k:
|
||||||
|
ldx #>512
|
||||||
|
bne @setok
|
||||||
|
@has256k:
|
||||||
|
ldx #>1024
|
||||||
|
bne @setok
|
||||||
|
@has512k:
|
||||||
|
ldx #>2048
|
||||||
|
bne @setok
|
||||||
|
@has1024k:
|
||||||
|
ldx #>4096
|
||||||
|
bne @setok
|
||||||
|
@has2048k:
|
||||||
|
ldx #>8192
|
||||||
|
bne @setok
|
||||||
|
|
||||||
|
@notpresent:
|
||||||
|
lda #<EM_ERR_NO_DEVICE
|
||||||
|
ldx #>EM_ERR_NO_DEVICE
|
||||||
|
rts
|
||||||
|
|
||||||
|
@setok:
|
||||||
|
lda #0
|
||||||
|
sta pagecount
|
||||||
|
stx pagecount+1
|
||||||
|
lda #<EM_ERR_OK
|
||||||
|
ldx #>EM_ERR_OK
|
||||||
|
rts
|
||||||
|
|
||||||
|
check:
|
||||||
|
ldx #0
|
||||||
|
stx GR_PAGE_LO
|
||||||
|
stx GR_PAGE_HI
|
||||||
|
ldy GR_WINDOW
|
||||||
|
iny
|
||||||
|
sta GR_PAGE_HI
|
||||||
|
sty GR_WINDOW
|
||||||
|
ldx #0
|
||||||
|
stx GR_PAGE_HI
|
||||||
|
; rts ; Run into UNINSTALL instead
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
; UNINSTALL routine. Is called before the driver is removed from memory.
|
; UNINSTALL routine. Is called before the driver is removed from memory.
|
||||||
|
|
Loading…
Add table
Reference in a new issue