mirror of
https://github.com/livingcomputermuseum/UniBone.git
synced 2026-05-03 06:29:28 +00:00
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
114 lines
7.1 KiB
Plaintext
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
|