mirror of
https://github.com/cc65/cc65.git
synced 2025-02-05 20:31:53 +00:00
Improved reu size detection.
This commit is contained in:
parent
24cfcfdd4f
commit
40e93dd931
@ -92,17 +92,56 @@ INSTALL:
|
||||
cmp REU_REUADDR ; Check for presence of REU
|
||||
bne nodevice
|
||||
|
||||
ldy #>(128*4) ; Assume 128KB
|
||||
lda REU_STATUS
|
||||
and #$10 ; Check size bit
|
||||
beq @L1
|
||||
ldy #>(256*4) ; 256KB when size bit is set
|
||||
@L1: sty pagecount+1
|
||||
|
||||
; determine the size
|
||||
php
|
||||
sei
|
||||
ldy #$FF
|
||||
sty curpage
|
||||
sty curpage+1 ; Invalidate the current page
|
||||
txa ; X = A = EM_ERR_OK
|
||||
loop:
|
||||
sty window
|
||||
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
|
||||
|
||||
; No REU found
|
||||
|
@ -92,19 +92,59 @@ INSTALL:
|
||||
cmp REU_REUADDR ; Check for presence of REU
|
||||
bne nodevice
|
||||
|
||||
ldy #>(128*4) ; Assume 128KB
|
||||
lda REU_STATUS
|
||||
and #$10 ; Check size bit
|
||||
beq @L1
|
||||
ldy #>(256*4) ; 256KB when size bit is set
|
||||
@L1: sty pagecount+1
|
||||
|
||||
; determine the size
|
||||
php
|
||||
sei
|
||||
ldy #$FF
|
||||
sty curpage
|
||||
sty curpage+1 ; Invalidate the current page
|
||||
txa ; X = A = EM_ERR_OK
|
||||
loop:
|
||||
sty window
|
||||
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
|
||||
|
||||
|
||||
; No REU found
|
||||
|
||||
nodevice:
|
||||
|
Loading…
x
Reference in New Issue
Block a user