1
0
mirror of https://github.com/livingcomputermuseum/UniBone.git synced 2026-05-03 06:29:28 +00:00
Files
livingcomputermuseum.UniBone/10.02_devices/5_boot/du.lst
Joerg Hoppe db0167afe1 Version 2019-06: many changes
PRU1 code split into multiple images
1. test functions
2. UNIBUS operation

PRU1 bus latch interface
Write byte/bits access not with MACROS (random optimizer influence),
now with *_helper() procedures. Same timing, more determinism, much code saving.
Nono more  ASM code to write PRU0 XFER area.

demo: menu to test UNIBUS signals directly

rework "Arbitration" logic: now 3-fold
Rework of UNIBUs arbtiration: NONE/CLIENT/MASTER
- no Arbitrator (SACK penidng for 11/34 Konsole) (NONE)
- phyiscal PDP_11 CPU is Arbitrator (CLIENT)
- UniBone implements Arbitrator (MASTER)
- Same PRU code loop handles all arbitration types

PRU buslatch timing slower, for some problematic PCBs

 More aggressive bus latch  selftest
 (mixed patterns, running on PRU now)

Refinement of ready-to-run scripts
- Adapted to changed "demo" menu
- new name scheme
<OS>_<boot- drive>_<PDP-11CPU>
indicates
- which OS is run
- which disk emulation is used and what is the boot device
- what is the (minimum) PDP-11 to run that

Merged in Joshs DMA timing for 11/84
UNIBUS master cycles waits 350 us before MSYN, instead 150.

Merged in Joshs DMA request queue
multiple devices canrequest INTR and DMAs concurrently, will be put on the bus sequentially

Merged in Joshs MSCP driver
- Build RT-11v5.5 for MSCP
- added boot loader "du.lst"

MSCP run scrips
2.11BSD on MSCP on PDP-11/44
RT11 on MSCP

Fix: image file sizing
Disk image file exptend automatically if block beyond current file end is written
2019-06-14 16:31:01 +02:00

114 lines
7.1 KiB
Plaintext

1 .title M9312 'DU' BOOT prom for MSCP compatible controller
2
3 ; This source code is a mdified copy of the DEC M9312 23-767A9 boot PROM.
4 ;
5 ; This boot PROM is for any MSCP compatible controller (DEC UDA50, EMULEX UC17/UC18).
6 ;
7 ; Multiple units and/or CSR addresses are supported via different entry points.
8
9 ;
10 ; Revision history:
11 ; May 2017: Joerg Hoppe
12 ;
13 ; 198?: DEC
14 ; Original ROM 23-767A9 for M9312.
15 ;
16
17
18
19 172150 mscsr =172150 ; std MSCP csrbase
20
21 000000 msip =+0 ; IP register
22 000002 mssa =+2 ; SA register
23
24 .asect
25 010000 .=10000 ; arbitrary position > 3000
26
27 ; --------------------------------------------------
28 001004 rpkt =1004 ; rpkt structure
29 001070 cpkt =1070 ; cpkt structure
30 001200 comm =1200 ; comm structure
31 ;comm =2404 ; comm structure (at 'blt .+12')
32
33 ; register usage:
34 ; r0: unit number 0..3
35 ; r1: MSCP csrbase
36 ; r2: moving buffer pointer
37 ; r3: moving buffer pointer
38 ; r5: init mask
39
40 ; 4 unit numbers => 4 entry addresses
41 start0:
42 010000 012700 000000 mov #0,r0
43 010004 000413 br duNr
44 010006 000240 nop
45 start1:
46 010010 012700 000001 mov #1,r0
47 010014 000407 br duNr
48 010016 000240 nop
49 start2:
50 010020 012700 000002 mov #2,r0
51 010024 000403 br duNr
52 010026 000240 nop
53 start3:
54 010030 012700 000003 mov #3,r0
55
56 ; retry entry
57 010034 012701 172150 duNr: mov #mscsr,r1 ; boot std csr, unit <R0>
58
59 010040 010021 go: mov r0,(r1)+ ; init controller (write IP), bump ptr
60 010042 012705 004000 mov #4000,r5 ; S1 state bitmask
61 010046 012703 010166 mov #mscpdt,r3 ; point to data
62
63 ; write 4 init words, with r5 mask from 4000 to 40000
64 010052 005711 3$: tst (r1) ; error bit set ?
65 010054 100767 bmi duNr ; yes, fail back to begin to retry
66 010056 031105 bit (r1),r5 ; step bit set ?
67 010060 001774 beq 3$ ; not yet, wait loop
68 010062 012311 mov (r3)+,(r1) ; yes, send next init data
69 010064 006305 asl r5 ; next mask
70 010066 100371 bpl 3$ ; s4 done? br if not yet
71
72 010070 005002 4$: clr r2 ; set bufptr to 0
73 010072 005022 5$: clr (r2)+ ; clear buffer [0..2403]
74 010074 020227 001200 cmp r2,#comm ; check for end of buffer
75 010100 001374 bne 5$ ; loop if not done
76
77 010102 010237 001064 mov r2,@#cpkt-4 ; set lnt -- R2=2404
78 010106 112337 001100 movb (r3)+,@#cpkt+10 ; set command
79 010112 111337 001105 movb (r3),@#cpkt+15 ; set bytecnt(hi)
80 010116 010037 001074 mov r0,@#cpkt+4 ; set unit
81 010122 012722 001004 mov #rpkt,(r2)+ ; rq desc addr
82 010126 010522 mov r5,(r2)+ ; rq own bit15
83 010130 012722 001070 mov #cpkt,(r2)+ ; cp desc addr
84 010134 010522 mov r5,(r2)+ ; cq own bit15
85 010136 016102 177776 mov -2(r1),r2 ; wake controller (read IP)
86
87 010142 005737 001202 6$: tst @#comm+2 ; rq own controller ?
88 010146 100775 bmi 6$ ; loop if not done
89
90 010150 105737 001016 tstb @#rpkt+12 ; check for error ?
91 010154 001327 bne duNr ; yup, fail back to begin to retry
92
93 010156 105723 tstb (r3)+ ; check end of table ?
94 010160 001743 beq 4$ ; br if not yet
95
96 010162 005041 clr -(r1) ; init controller (write IP)
97 010164 005007 clr pc ; jmp to bootstrap at zero
98
99 ; MSCP init and command data
100 ; pointed to by r3
101 mscpdt:
102 010166 100000 .word 100000 ; S1: 100000 = no int, ring size 1, no vector
103 010170 001200 .word comm ; S2: 002404 = ringbase lo addr
104 010172 000000 .word 000000 ; S3: 000000 = no purge/poll, ringbase hi addr
105 010174 000001 .word 000001 ; S4: 000001 = go bit
106 ;
107 ; MSCP command data
108 ;
109 010176 011 000 .byte 011,000 ; cmd=011(online), bytecnt_hi=000(0)
110 010200 041 002 .byte 041,002 ; cmd=041(read), bytecnt_hi=002(512)
111
112 .end
112