PDP 11/45 light chaser

Kevin Handy kth at srv.net
Mon May 23 12:46:12 CDT 2005


Brent Hilpert wrote:

>Jay West wrote:
>  
>
>>It's been decades since I looked at '11 assembler
>>    
>>
>
>(Disclaimer: I haven't dealt with '11 assembler since ~1982 either.)
>
>
>  
>
>>So, why would the branch at location 1016 go back to the data
>>at 1002? Obviously there's something I'm missing. 
>>    
>>
>
>The comment is incorrect. The intent is to go to 1004.
>
>
>  
>
>>Jim wrote....
>>    
>>
>>>Location  Content   Op-code            comment
>>>001000    012700    mov #1,r0          load ro with 1
>>>      
>>>
>                                                 ^ comment should be "r0" not "ro"
>  
>
>>>001002    000001
>>>001004    006100    rol                rotate r1 left
>>>      
>>>
>                                                   ^ comment should be "rotate r0 left"
>  
>
>>>001006    012701    mov delay r1       load register r1 with delay
>>>001010    007777    delay
>>>001012    005301    dec r1             decrement register 1
>>>001014    001376    bne -2             continue to decrement r1 until r1=0
>>>      
>>>
>                  -2   =    -2
>  
>
>>>001016    000772    br -12             back to 001002 (dec r0)
>>>      
>>>
>                  -6  <>   -12                          ^ comment should be "001004", 
>                                                            ^ comment should be "rotate r0" not "dec r0"
>
>At 1014 the machine code and assembler instruction are consistent, and correct for word offsets.
>At 1016 the machine code and assembler instruction are NOT consistent, but machine code is still correct for word offsets.
>(And presuming branch offsets are calculated relative to instruction following the branch (after PC increment).)
>
>There are some inconsistencies between the machine code / mnemonics / comments, but that doesn't explain why it doesn't work. 
>I'm sure the '11 experts will chime in here...
>
>
>  
>
Using simh you can see what the code does.
A couple possibilities as to why it isn't.

1. Make sure console is set up to monitor R0
   iirc: there are knobs on the front panel to determine what
   you are looking at.
2. Running too fast? increase the value at 1010 (077777?)


Here is a badly documented run of this program in simh

** Start up simh emulator
./BIN/pdp11 


PDP-11 simulator V3.3-1
** Load in the program
sim> d 001000    012700
sim> d 001002    000001
sim> d 001004    006100
sim> d 001006    012701
sim> d 001010    007777 
sim> d 001012    005301
sim> d 001014    001376
sim> d 001016    000772
* Verify what we entered
sim>  e 001000-001016
1000:   012700
1002:   000001
1004:   006100
1006:   012701
1010:   007777
1012:   005301
1014:   001376
1016:   000772
* Look at the disassembly
sim>  e -m 001000-001016
1000:   MOV #1,R0
1004:   ROL R0
1006:   MOV #7777,R1
1012:   DEC R1
1014:   BNE 1012
1016:   BR 1004
** Note that the BR is to 1004, not 1002
** Load start address
sim> de pc 01000
** Set up a breakpoint
sim> br 001016

** Single step through instructions
sim> s

Step expired, PC: 001004 (ROL R0)
sim> s

Step expired, PC: 001006 (MOV #7777,R1)
sim> s

Step expired, PC: 001012 (DEC R1)
sim> s

Step expired, PC: 001014 (BNE 1012)
Step expired, PC: 001012 (DEC R1)
sim> s

Step expired, PC: 001014 (BNE 1012)
** This gets boring after a while, so we execute till the breakpoint
sim> go

Breakpoint, PC: 001016 (BR 1004)
sim> e r0
R0:     000002

sim> go

Breakpoint, PC: 001016 (BR 1004)
sim> e r0
R0:     000004

** And see where it goes from there
sim> s

Step expired, PC: 001004 (ROL R0)
sim> s

Step expired, PC: 001006 (MOV #7777,R1)



More information about the cctalk mailing list