Ardvaark
May 11, 2009, 03:21 PM
I need help in figuring out a puzzle that uses 6502 Assembly language. Here's the link to the puzzle:
http://www.geocaching.com/seek/cache_details.aspx?guid=038bed06-ed5c-473f-b585-46c72e8b23ee
Any help would be appreciated!
iSee
May 11, 2009, 05:31 PM
Wow, this is a weird question.
Well, I found an online 6502 disassembler and pasted your opcode in to get this result:
* = 0300
0300 A0 00 LDY #$00
0302 B9 11 03 LDA $0311,Y
0305 F0 09 BEQ $0310
0307 20 ED FD JSR $FDED
030A C8 INY
030B E8 INX
030C C8 INY
030D 4C 02 03 JMP $0302
0310 60 RTS
0311 B3 ???
0312 B8 CLV
0313 B2 ???
0314 B3 ???
0315 B0 CA BCS $02E1
0317 CE D3 D7 DEC $D7D3
031A B2 ???
031B B6 B5 LDX $B5,Y
031D B9 B9 B4 LDA $B4B9,Y
0320 AE C0 B6 LDX $B6C0
0323 B9 B0 B9 LDA $B9B0,Y
0326 B2 ???
0327 B1 B6 LDA ($B6),Y
0329 B4 B2 LDY $B2,X
032B B3 ???
032C AC AE B9 LDY $B9AE
032F B1 B1 LDA ($B1),Y
0331 B9 B1 B5 LDA $B5B1,Y
0334 B4 B2 LDY $B2,X
0336 B2 ???
0337 D1 D7 CMP ($D7),Y
0339 C5 D3 CMP $D3
033B B0 B1 BCS $02EE
033D B4 B0 LDY $B0,X
033F B0 B8 BCS $02F9
0341 AE AE B5 LDX $B5AE
0344 B1 B3 LDA ($B3),Y
0346 B4 B7 LDY $B7,X
0348 B6 B5 LDX $B5,Y
034A B3 ???
034B B0 B9 BCS $0306
034D AC B2 B3 LDY $B3B2
0350 C2 ???
0351 D3 ???
0352 C4 C1 CPY $C1
0354 D7 ???
0355 C5 C3 CMP $C3
0357 C2 ???
0358 D6 CB DEC $CB,X
035A CC CC A0 CPY $A0CC
035D B4 CE LDY $CE,X
035F D0 C1 BNE $0322
0361 D2 ???
0362 C1 D5 CMP ($D5,X)
0364 D9 D4 C3 CMP $C3D4,Y
0367 C6 C9 DEC $C9
0369 AC B9 CF LDY $CFB9
036C 00 BRK
036D 00 BRK
036E 00 BRK
036F 00 BRK
0370 .END
So, from very rusty memory:
0300 A0 00 LDY #$00 --> loads the Y register (8 bits) with 0
0302 B9 11 03 LDA $0311,Y --> load the accumulator (8 bits) with the byte at address (0311 + Y). Since Y is zero right now, it loads the accumulator with the value B3.
0305 F0 09 BEQ $0310 --> if the acculator is zero, jump to address 0310. 0310 just has an RTS opcode, which is "return".
0307 20 ED FD JSR $FDED --> This is calling a routine at FDED. I don't know what it does. Let's say it outputs the value of the accumulator???
030A C8 INY --> increment Y register
030B E8 INX --> increment X register !!! not previously used !!!
030C C8 INY --> increment Y register
030D 4C 02 03 JMP $0302 --> jump to 302
So this is a loop that processes every other byte starting at address 0311. It terminates when a zero is encountered.
I guess the "bug" in the program is that 030B should be another INY (INX doesn't make any sense since the x register is not used elsewhere, though it's a complete guess on my part that it is supposed to be another INY). So maybe this is supposed to process every third byte.
Edit: Oh, actually, that's what the puzzle says -- replace the INX (increment X) with INY (increment Y) So it does process every third byte starting at address 0311
Ardvaark
May 11, 2009, 08:31 PM
Hmmmm. I still don't get what I am supposed to do with this. Is there a way to run the corrected program (without having the original oldie Apple computer??
MisterMe
May 11, 2009, 11:15 PM
Hmmmm. I still don't get what I am supposed to do with this. Is there a way to run the corrected program (without having the original oldie Apple computer??Well, you could try an emulator (http://www.xs4all.nl/~gp/VirtualII/).
Ardvaark
May 12, 2009, 01:06 AM
Thanks all! I used the corrected code and I emulated and got the answer I needed!!!!!! You rock!!!!
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.