mirror of
https://github.com/cc65/cc65.git
synced 2025-08-13 08:25:28 +00:00
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:
@@ -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.
|
||||||
|
Reference in New Issue
Block a user