From: uz Date: Mon, 1 Feb 2010 07:20:06 +0000 (+0000) Subject: Added size checking code contributed by Marco van den Heuvel. X-Git-Tag: V2.13.2~33 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6c2fb80084a47b0f55d982d40cd9d55f22f52cd4;p=cc65 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 --- diff --git a/libsrc/c128/c128-georam.s b/libsrc/c128/c128-georam.s index 5199e2ee4..23c3469c5 100644 --- a/libsrc/c128/c128-georam.s +++ b/libsrc/c128/c128-georam.s @@ -3,6 +3,9 @@ ; problems when statically linked. ; ; Ullrich von Bassewitz, 2002-11-29 +; +; GEORAM page size checking routine by +; Marco van den Heuvel, 2010-01-21 ; .include "zeropage.inc" @@ -32,7 +35,7 @@ .word MAP .word USE .word COMMIT - .word COPYFROM + .word COPYFROM .word COPYTO ; ------------------------------------------------------------------------ @@ -47,7 +50,7 @@ GR_PAGE_HI = $DFFF ; Page register high .data -pagecount: .word 2048 ; Currently fixed +pagecount: .res 2 ; Number of available pages .code @@ -59,9 +62,83 @@ pagecount: .word 2048 ; Currently fixed ; INSTALL: - lda #EM_ERR_OK -; rts ; Run into UNINSTALL instead + ldx GR_WINDOW + cpx GR_WINDOW + 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 + rts + +@setok: + lda #0 + sta pagecount + stx pagecount+1 + lda #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.