Assembly 错误:当我尝试组装我的nes游戏时,范围错误(130不在[-128..127]中)消息

Assembly 错误:当我尝试组装我的nes游戏时,范围错误(130不在[-128..127]中)消息,assembly,6502,nes,Assembly,6502,Nes,我在第248行得到的错误没有任何意义: Error: Range error (130 not in [-128..127]) 我不知道为什么会发生这种情况,因为这一行的所有内容都只是一个到标签的跳转命令,如果范围错误是指跳转,那么标签距离跳转也不远。这似乎完全是随机的。你能帮忙吗 代码如下: collisonram = $700 .segment "HEADER" .byte "NES" .byte $1A .byte $02 .byte $01 .byte %00000000 .by

我在第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"

谢谢

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

如果你把那条线标上,会有帮助的。似乎是
bne finishupdateball
,它实际上位于322行的下方。好的,这是在有线标记的粘贴箱上。那一跳超出了范围。我不知道你为什么说它“甚至没有那么远”。我不知道。。。但是现在我可以修复它,而不是直接转到
finishupdateball
,转到
jmp finishupdateball
4行。