1

我在第 248 行收到此错误,这没有任何意义:

Error: Range error (130 not in [-128..127]) 

我不知道为什么会发生这种情况,因为该行的所有内容只是一个到标签的跳转命令,如果这是范围错误的含义,那么它离跳转甚至不远。这似乎完全是随机的。你能帮忙吗?

这是代码:

collisonram = $700

.segment "HEADER"

.byte "NES"
.byte $1A
.byte $02
.byte $01
.byte %00000000
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00, $00, $00, $00, $00

.segment "ZEROPAGE"

northwest = $01
southwest = $02
northeast = $03
southeast = $04
collsionHandler: .res 1
balldirection:   .res 1
paddlespeed:     .res 1 
ballspeed:       .res 1
paddlexpos:      .res 1
paddleypos:      .res 1
ballxpos:        .res 1
ballypos:        .res 1

.segment "STARTUP"

Reset:
    sei 
    cld 
    ldx #$40
    stx $4017
    ldx #$FF
    txs 
    inx 
    stx $2000
    stx $2001 
    stx $4010
:
    bit $2002
    bpl :-
    txa 

clearmem:
    sta $0000, x
    sta $0100, x
    sta $0300, x
    sta $0400, x
    sta $0500, x 
    sta $0600, x
    sta $0700, x
    lda #$FF
    sta $0200, x
    lda #$00
    inx 
    bne clearmem 
:
    bit $2002
    bpl :-
    lda #$02
    sta $4014
    nop 
    lda #$3F
    sta $2006
    lda #$00
    sta $2006
    ldx #$00

loadpalettes:
    lda PaletteData, x
    sta $2007
    inx 
    cpx #$20
    bne loadpalettes
    ldx #$00   

enableNMI:
    cli 
    lda #%10010000
    sta $2000
    lda #%00011110
    sta $2001

init:
    ldx #$00
initCollisionRam:
    lda CollisionMap, x
    sta collisonram, x
    inx 
    cpx #$78
    bne initCollisionRam
    lda #$C8
    sta paddlexpos 
    sta paddleypos
    lda #$64
    sta ballxpos
    sta ballypos
    lda #southeast 
    sta balldirection
    lda #$02
    sta paddlespeed
    sta ballspeed

Forever:
    jmp Forever

CheckCollide:
    txa 
    lsr 
    lsr 
    lsr 
    lsr 
    lsr 
    lsr 
    sta collsionHandler
    tya 
    lsr 
    lsr 
    lsr 
    asl 
    asl 
    clc 
    adc collsionHandler
    tay 
    txa 
    lsr 
    lsr 
    lsr 
    and #%00000111
    tax 
    lda collisonram, y
    and BitMask, x
    rts 

update:
    lda #$01
    sta $4016
    lda #$00
    sta $4016
    lda $4016
    and #%00000001
    cmp #%00000001
    bne A_not_pressed
A_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne B_not_pressed
B_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Select_not_pressed
Select_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Start_not_pressed
Start_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Up_not_pressed
Up_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Down_not_pressed
Down_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Left_not_pressed
    lda paddlexpos 
    sec 
    sbc paddlespeed 
    sta paddlexpos
    lda paddlexpos
    clc 
    adc #$10
    tax 
    ldy paddleypos 
    jsr CheckCollide
    beq :+
    lda paddlexpos 
    clc 
    adc paddlespeed 
    sta paddlexpos
:    
Left_not_pressed:
    lda $4016
    and #%00000001
    cmp #%00000001
    bne Right_not_pressed
    lda paddlexpos 
    clc 
    adc paddlespeed
    sta paddlexpos
    lda paddlexpos 
    clc 
    adc #$18
    tax 
    ldy paddleypos 
    jsr CheckCollide
    beq :+
    lda paddlexpos 
    sec 
    sbc paddlespeed 
    sta paddlexpos
:
Right_not_pressed:

updateBall:
    lda balldirection
    cmp #northwest 
    beq move_northwest 
    cmp #southwest 
    beq move_southwest
    cmp #northeast 
    beq move_northeast 
    cmp #southeast
    beq move_southeast 
    jmp finishupdateball
move_northwest:
    lda ballxpos 
    sec 
    sbc ballspeed 
    sta ballxpos  
    lda ballypos 
    sec 
    sbc ballspeed 
    sta ballypos
    lda ballypos 
    cmp #$00
    bne :+
    lda #southwest
    sta balldirection
:
    lda ballxpos 
    clc 
    adc #$08
    cmp #$00
    bne finishupdateball
    lda #northeast 
    sta balldirection
    jmp finishupdateball
move_southwest:
    lda ballxpos
    sec 
    sbc ballspeed 
    sta ballxpos  
    lda ballypos 
    clc 
    adc ballspeed 
    sta ballypos
    ldx ballxpos 
    ldy ballypos 
    jsr CheckCollide
    beq :+
    lda #northwest 
    sta balldirection
:
    lda ballxpos 
    clc 
    adc #$08
    cmp #$00
    bne finishupdateball
    lda #southeast
    sta balldirection
    jmp finishupdateball
move_northeast:
    lda ballxpos 
    clc 
    adc ballspeed 
    sta ballxpos
    lda ballypos 
    sec 
    sbc ballspeed 
    sta ballypos 
    lda ballypos 
    cmp #$00
    bne :+
    lda #southeast 
    sta balldirection
:
    lda ballxpos 
    sec 
    sbc #$1F
    cmp #$D1
    bne finishupdateball
    lda #northwest 
    sta balldirection
    jmp finishupdateball
move_southeast: 
    lda ballxpos 
    clc 
    adc ballspeed 
    sta ballxpos 
    lda ballypos 
    clc 
    adc ballspeed 
    sta ballypos
    ldx ballxpos 
    ldy ballypos 
    jsr CheckCollide
    beq :+
    lda #northeast
    sta balldirection
:
    lda ballxpos 
    sec 
    sbc #$1F
    cmp #$D1
    bne finishupdateball
    lda #southwest
    sta balldirection
finishupdateball:
setpaddlecollision:

    rts 

draw:
    lda #$08
    clc 
    adc ballypos
    sta $0200
    lda #$00
    sta $0201
    sta $0202
    lda #$08
    clc 
    adc ballxpos 
    sta $0203  
    lda #$08
    clc 
    adc paddleypos  
    sta $0204
    lda #$01
    sta $0205
    sta $0206
    lda #$08
    clc 
    adc paddlexpos 
    sta $0207  
    lda #$08
    clc 
    adc paddleypos 
    sta $0208
    lda #$02
    sta $0209
    lda #$01
    sta $020A
    lda #$08
    clc 
    adc paddlexpos 
    clc 
    adc #$08
    sta $020B
    lda #$08
    clc 
    adc paddleypos 
    sta $020C
    lda #$03
    sta $020D
    lda #$01
    sta $020E
    lda #$08
    clc 
    adc paddlexpos
    clc 
    adc #$10
    sta $020F
    rts 

NMI:
    lda #$00
    sta $2003
    lda #$02
    sta $4014
    jsr draw 
    jsr update
    rti 

PaletteData:
.byte $0C,$29,$1A,$0F,$22,$36,$17,$0f,$22,$30,$21,$0f,$22,$27,$17,$0F  ;background palette data
.byte $0C,$27,$28,$39,$0C,$16,$16,$17,$0C,$06,$0F,$12,$22,$0F,$36,$17  ;sprite palette data

CollisionMap:
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %10000000, %00000000, %00000000, %00000001 
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000
    .byte %00000000, %00000000, %00000000, %00000000

BitMask:
    .byte %10000000
    .byte %01000000
    .byte %00100000
    .byte %00010000
    .byte %00001000
    .byte %00000100
    .byte %00000010
    .byte %00000001

.segment "VECTORS"
    .word NMI
    .word Reset
.segment "CHARS"
    .incbin "../chrrom.chr"

谢谢

4

1 回答 1

1

它真的超出了范围,我想我太愚蠢了,没有意识到这一点。问题解决了

于 2020-03-27T02:26:36.897 回答