I hope resurrecting an old thread isn't too frowned upon, I just figured it would be be better to continue here where I left off then to start a new one. Got busy with life, but now I want to finally finish the project I started earlier this year.
My simulator is making it to the first test, where it fails. I am running
load_data_direct = 0
This is the listing of the test that is failing
Code:
;testing relative addressing with BEQ
0435 : a0fe ldy #$fe ;testing maximum range, not -1/-2 (invalid/self adr)
0437 : range_loop
0437 : 88 dey ;next relative address
0438 : 98 tya
0439 : aa tax ;precharge count to end of loop
043a : 1003 bpl range_fw ;calculate relative address
043c : 18 clc ;avoid branch self or to relative address of branch
043d : 6902 adc #2
043f : range_fw
043f : 497f eor #$7f ;complement except sign
0441 : 8dc804 sta range_adr ;load into test target
0444 : a900 lda #0 ;should set zero flag in status register
0446 : 4cc704 jmp range_op
0449 : ca dex ;-128 - max backward
044a : ca dex
044b : ca dex
044c : ca dex
044d : ca dex
044e : ca dex
044f : ca dex
0450 : ca dex
0451 : ca dex ;-120
0452 : ca dex
0453 : ca dex
0454 : ca dex
0455 : ca dex
0456 : ca dex
0457 : ca dex
0458 : ca dex
0459 : ca dex
045a : ca dex
045b : ca dex ;-110
045c : ca dex
045d : ca dex
045e : ca dex
045f : ca dex
0460 : ca dex
0461 : ca dex
0462 : ca dex
0463 : ca dex
0464 : ca dex
0465 : ca dex ;-100
0466 : ca dex
0467 : ca dex
0468 : ca dex
0469 : ca dex
046a : ca dex
046b : ca dex
046c : ca dex
046d : ca dex
046e : ca dex
046f : ca dex ;-90
0470 : ca dex
0471 : ca dex
0472 : ca dex
0473 : ca dex
0474 : ca dex
0475 : ca dex
0476 : ca dex
0477 : ca dex
0478 : ca dex
0479 : ca dex ;-80
047a : ca dex
047b : ca dex
047c : ca dex
047d : ca dex
047e : ca dex
047f : ca dex
0480 : ca dex
0481 : ca dex
0482 : ca dex
0483 : ca dex ;-70
0484 : ca dex
0485 : ca dex
0486 : ca dex
0487 : ca dex
0488 : ca dex
0489 : ca dex
048a : ca dex
048b : ca dex
048c : ca dex
048d : ca dex ;-60
048e : ca dex
048f : ca dex
0490 : ca dex
0491 : ca dex
0492 : ca dex
0493 : ca dex
0494 : ca dex
0495 : ca dex
0496 : ca dex
0497 : ca dex ;-50
0498 : ca dex
0499 : ca dex
049a : ca dex
049b : ca dex
049c : ca dex
049d : ca dex
049e : ca dex
049f : ca dex
04a0 : ca dex
04a1 : ca dex ;-40
04a2 : ca dex
04a3 : ca dex
04a4 : ca dex
04a5 : ca dex
04a6 : ca dex
04a7 : ca dex
04a8 : ca dex
04a9 : ca dex
04aa : ca dex
04ab : ca dex ;-30
04ac : ca dex
04ad : ca dex
04ae : ca dex
04af : ca dex
04b0 : ca dex
04b1 : ca dex
04b2 : ca dex
04b3 : ca dex
04b4 : ca dex
04b5 : ca dex ;-20
04b6 : ca dex
04b7 : ca dex
04b8 : ca dex
04b9 : ca dex
04ba : ca dex
04bb : ca dex
04bc : ca dex
04bd : ca dex
04be : ca dex
04bf : ca dex ;-10
04c0 : ca dex
04c1 : ca dex
04c2 : ca dex
04c3 : ca dex
04c4 : ca dex
04c5 : ca dex
04c6 : ca dex ;-3
04c7 : range_op ;test target with zero flag=0, z=1 if previous dex
04c8 = range_adr = *+1 ;modifiable relative address
04c7 : f03e beq *+64 ;if called without modification
04c9 : ca dex ;+0
04ca : ca dex
04cb : ca dex
04cc : ca dex
04cd : ca dex
04ce : ca dex
04cf : ca dex
04d0 : ca dex
04d1 : ca dex
04d2 : ca dex
04d3 : ca dex ;+10
04d4 : ca dex
04d5 : ca dex
04d6 : ca dex
04d7 : ca dex
04d8 : ca dex
04d9 : ca dex
04da : ca dex
04db : ca dex
04dc : ca dex
04dd : ca dex ;+20
04de : ca dex
04df : ca dex
04e0 : ca dex
04e1 : ca dex
04e2 : ca dex
04e3 : ca dex
04e4 : ca dex
04e5 : ca dex
04e6 : ca dex
04e7 : ca dex ;+30
04e8 : ca dex
04e9 : ca dex
04ea : ca dex
04eb : ca dex
04ec : ca dex
04ed : ca dex
04ee : ca dex
04ef : ca dex
04f0 : ca dex
04f1 : ca dex ;+40
04f2 : ca dex
04f3 : ca dex
04f4 : ca dex
04f5 : ca dex
04f6 : ca dex
04f7 : ca dex
04f8 : ca dex
04f9 : ca dex
04fa : ca dex
04fb : ca dex ;+50
04fc : ca dex
04fd : ca dex
04fe : ca dex
04ff : ca dex
0500 : ca dex
0501 : ca dex
0502 : ca dex
0503 : ca dex
0504 : ca dex
0505 : ca dex ;+60
0506 : ca dex
0507 : ca dex
0508 : ca dex
0509 : ca dex
050a : ca dex
050b : ca dex
050c : ca dex
050d : ca dex
050e : ca dex
050f : ca dex ;+70
0510 : ca dex
0511 : ca dex
0512 : ca dex
0513 : ca dex
0514 : ca dex
0515 : ca dex
0516 : ca dex
0517 : ca dex
0518 : ca dex
0519 : ca dex ;+80
051a : ca dex
051b : ca dex
051c : ca dex
051d : ca dex
051e : ca dex
051f : ca dex
0520 : ca dex
0521 : ca dex
0522 : ca dex
0523 : ca dex ;+90
0524 : ca dex
0525 : ca dex
0526 : ca dex
0527 : ca dex
0528 : ca dex
0529 : ca dex
052a : ca dex
052b : ca dex
052c : ca dex
052d : ca dex ;+100
052e : ca dex
052f : ca dex
0530 : ca dex
0531 : ca dex
0532 : ca dex
0533 : ca dex
0534 : ca dex
0535 : ca dex
0536 : ca dex
0537 : ca dex ;+110
0538 : ca dex
0539 : ca dex
053a : ca dex
053b : ca dex
053c : ca dex
053d : ca dex
053e : ca dex
053f : ca dex
0540 : ca dex
0541 : ca dex ;+120
0542 : ca dex
0543 : ca dex
0544 : ca dex
0545 : ca dex
0546 : ca dex
0547 : ca dex
0548 : f003 beq range_ok ;+127 - max forward
trap ; bad range
054a : 4c4a05 > jmp * ;failed anyway
054d : range_ok
054d : c000 cpy #0
054f : f003 beq range_end
0551 : 4c3704 jmp range_loop
0554 : range_end ;range test successful
This is my simulator's executed steps
Code:
LDY #$00FE O: 160 L: FE H: 88 PC: 1035 A: 001 X: 255 Y: 000 SP 255 N: 0 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
DEY O: 136 L: H: PC: 1037 A: 001 X: 255 Y: 254 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
TYA O: 152 L: H: PC: 1038 A: 001 X: 255 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
TAX O: 170 L: H: PC: 1039 A: 253 X: 255 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
BPL $103A O: 16 L: 03 H: PC: 103A A: 253 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
CLC O: 24 L: H: PC: 103C A: 253 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 1
ADC #$0002 O: 105 L: 02 H: 49 PC: 103D A: 253 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 0
EOR #$007F O: 73 L: 7F H: 8D PC: 103F A: 255 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 0
STA $04C8 O: 141 L: C8 H: 04 PC: 1041 A: 128 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 0
LDA #$0000 O: 169 L: 00 H: 4C PC: 1044 A: 128 X: 253 Y: 253 SP 255 N: 1 V: 0 B: 0 D: 0 I: 1 Z: 0 C: 0
JMP $04C7 O: 76 L: C7 H: 04 PC: 1046 A: 000 X: 253 Y: 253 SP 255 N: 0 V: 0 B: 0 D: 0 I: 1 Z: 1 C: 0
BRK O: 0 L: H: PC: 4C7 A: 000 X: 253 Y: 253 SP 255 N: 0 V: 0 B: 0 D: 0 I: 1 Z: 1 C: 0
The instruction at 04C7 is empty, which puts me into an invalid state.
I've walked the code in the test a few times manually, and everything looks correct to my untrained eye.