Improved reu size detection.
This commit is contained in:
@@ -92,17 +92,56 @@ INSTALL:
|
|||||||
cmp REU_REUADDR ; Check for presence of REU
|
cmp REU_REUADDR ; Check for presence of REU
|
||||||
bne nodevice
|
bne nodevice
|
||||||
|
|
||||||
ldy #>(128*4) ; Assume 128KB
|
; determine the size
|
||||||
lda REU_STATUS
|
php
|
||||||
and #$10 ; Check size bit
|
sei
|
||||||
beq @L1
|
|
||||||
ldy #>(256*4) ; 256KB when size bit is set
|
|
||||||
@L1: sty pagecount+1
|
|
||||||
|
|
||||||
ldy #$FF
|
ldy #$FF
|
||||||
sty curpage
|
loop:
|
||||||
sty curpage+1 ; Invalidate the current page
|
sty window
|
||||||
txa ; X = A = EM_ERR_OK
|
jsr reu_size_check_common
|
||||||
|
ldx #%10110000
|
||||||
|
stx REU_COMMAND
|
||||||
|
dey
|
||||||
|
cpy #$FF
|
||||||
|
bne loop
|
||||||
|
iny
|
||||||
|
size_loop:
|
||||||
|
jsr reu_size_check_common
|
||||||
|
ldx #%10110001
|
||||||
|
stx REU_COMMAND
|
||||||
|
cpy window
|
||||||
|
bne size_found
|
||||||
|
iny
|
||||||
|
bne size_loop
|
||||||
|
size_found:
|
||||||
|
plp
|
||||||
|
ldx #$00
|
||||||
|
cpy #$00 ; too many pages, shave off 2
|
||||||
|
bne pagecount_ok
|
||||||
|
dex
|
||||||
|
dex
|
||||||
|
dey
|
||||||
|
pagecount_ok:
|
||||||
|
stx pagecount
|
||||||
|
sty pagecount+1
|
||||||
|
lda #<EM_ERR_OK
|
||||||
|
ldx #>EM_ERR_OK
|
||||||
|
rts
|
||||||
|
|
||||||
|
; common REU setup for size check
|
||||||
|
reu_size_check_common:
|
||||||
|
sty REU_REUADDR+2
|
||||||
|
ldx #<window
|
||||||
|
stx REU_C64ADDR
|
||||||
|
ldx #>window
|
||||||
|
stx REU_C64ADDR+1
|
||||||
|
ldx #$00
|
||||||
|
stx REU_REUADDR
|
||||||
|
stx REU_REUADDR+1
|
||||||
|
stx REU_COUNT+1
|
||||||
|
stx REU_CONTROL
|
||||||
|
inx
|
||||||
|
stx REU_COUNT
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; No REU found
|
; No REU found
|
||||||
|
|||||||
@@ -92,19 +92,59 @@ INSTALL:
|
|||||||
cmp REU_REUADDR ; Check for presence of REU
|
cmp REU_REUADDR ; Check for presence of REU
|
||||||
bne nodevice
|
bne nodevice
|
||||||
|
|
||||||
ldy #>(128*4) ; Assume 128KB
|
; determine the size
|
||||||
lda REU_STATUS
|
php
|
||||||
and #$10 ; Check size bit
|
sei
|
||||||
beq @L1
|
|
||||||
ldy #>(256*4) ; 256KB when size bit is set
|
|
||||||
@L1: sty pagecount+1
|
|
||||||
|
|
||||||
ldy #$FF
|
ldy #$FF
|
||||||
sty curpage
|
loop:
|
||||||
sty curpage+1 ; Invalidate the current page
|
sty window
|
||||||
txa ; X = A = EM_ERR_OK
|
jsr reu_size_check_common
|
||||||
|
ldx #%10110000
|
||||||
|
stx REU_COMMAND
|
||||||
|
dey
|
||||||
|
cpy #$FF
|
||||||
|
bne loop
|
||||||
|
iny
|
||||||
|
size_loop:
|
||||||
|
jsr reu_size_check_common
|
||||||
|
ldx #%10110001
|
||||||
|
stx REU_COMMAND
|
||||||
|
cpy window
|
||||||
|
bne size_found
|
||||||
|
iny
|
||||||
|
bne size_loop
|
||||||
|
size_found:
|
||||||
|
plp
|
||||||
|
ldx #$00
|
||||||
|
cpy #$00 ; too many pages, shave off 2
|
||||||
|
bne pagecount_ok
|
||||||
|
dex
|
||||||
|
dex
|
||||||
|
dey
|
||||||
|
pagecount_ok:
|
||||||
|
stx pagecount
|
||||||
|
sty pagecount+1
|
||||||
|
lda #<EM_ERR_OK
|
||||||
|
ldx #>EM_ERR_OK
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; common REU setup for size check
|
||||||
|
reu_size_check_common:
|
||||||
|
sty REU_REUADDR+2
|
||||||
|
ldx #<window
|
||||||
|
stx REU_C64ADDR
|
||||||
|
ldx #>window
|
||||||
|
stx REU_C64ADDR+1
|
||||||
|
ldx #$00
|
||||||
|
stx REU_REUADDR
|
||||||
|
stx REU_REUADDR+1
|
||||||
|
stx REU_COUNT+1
|
||||||
|
stx REU_CONTROL
|
||||||
|
inx
|
||||||
|
stx REU_COUNT
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
; No REU found
|
; No REU found
|
||||||
|
|
||||||
nodevice:
|
nodevice:
|
||||||
|
|||||||
Reference in New Issue
Block a user