Running Code on the
6800 and 6809
Now that you
have EXORsim running
on your workstation, let's look at how you can use it to run some code.
If you shut down after working through the last post, boot back up and change directory to get back in the directory you built EXORsim in, doing something like
$ cd asmwork/exor/exorsim
In the directory where you built EXORsim, start it up with the --mon option.
$ ./exor --mon
Load facts file 'facts'
'exbug.bin' loaded.
EXBUG-1.1 detected
'mdos.dsk' opened for drive 0 (double sided)
OSLOAD...
Hit Ctrl-C for simulator command line. Starting simulation...
> 0 A=00 B=00 X=0000 SP=00FF ------ 0020: B6 E8 00 LDA E800
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
We can start with the 6800 example showing how an accumulator works. The 6800 code, again:
START LDAA #8 ; Gotta start somewhere.
ADDA #5
ADDA #2
ADDA #7
ADDA #4
NOP ; landing pad for breakpoint
Select it from the START label and copy it to the end of the NOP line.
At the % prompt in the debugger, type
a 1000
and enter/return.
You could type it in by hand, but since you've just selected and copied it,
just paste it in. Use the right button on the mouse to pull up an edit menu
over the session window and paste it. Hit enter again after the paste:
% a 1000
1000: START LDAA #8 ; Gotta start somewhere.
1002: ADDA #5
1004: ADDA #2
1006: ADDA #7
1008: ADDA #4
100a: NOP ; landing pad for breakpoint
100b:
%
What have you done?
The "a" command is the assemble command. Joe put the ability to assemble source code into the hosted debugger. (Thanks, Joe!) So you've just assembled the source code of the example into memory starting at hexadecimal $1000.
You can unassemble it if you want, with the "u" command:
% u 1000
1000: 86 08 LDA #$08
1002: 8B 05 ADDA #$05
1004: 8B 02 ADDA #$02
1006: 8B 07 ADDA #$07
1008: 8B 04 ADDA #$04
100A: 01 NOP
100B: 00 ???
100C: 00 ???
...
Unassemble, disassemble, same thing.
Note that the address specified for the debugger commands is read by the
debugger as hexadecimal. (Values in the assembler itself are default
decimal.)
You can display the contents of memory where you assembled it with the "d 1000" command:
% d 1000
1000: 86 08 8B 05 8B 02 8B 07 8B 04 01 00 00 00 00 00 ................
1010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
Now you know why it's "u" for unassemble instead of "d" for disassemble. "d"
is for display. (Or dump, if you prefer, but dump can mean other things.)
How do you run it? One way is to use the "s" command, for step:
% s 1000
0 A=00 B=00 X=0000 SP=00FF ------ START 1000: 86 08 LDA #08 EA=1001 D=08
> 1 A=08 B=00 X=0000 SP=00FF ------ 1002: 8B 05 ADDA #05
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
You'll see that it went to address $1000 and stepped one op-code, showing you the next op-code. And it's nice to see the op-codes disassembled. Unassembled.
Hit "s" all by itself and return and it steps the next one:
% s
1 A=08 B=00 X=0000 SP=00FF ------ 1002: 8B 05 ADDA #05 EA=1003 D=05
> 2 A=0D B=00 X=0000 SP=00FF ------ 1004: 8B 02 ADDA #02
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
2 A=0D B=00 X=0000 SP=00FF ------ 1004: 8B 02 ADDA #02 EA=1005 D=02
> 3 A=0F B=00 X=0000 SP=00FF ------ 1006: 8B 07 ADDA #07
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
3 A=0F B=00 X=0000 SP=00FF ------ 1006: 8B 07 ADDA #07 EA=1007 D=07
> 4 A=16 B=00 X=0000 SP=00FF H----- 1008: 8B 04 ADDA #04
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
4 A=16 B=00 X=0000 SP=00FF H----- 1008: 8B 04 ADDA #04 EA=1009 D=04
> 5 A=1A B=00 X=0000 SP=00FF ------ 100A: 01 NOP
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
And you can watch the effects -- watch the sum accumulate in the accumulator,
and watch the program counter increment as it the simulator sequences through
the op-codes.
If stepping is a little slow for you, you can set a breakpoint with the "b" command, and use the "c" command for continue, until it hits the breakpoint:
% b 100a
Breakpoint set at 100A
% c 1000
Breakpoint!
9 A=16 B=00 X=0000 SP=00FF H----- 1008: 8B 04 ADDA #04 EA=1009 D=04
> 10 A=1A B=00 X=0000 SP=00FF ------ 100A: 01 NOP
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
Note that the simulator's PC has to hit the exact breakpoint to stop. That's part of the reason I use the NOP as a landing pad. It's easier to see where to set the breakpoint.
But you wanted to see it trace through the operations, not just hum away in silence until it hit the breakpoint?
Use the "t" command to turn trace on:
% t on
% c 1000
10 A=1A B=00 X=0000 SP=00FF ------ START 1000: 86 08 LDA #08 EA=1001 D=08
11 A=08 B=00 X=0000 SP=00FF ------ 1002: 8B 05 ADDA #05 EA=1003 D=05
12 A=0D B=00 X=0000 SP=00FF ------ 1004: 8B 02 ADDA #02 EA=1005 D=02
13 A=0F B=00 X=0000 SP=00FF ------ 1006: 8B 07 ADDA #07 EA=1007 D=07
14 A=16 B=00 X=0000 SP=00FF H----- 1008: 8B 04 ADDA #04 EA=1009 D=04
Breakpoint!
> 15 A=1A B=00 X=0000 SP=00FF ------ 100A: 01 NOP
6800 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
Fortunately, the breakpoint was still set.
And you've probably noticed by now that there's a help command. Try it now, just for grins.
Okay, you've got the basics of the debugger in EXORsim down now, you can play around a bit.
Go ahead and try things. If it gets hung up, you can always hit ctrl-C, and if that doesn't work, just close the shell session window and open a new one.
How about the 6809?
Here's the 6809 code for the above:
START LDA #8 ; 6809 mnemonic: LoaD accumulator A
ADDA #5 ; Mnemonic shared with 6800/6801.
ADDA #2
ADDA #7
ADDA #4
NOP ; landing pad for breakpoint
In EXORsim, it's not a whole lot different. The commands are the same. The main difference is the set of op-codes and their mnemonics.
Oh, and the command to start it running is "exor09":
$ ./exor09 --mon
Load facts file 'facts09'
'exbug09.bin' loaded.
EXBUG09-2.1 detected
'mdos09.dsk' opened for drive 0 (double sided)
OSLOAD...
Hit Ctrl-C for simulator command line. Starting simulation...
> 0 A=00 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 0020: 86 10 LDA #$10
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
Everything above looks pretty much the same for the code example above, except
for the 6809's extra registers, for assembling, copying and pasting, disassembling, displaying, stepping, setting breakpoints, continuing, tracing:
% a 1000
1000: START LDA #8 ; 6809 mnemonic: LoaD accumulator A
1002: ADDA #5 ; Mnemonic shared with 6800/6801.
1004: ADDA #2
1006: ADDA #7
1008: ADDA #4
100a: NOP ; landing pad for breakpoint
100b:
% u 1000
1000: 86 08 LDA #$08
1002: 8B 05 ADDA #$05
1004: 8B 02 ADDA #$02
1006: 8B 07 ADDA #$07
1008: 8B 04 ADDA #$04
100A: 12 NOP
100B: 00 00 NEG $00
100D: 00 00 NEG $00
...
% d 1000
1000: 86 08 8B 05 8B 02 8B 07 8B 04 12 00 00 00 00 00 ................
1010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
$ s 1000
10 A=1A B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- START 1000: 86 08 LDA #$08
> 11 A=08 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1002: 8B 05 ADDA #$05
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
11 A=08 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1002: 8B 05 ADDA #$05
> 12 A=0D B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1004: 8B 02 ADDA #$02
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
12 A=0D B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1004: 8B 02 ADDA #$02
> 13 A=0F B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1006: 8B 07 ADDA #$07
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
13 A=0F B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1006: 8B 07 ADDA #$07
> 14 A=16 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 --H----- 1008: 8B 04 ADDA #$04
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% s
14 A=16 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 --H----- 1008: 8B 04 ADDA #$04
> 15 A=1A B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 100A: 12 NOP
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
% b 100a
Breakpoint set at 100A
% c 1000
Breakpoint!
4 A=16 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 --H----- 1008: 8B 04 ADDA #$04
> 5 A=1A B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 100A: 12 NOP
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
% t on
% c 1000
5 A=1A B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- START 1000: 86 08 LDA #$08
6 A=08 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1002: 8B 05 ADDA #$05
7 A=0D B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1004: 8B 02 ADDA #$02
8 A=0F B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 1006: 8B 07 ADDA #$07
9 A=16 B=00 X=0000 Y=0000 U=0000 S=00FF P=00 --H----- 1008: 8B 04 ADDA #$04
Breakpoint!
> 10 A=1A B=00 X=0000 Y=0000 U=0000 S=00FF P=00 -------- 100A: 12 NOP
6809 Monitor: Ctrl-C to exit, 'c' to continue, or type 'help'
%
So, give the 6809 code a try, too, looking for differences.
Then take a rest before proceeding to getting a simulator for the 6801.
No comments:
Post a Comment