python-pdp1170/boot.py
2023-09-04 12:49:58 -05:00

45 lines
1.6 KiB
Python

def boot_hp(p, addr=0o10000):
# this is the sort of thing that would be keyed in from
# the console switches (if the machine was not equipped
# with a boot rom option to hold it instead)
#
# It is a minimalist program, with lots of assumptions, to read 1K
# from block zero of drive 0 into location 0. The execution start
# at zero is done elsewhere.
#
# NOTE WELL: THIS ASSUMES THE MACHINE IS IN RESET CONDITION WHICH
# MEANS MANY OF THE DEVICE REGISTERS ARE KNOWN TO BE ZERO
#
# MOV #176704,R0 -- note how used
# MOV #177000,-(R0) -- word count - read 1K though boot really 512
# MOV #071,-(R0) -- go!
program_insts = (
0o012700, # MOV #0176704,R0
0o176704,
0o012740, # MOV #177000,-(R0)
0o177000,
0o012740, # MOV #071, -(R0)
0o000071,
0o0, # HALT
)
for o, w in enumerate(program_insts):
p.physRW(addr + o + o, w)
return addr
if __name__ == "__main__":
import time
from machine import PDP1170
p = PDP1170(loglevel='INFO')
pc = boot_hp(p)
print("starting PDP11; telnet/nc to localhost:1170 to connect to console")
print("There will be no prompt; type 'boot' to start boot program")
p.run(pc=pc)
# technically need to confirm the drive is RDY, i.e., the read
# completed, but using a delay is a lot simpler and works fine.
# In real life, humans would have manipulated console switches to
# start execution at location 0, which is also a source of delay. :)
time.sleep(0.05)
p.run(pc=0)