{"id":2073,"date":"2017-06-10T23:20:44","date_gmt":"2017-06-10T23:20:44","guid":{"rendered":"http:\/\/avitech.com.au\/?page_id=2073"},"modified":"2017-06-11T11:52:22","modified_gmt":"2017-06-11T11:52:22","slug":"pdp-11-rx02-bootstrap","status":"publish","type":"page","link":"https:\/\/avitech.com.au\/?page_id=2073","title":{"rendered":"PDP-11 RX02 Bootstraps"},"content":{"rendered":"<p>This page sets out the source code for a few RX02 bootstraps, as well as some comments about them.<\/p>\n<h4>Brief summary<\/h4>\n<p>These are the key things that I&#8217;ve learned about RX02 bootloaders:<\/p>\n<ul>\n<li>The UNIBUS RX02 controller is the RX211 (M8256).<\/li>\n<li>The QBUS RX02 controller is the RXV21 (M8029).<\/li>\n<li>The bootstrap for the RX211 (UNIBUS) and RXV21 (QBUS) are identical.<\/li>\n<li>The boot sectors (to be loaded by the bootstrap) are always on Track 1 (not Track 0) of the disk.<\/li>\n<li>Both single-density and double-density disks each have 26 sectors per track. Those sectors are numbered 1 through 26. Physical and logical sector numbering is identical (ie &#8211; the sector numbers as recorded in the ID fields run sequentially, there is no physical interleave of sectors).<\/li>\n<li>Single-density disks have 128-byte sectors. Double-density disks have 256-byte sectors.<\/li>\n<li>The boot sectors are odd-numbered sectors, commencing at Sector 1. This is true for both single-density and double-density boot disks. Perhaps this is done for interleave reasons (to avoid waiting for the disk to complete a full revolution when the bootstrap is ready to request the next sector). The even-numbered sectors are not loaded by the bootstrap.<\/li>\n<li>DEC&#8217;s RX01\/RX02 Pocket Service Guide<\/a> (DEC Order Number EK-RX012-PS-002) has a bootstrap at Table 1-10 that works perfectly well for booting a double-density disk on Unit 0. I&#8217;ll call this the <strong>PSG DY Bootstrap<\/strong>.<\/li>\n<li>An RX02 can boot single-density or double-density disks. However, in each case the boot sectors must include the boot block for a DY (RX02) device.<\/li>\n<li>RX02 bootstraps are density-specific. A double-density bootstrap won&#8217;t boot a single-density RX02 disk, and vice versa.<\/li>\n<li>An RX01 disk (which is always single-density) won&#8217;t boot on an RX02 drive, because the boot sectors will contain a DX (RX01) boot block.<\/li>\n<li>The PSG DY Bootstrap doesn&#8217;t include any instructions for modifying it to boot from Unit 1, or to boot single-density RX02 disks.  Both modifications are possible, and are shown below on this page.<\/li>\n<li>DEC&#8217;s PDP-11 Microcomputer Interfaces Handbook 1983-84 (DEC Order Number EB-23144-18) includes at Page 484 both single-density and double-density bootstraps for the RXV21. I will call these the <strong>Handbook SDEN RX02 Bootstrap<\/strong> and the <strong>Handbook DDEN RX02 Bootstrap<\/strong>. There are two significant problems with these bootstraps. Firstly, the double-density bootstrap has 6 errors and deficiencies in it. The corrections are described below on this page. Secondly, both bootstraps only load 512 bytes, and this is insufficient for RT-11 V5.3. This problem is also described further below.<\/li>\n<li>Once the bootstrap has loaded the boot sectors into RAM, the bootstrap then jumps to Address O&#8217;000000. This is usually done by way of a CLR PC instruction (O&#8217;005007).\n<li>Register R0 must be updated by the bootstrap before jumping to Address O&#8217;000000. R0 must be O&#8217;000000 if the boot drive was Unit 0, or O&#8217;000001 if the boot drive was Unit 1. RT-11 V5.3 will otherwise fail to boot.<\/li>\n<\/ul>\n<h4>The RX01\/RX02 Pocket Service Guide DY Bootstrap<\/h4>\n<p><a href=\"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?ssl=1\" target=\"_blank\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2092\" data-permalink=\"https:\/\/avitech.com.au\/?attachment_id=2092\" data-orig-file=\"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?fit=600%2C771&amp;ssl=1\" data-orig-size=\"600,771\" data-comments-opened=\"1\" data-image-title=\"dy-loader-from-pocket-service-guide\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?fit=600%2C771&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?resize=233%2C300&#038;ssl=1\" alt=\"\" width=\"233\" height=\"300\" class=\"alignright size-medium wp-image-2092\" srcset=\"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?resize=233%2C300&amp;ssl=1 233w, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?resize=117%2C150&amp;ssl=1 117w, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?resize=300%2C386&amp;ssl=1 300w, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/06\/dy-loader-from-pocket-service-guide.jpg?w=600&amp;ssl=1 600w\" sizes=\"auto, (max-width: 233px) 100vw, 233px\" \/><\/a><\/p>\n<p>The PSG DY Bootstrap appears at Table 1-10 of the RX01\/RX02 Pocket Service Guide (DEC Order Number EK-RX012-PS-002). A thumbnail image of that table is shown here on the right. Click on it for a full-size version.<\/p>\n<p>The PSG DY Bootstrap has the following main features:<\/p>\n<ul>\n<li>It only works with double-density RX02 disks<\/li>\n<li>It resides in memory commencing at O&#8217;002000<\/li>\n<li>The start address is O&#8217;002000<\/li>\n<li>It loads 1024 bytes into RAM commencing at O&#8217;000000 and ending at O&#8217;001777<\/li>\n<li>Those 1024 bytes are sequentially Sectors 1, 3, 5 and 7 of Track 1<\/li>\n<li>It then clears register R0 and jumps to O&#8217;000000 (by doing a CLR PC)<\/li>\n<\/ul>\n<p>I have re-created the source code for the PSG DY Bootstrap.<\/p>\n<p>Here it is:<\/p>\n<pre>\r\n 1                                         .TITLE PSG BOOTSTRAP FOR RX211\/RXV21\r\n 2\r\n 3                                         ; THIS IS THE RX211\/RXV21 BOOTSTRAP THAT APPEARS IN\r\n 4                                         ; THE RX01\/RX02 POCKET SERVICE GUIDE (DEC ORDER NUMBER\r\n 5                                         ; EK-RX012-PS-002). IT BOOTS ONLY DOUBLE-DENSITY\r\n 6                                         ; DISKS.\r\n 7                                         ;\r\n 8                                         ; MALCOLM MACLEOD - 11 JUNE 2017\r\n 9\r\n10 000000                                  .ASECT\r\n11         002000                          .=002000\r\n12\r\n13         177170                  RX2CS   = 177170            ; RXV21 CONTROL\/STATUS REGISTER\r\n14         177172                  RX2DB   = 177172            ; RXV21 DATA BUFFER REGISTER\r\n15         000200                  WRDCNT  = ^D128             ; 128 FOR DBL-DEN, 64 FOR SGL-DEN\r\n16         100240                  MASK    = 100240            ; BIT 15=ERR, 7=XFER-RQST, 5=DONE\r\n17\r\n18 002000  012701  177170                  MOV     #RX2CS,R1   ; PUT ADDR OF RX2CS INTO R1\r\n19 002004  012700  100240                  MOV     #MASK,R0    ; PUT BIT MASK INTO R0\r\n20 002010  005002                          CLR     R2          ; CLEAR BUS ADDR (DMA DEST'N ADDR)\r\n21 002012  012705  000200                  MOV     #WRDCNT,R5  ; PUT WORD COUNT (128) INTO R5\r\n22 002016  012704  000401                  MOV     #401,R4     ; TRACK 1, SECTOR 1\r\n23 002022  012703  177172          $1:     MOV     #RX2DB,R3   ; PUT ADDR OF RX2DB IN R3\r\n24\r\n25                                         ; CHECK THAT THE RXV21 IS READY\r\n26\r\n27 002026  030011                  $2:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n28 002030  001776                          BEQ     $2          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n29 002032  100440                          BMI     QUIT        ; HALT IF ERR IS SET\r\n30\r\n31                                         ; INITIATE A READ-SECTOR COMMAND\r\n32\r\n33 002034  012711  000407                  MOV     #407,(R1)   ; DEN=DDEN, UNIT=0, FN=RD-SECTOR, GO\r\n34 002040  030011                  $3:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n35 002042  001776                          BEQ     $3          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n36 002044  100433                          BMI     QUIT        ; HALT IF ERR IS SET\r\n37                                         ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n38 002046  110413                          MOVB    R4,(R3)     ; WRITE SECTOR NUMBER TO RX2DB\r\n39 002050  000304                          SWAB    R4          ; SWAP TRACK NUMBER TO BITS 0-7\r\n40 002052  030011                  $4:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n41 002054  001776                          BEQ     $4          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n42                                         ; CODE ASSUMES THAT XFER-RQST (NOT ERR OR DONE) IS NOW SET\r\n43 002056  110413                          MOVB    R4,(R3)     ; WRITE TRACK NUMBER TO RX2DB\r\n44\r\n45                                         ; RXV21 IS NOW READING SECTOR DATA INTO ITS OWN BUFFER\r\n46\r\n47 002060  000304                          SWAB    R4          ; SWAP TRACK NUMBER TO BITS 15-8\r\n48 002062  030011                  $5:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n49 002064  001776                          BEQ     $5          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n50 002066  100422                          BMI     QUIT        ; HALT IF ERR IS SET\r\n51\r\n52                                         ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n53\r\n54                                         ; THE SECTOR DATA IS NOW IN RXV21'S DATA BUFFER.\r\n55                                         ; PREPARE TO TRANSFER SECTOR DATA FROM RXV21 TO RAM BY DMA\r\n56\r\n57 002070  012711  000403                  MOV     #403,(R1)   ; DEN=DDEN, UNIT=ANY, FN=EMPTY-BUF, GO\r\n58 002074  030011                  $6:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n59 002076  001776                          BEQ     $6          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n60 002100  100415                          BMI     QUIT        ; HALT IF ERR IS SET\r\n61                                         ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n62 002102  010513                          MOV     R5,(R3)     ; LD WORD COUNT INTO RX2WC VIA RX2DB\r\n63 002104  030011                  $7:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n64 002106  001776                          BEQ     $7          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n65 002110  100411                          BMI     QUIT        ; HALT IF ERR IS SET\r\n66                                         ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n67 002112  010213                          MOV     R2,(R3)     ; LD BUS ADDRS INTO RX2BA VIA RX2DB\r\n68\r\n69                                         ; DATA (256 BYTES) IS NOW BEING COPIED TO RAM VIA DMA\r\n70\r\n71 002114  060502                          ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n72 002116  060502                          ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n73 002120  122424                          CMPB    (R4)+,(R4)+ ; INCREMENT SECTOR NUMBER BY 2\r\n74 002122  120427  000007                  CMPB    R4,#7       ; SECTORS 1, 3, 5 & 7 WILL BE READ\r\n75 002126  003737                          BLE     $2          ; LOOP BACK AND DO NEXT SECTOR\r\n76 002130  005000                          CLR     R0          ; BOOT DOESN'T WORK WITHOUT THIS\r\n77 002132  005007                          CLR     PC          ; GO TO ADDR ZERO\r\n78 002134  000000                  QUIT:   HALT\r\n79\r\n80         000001                          .END\r\n<\/pre>\n<p>You can also download the source code and assembly listing files for the PSG DY Bootstrap here if you need them:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-psg-bootstrap.mac\" target=\"_blank\">dy-psg-bootstrap.mac<\/a><\/p>\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-psg-bootstrap.lst\" target=\"_blank\">dy-psg-bootstrap.lst<\/a><\/p>\n<\/div>\n<h4>Dual-Density RX02 Bootstrap<\/h4>\n<p>I&#8217;ve modified the PSG DY Bootstrap so that:<\/p>\n<ul>\n<li>It can boot from Unit 0 (Drive 0) or Unit 1 (Drive 1)<\/li>\n<li>It can boot either dual-density or single-density disks<\/li>\n<\/ul>\n<p>To modify the PSG DY Bootstrap so that it boots from Unit 1:<\/p>\n<ul>\n<li>Change the word at 002036 from 000407 to 000427.<\/li>\n<li>At the tail end of the listing, delete the CLR R0 instruction and replace it with a MOV #0,R0 instruction. Note this lengthens the bootstrap by one word, and therefore will require some branch instructions to be updated as well, because they use relative address.<\/li>\n<li>In the new MOV #0,R0 instruction, change the word at 002130 from 000000 to 000001.<\/li>\n<li>Update the relative addresses in the various branch instructions (this affects the words at addresses 2032, 2044, 2066, 2100 and 2110).  See the listing below.<\/li>\n<\/ul>\n<p>To modify the PSG DY Bootstrap so that it works with single-density disks:<\/p>\n<ul>\n<li>Change the word at 2014 from 000200 to 00100 (this sets the WRDCNT to 64, for 128-byte sectors).<\/li>\n<li>Change the word at 002036 from 000407 to 000007 (this selects single-density in the read-sector command).<\/li>\n<li>Change the word at 002072 from 000403 to 000003 (this selects single-density in the empty-buffer command).<\/li>\n<li>Change the word at 002124 from 000007 to 000017 (so we read up to and including sector D&#8217;15).<\/li>\n<\/ul>\n<p>The listing below includes self-modifying code (at lines 92 to 100) so that it can attempt to boot a single-density disk, if the initial attempt to boot a dual-density disk fails.<\/p>\n<p>Here is the listing:<\/p>\n<pre>\r\n  1                                        .TITLE DUAL-DENSITY BOOTSTRAP FOR RX02\r\n  2\r\n  3                                        ; THIS BOOTSTRAP IS DERIVED FROM THE RX211\/RXV21\r\n  4                                        ; BOOTSTRAP THAT APPEARS IN THE RX01\/RX02 POCKET SERVICE\r\n  5                                        ; GUIDE (DEC ORDER NUMBER EK-RX012-PS-002).\r\n  6                                        ;\r\n  7                                        ; IT HAS BEEN MODIFIED SO THAT:\r\n  8                                        ; * IT CAN BE USED FOR UNIT 0 OR UNIT 1\r\n  9                                        ; * IT WILL FIRST ATTEMPT TO BOOT A DOUBLE-DENSITY DISK.\r\n 10                                        ;   IF THAT FAILS, IT WILL THEN ATTEMPT TO BOOT A\r\n 11                                        ;   SINGLE-DENSITY DISK.\r\n 12                                        ;\r\n 13                                        ; THE CODE SHOWN BELOW IS FOR UNIT 0. TO BOOT FROM UNIT 1:\r\n 14                                        ; * CHANGE THE WORD AT 002036 FROM 000407 TO 000427\r\n 15                                        ; * CHANGE THE WORD AT 002132 FROM 000000 TO 000001\r\n 16                                        ;\r\n 17                                        ; MALCOLM MACLEOD - 11 JUNE 2017\r\n 18\r\n 19 000000                                 .ASECT\r\n 20         002000                         .=002000\r\n 21\r\n 22         177170                 RX2CS   = 177170            ; RXV21 CONTROL\/STATUS REGISTER\r\n 23         177172                 RX2DB   = 177172            ; RXV21 DATA BUFFER REGISTER\r\n 24         000200                 WRDCNT  = ^D128             ; 128 FOR DBL-DEN, 64 FOR SGL-DEN\r\n 25         100240                 MASK    = 100240            ; BIT 15=ERR, 7=XFER-RQST, 5=DONE\r\n 26\r\n 27 002000  012701  177170         START:  MOV     #RX2CS,R1   ; PUT ADDR OF RX2CS INTO R1\r\n 28 002004  012700  100240                 MOV     #MASK,R0    ; PUT BIT MASK INTO R0\r\n 29 002010  005002                         CLR     R2          ; CLEAR BUS ADDR (DMA DEST'N ADDR)\r\n 30 002012  012705  000200                 MOV     #WRDCNT,R5  ; PUT WORD COUNT (128) INTO R5\r\n 31 002016  012704  000401                 MOV     #401,R4     ; TRACK 1, SECTOR 1\r\n 32 002022  012703  177172         $1:     MOV     #RX2DB,R3   ; PUT ADDR OF RX2DB IN R3\r\n 33\r\n 34                                        ; CHECK THAT THE RXV21 IS READY\r\n 35\r\n 36 002026  030011                 $2:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 37 002030  001776                         BEQ     $2          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 38 002032  100441                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 39\r\n 40                                        ; INITIATE A READ-SECTOR COMMAND\r\n 41\r\n 42 002034  012711  000407                 MOV     #407,(R1)   ; DEN=DDEN, UNIT=0, FN=RD-SECTOR, GO\r\n 43 002040  030011                 $3:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 44 002042  001776                         BEQ     $3          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 45 002044  100434                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 46                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 47 002046  110413                         MOVB    R4,(R3)     ; WRITE SECTOR NUMBER TO RX2DB\r\n 48 002050  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 0-7\r\n 49 002052  030011                 $4:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 50 002054  001776                         BEQ     $4          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 51                                        ; CODE ASSUMES THAT XFER-RQST (NOT ERR OR DONE) IS NOW SET\r\n 52 002056  110413                         MOVB    R4,(R3)     ; WRITE TRACK NUMBER TO RX2DB\r\n 53\r\n 54                                        ; RXV21 IS NOW READING SECTOR DATA INTO ITS OWN BUFFER\r\n 55\r\n 56 002060  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 15-8\r\n 57 002062  030011                 $5:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 58 002064  001776                         BEQ     $5          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 59 002066  100423                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 60\r\n 61                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 62\r\n 63                                        ; THE SECTOR DATA IS NOW IN RXV21'S DATA BUFFER.\r\n 64                                        ; PREPARE TO TRANSFER SECTOR DATA FROM RXV21 TO RAM BY DMA\r\n 65\r\n 66 002070  012711  000403                 MOV     #403,(R1)   ; DEN=DDEN, UNIT=ANY, FN=EMPTY-BUF, GO\r\n 67 002074  030011                 $6:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 68 002076  001776                         BEQ     $6          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 69 002100  100416                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 70                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 71 002102  010513                         MOV     R5,(R3)     ; LD WORD COUNT INTO RX2WC VIA RX2DB\r\n 72 002104  030011                 $7:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 73 002106  001776                         BEQ     $7          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 74 002110  100412                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 75                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 76 002112  010213                         MOV     R2,(R3)     ; LD BUS ADDRS INTO RX2BA VIA RX2DB\r\n 77\r\n 78                                        ; DATA (256 BYTES) IS NOW BEING COPIED TO RAM VIA DMA\r\n 79\r\n 80 002114  060502                         ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n 81 002116  060502                         ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n 82 002120  122424                         CMPB    (R4)+,(R4)+ ; INCREMENT SECTOR NUMBER BY 2\r\n 83 002122  120427  000007                 CMPB    R4,#7       ; SECTORS 1, 3, 5 & 7 WILL BE READ\r\n 84 002126  003737                         BLE     $2          ; LOOP BACK AND DO NEXT SECTOR\r\n 85 002130  012700  000000                 MOV     #0,R0       ; BOOT DEVICE IS UNIT 0\r\n 86 002134  005007                         CLR     PC          ; GO TO ADDR ZERO\r\n 87\r\n 88                                        ; ERRORS ALWAYS BRANCH TO HERE. ON FIRST ERROR (DURING\r\n 89                                        ; DDEN ATTEMPT) WE CHANGE TO SDEN MODE AND TRY AGAIN. ON\r\n 90                                        ; SECOND ERROR, WE HALT.\r\n 91\r\n 92 002136  000005                  QUIT:  RESET               ; RESET ALL I\/O DEVICES\r\n 93 002140  012700  002000                 MOV     #START,R0   ; LOAD R0 WITH START ADDRESS\r\n 94 002144  012701  000400                 MOV     #400,R1     ; SETUP MASK BYTE\r\n 95 002150  006260  000014                 ASR     14(R0)      ; CHANGE WRDCNT TO 64 DECIMAL\r\n 96 002154  040160  000036                 BIC     R1,36(R0)   ; CHANGE READ-SECTOR CMD TO SDEN\r\n 97 002160  040160  000072                 BIC     R1,72(R0)   ; CHANGE EMPTY-BUFFER CMD TO SDEN\r\n 98 002164  012760  000017  000124         MOV     #17,124(R0) ; CHANGE LAST SECTOR TO D'15\r\n 99 002172  005060  000136                 CLR     136(R0)     ; PUT HALT AT QUIT LOCATION\r\n100 002176  000700                         BR      START       ; GO BACK AND TRY SDEN MODE\r\n101\r\n102         000001                         .END\r\n<\/pre>\n<p>You can also download the source code and assembly listing files for my Dual-Density DY Bootstrap here if you need them:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-dual-density-bootstrap.mac\" target=\"_blank\">dy-dual-density-bootstrap.mac<\/a><\/p>\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-dual-density-bootstrap.lst\" target=\"_blank\">dy-dual-density-bootstrap.lst<\/a><\/p>\n<\/div>\n<h4>Microcomputer Interfaces Handbook Double-Density RX02 Bootstrap<\/h4>\n<p>The PDP-11 Microcomputer Interfaces Handbook 1983-84 (DEC Order Number EB-23144-18) includes at Pages 484-485 separate ODT Bootstraps for double-density and single-density RX02 disks.<\/p>\n<p>A copy of Pages 484-485 is <a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-bootloader-from-dec-microcomputer-interfaces-handbook.pdf\" target=\"_blank\">available here<\/a>.<\/p>\n<p>Whoever typed up the Handbook DDEN RX02 Bootstrap must have been having a very bad day.  It contains the following 6 errors and deficiencies:<\/p>\n<ul>\n<li>The word at 1032 should be 100437 (not 100445)<\/li>\n<li>The word at 1046 should be 110413 (not 100437)<\/li>\n<li>The word at 1062 should be 030011 (not 100431)<\/li>\n<li>The word at 1100 should be 100414 (not 010414)<\/li>\n<li>The word at 1124 should be 000007 (not 000003)<\/li>\n<li>The word at 1136 (120427) should be deleted as it is not used<\/li>\n<\/ul>\n<p>The first 3 errors in the list above result in a BMI (&#8220;branch if minus&#8221;) instruction to an address that is outside the range of the bootstrap (they would each branch to address 001146). The second and third errors also happen to be entirely wrong instructions: both are erroneous BMI instructions (to address 1146) when in fact 1046 should be a &#8220;MOVB R4,(R3)&#8221; instruction and 1062 should be a &#8220;BIT R0,(R1)&#8221; instruction.<\/p>\n<p>The fourth error is a simple typo (a &#8220;0&#8221; was left out after the first digit).<\/p>\n<p>The fifth error is perhaps more a deficiency than an error. The bootstrap only transfers a total of 512 bytes (being Sectors 1 and 3, each of 256 bytes) to RAM. Presumably this was adequate for early versions of RT-11. However, it is not sufficient for RT-11 V5.3, which requires 1024 bytes to be transferred. If you only transfer 512 bytes, RT-11 V5.3 will not boot up on the first attempt after power cycling the PDP-11. Strangely, if you then re-enter and re-run the bootstrap a second or subsequent time, RT-11 V5.3 will run. For this reason, I don&#8217;t recommend using this bootstrap for RT-11 V5.3 unless you relocate it to address O&#8217;002000, and modify the word at 1124 so that all 1024 bytes get loaded. The code below is relocatable, so moving it to O&#8217;002000 doesn&#8217;t change any of the values to be entered via ODT, other than the start address.<\/p>\n<p>The sixth error is simply a redundant word. The word at 1136 (120427) is never executed and is not referenced by any instruction.<\/p>\n<p>Here is the Handbook DDEN RX02 Bootstrap with all 6 errors\/deficiencies corrected. Note that it is now relocated to O&#8217;002000.<\/p>\n<pre>\r\n  1                                        .TITLE DBL-DENSITY BOOTSTRAP FOR RXV21\r\n  2\r\n  3                                        ; THIS IS THE RXV21 DOUBLE-DENSITY BOOTSTRAP THAT APPEARS\r\n  4                                        ; AT PAGE 484 OF THE PDP-11 MICROCOMPUTER INTERFACES\r\n  5                                        ; HANDBOOK 1983-84 (DEC ORDER NUMBER EB-23144-18).\r\n  6                                        ;\r\n  7                                        ; NOTE: THE DEC BOOTSTRAP HAS SIX ERRORS AND DEFICIENCIES\r\n  8                                        ; IN IT (AT ADDR 1032, 1046, 1062, 1100, 1124 and 1136).\r\n  9                                        ; THOSE ERRORS ARE CORRECTED IN THE SOURCE CODE BELOW.\r\n 10                                        ;\r\n 11                                        ; NOTE THAT CORRECTING THE DEFICIENCY AT 1124 (SO THAT\r\n 12                                        ; 1024 BYTES ARE LOADED, RATHER THAN 512) ALSO REQUIRES\r\n 13                                        ; THIS BOOTLOADER TO BE RELOCATED TO ADDRESS 002000.\r\n 14                                        ;\r\n 15                                        ; MALCOLM MACLEOD - 11 JUNE 2017\r\n 16\r\n 17 000000                                 .ASECT\r\n 18         002000                         .=002000\r\n 19\r\n 20         177170                 RX2CS   = 177170            ; RXV21 CONTROL\/STATUS REGISTER\r\n 21         177172                 RX2DB   = 177172            ; RXV21 DATA BUFFER REGISTER\r\n 22         000200                 WRDCNT  = ^D128             ; 128 FOR DBL-DEN, 64 FOR SGL-DEN\r\n 23         100240                 MASK    = 100240            ; BIT 15=ERR, 7=XFER-RQST, 5=DONE\r\n 24         002132                 QUIT    = GO-2              ; DEC HACK: BRANCHES TO A HALT\r\n 25\r\n 26 002000  012700  100240                 MOV     #MASK,R0    ; PUT BIT MASK INTO R0\r\n 27 002004  012701  177170                 MOV     #RX2CS,R1   ; PUT ADDR OF RX2CS INTO R1\r\n 28 002010  005002                         CLR     R2          ; CLEAR BUS ADDR (DMA DEST'N ADDR)\r\n 29 002012  012705  000200                 MOV     #WRDCNT,R5  ; PUT WORD COUNT (128) INTO R5\r\n 30 002016  012704  000401                 MOV     #401,R4     ; TRACK 1, SECTOR 1\r\n 31 002022  012703  177172         $1:     MOV     #RX2DB,R3   ; PUT ADDR OF RX2DB IN R3\r\n 32\r\n 33                                        ; CHECK THAT THE RXV21 IS READY\r\n 34\r\n 35 002026  030011                 $2:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 36 002030  001776                         BEQ     $2          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 37 002032  100437                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 38\r\n 39                                        ; INITIATE A READ-SECTOR COMMAND\r\n 40\r\n 41 002034  012711  000407                 MOV     #407,(R1)   ; DEN=DDEN, UNIT=0, FN=RD-SECTOR, GO\r\n 42 002040  030011                 $3:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 43 002042  001776                         BEQ     $3          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 44 002044  100432                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 45                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 46 002046  110413                         MOVB    R4,(R3)     ; WRITE SECTOR NUMBER TO RX2DB\r\n 47 002050  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 0-7\r\n 48 002052  030011                 $4:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 49 002054  001776                         BEQ     $4          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 50                                        ; CODE ASSUMES THAT XFER-RQST (NOT ERR OR DONE) IS NOW SET\r\n 51 002056  110413                         MOVB    R4,(R3)     ; WRITE TRACK NUMBER TO RX2DB\r\n 52\r\n 53                                        ; RXV21 IS NOW READING SECTOR DATA INTO ITS OWN BUFFER\r\n 54\r\n 55 002060  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 15-8\r\n 56 002062  030011                 $5:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 57 002064  001776                         BEQ     $5          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 58 002066  100421                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 59\r\n 60                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 61\r\n 62                                        ; THE SECTOR DATA IS NOW IN RXV21'S DATA BUFFER.\r\n 63                                        ; PREPARE TO TRANSFER SECTOR DATA FROM RXV21 TO RAM BY DMA\r\n 64\r\n 65 002070  012711  000403                 MOV     #403,(R1)   ; DEN=DDEN, UNIT=ANY, FN=EMPTY-BUF, GO\r\n 66 002074  030011                 $6:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 67 002076  001776                         BEQ     $6          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 68 002100  100414                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 69                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 70 002102  010513                         MOV     R5,(R3)     ; LD WORD COUNT INTO RX2WC VIA RX2DB\r\n 71 002104  030011                 $7:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 72 002106  001776                         BEQ     $7          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 73 002110  100410                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 74                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 75 002112  010213                         MOV     R2,(R3)     ; LD BUS ADDRS INTO RX2BA VIA RX2DB\r\n 76\r\n 77                                        ; DATA (256 BYTES) IS NOW BEING COPIED TO RAM VIA DMA\r\n 78\r\n 79 002114  060502                         ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n 80 002116  060502                         ADD     R5,R2       ; ADD 128 DEC TO BUS ADDRESS\r\n 81 002120  122424                         CMPB    (R4)+,(R4)+ ; INCREMENT SECTOR NUMBER BY 2\r\n 82 002122  120427  000007                 CMPB    R4,#7       ; SECTORS 1, 3, 5 & 7 WILL BE READ\r\n 83 002126  003735                         BLE     $1          ; LOOP BACK AND DO SECTOR NUMBER 3\r\n 84 002130  012700  000000                 MOV     #0,R0       ; PUT UNIT NUMBER OF BOOT DRIVE IN R0\r\n 85 002134  005007                 GO:     CLR     PC          ; GO TO ADDR ZERO\r\n 86\r\n 87         000001                         .END\r\n<\/pre>\n<p>You can also download the source code and assembly listing files for the Handbook DDEN RX02 Bootstrap here if you need them:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-dbl-den-bootstrap.mac\" target=\"_blank\">dy-dbl-den-bootstrap.mac<\/a><\/p>\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-dbl-den-bootstrap.lst\" target=\"_blank\">dy-dbl-den-bootstrap.lst<\/a><\/p>\n<\/div>\n<h4>Microcomputer Interfaces Handbook Single-Density RX02 Bootstrap<\/h4>\n<p>As mentioned earlier, the PDP-11 Microcomputer Interfaces Handbook 1983-84 (DEC Order Number EB-23144-18) also includes at Pages 484-485 an ODT Bootstrap for single-density RX02 disks.<\/p>\n<p>The good news is that this bootstrap has less issues than its double-density counterpart. However, there are still a couple of changes that should be made, if you want to use this bootstrap to load RT-11 V5.3:<\/p>\n<ul>\n<li>The word at 1124 should be 000017 (not 000007)<\/li>\n<li>The word at 1136 (000003) should be deleted as it is not used<\/li>\n<\/ul>\n<p>The first change suggested above relates to the total number of bytes transferred by the bootstrap. The bootstrap only transfers a total of 512 bytes (being Sectors 1, 3, 5 &#038; 7, each of 128 bytes) to RAM. As mentioned earlier, this is not sufficient for RT-11 V5.3, which requires 1024 bytes to be transferred (see comments earlier about the behaviour of RT-11 V5.3 if only 512 bytes are transferred). For this reason, I recommend relocating this bootstrap to address O&#8217;002000, and modifying the word at 1124 so that 1024 bytes (being the 8 odd-numbered sectors from D&#8217;01 to D&#8217;15) get loaded. The code below is relocatable, so moving it to O&#8217;002000 doesn&#8217;t change any of the values to be entered via ODT, other than the start address.<\/p>\n<p>The second change is simply removing a redundant word. The word at 1136 (000003) is never executed and is not referenced by any instruction.<\/p>\n<p>Here is the Handbook SDEN RX02 Bootstrap with both changes made. Note that it is now relocated to O&#8217;002000.<\/p>\n<pre>\r\n  1                                        .TITLE SGL-DENSITY BOOTSTRAP FOR RXV21\r\n  2\r\n  3                                        ; THIS IS THE RXV21 SINGLE-DENSITY BOOTSTRAP THAT APPEARS\r\n  4                                        ; AT PAGE 484 OF THE PDP-11 MICROCOMPUTER INTERFACES\r\n  5                                        ; HANDBOOK 1983-84 (DEC ORDER NUMBER EB-23144-18).\r\n  6                                        ;\r\n  7                                        ; NOTE: THE DEC BOOTSTRAP HAS TWO DEFICIENCIES IN IT\r\n  8                                        ; (AT ADDR 1124 AND 1136). THOSE DEFICIENCIES ARE\r\n  9                                        ; CORRECTED IN THE SOURCE CODE BELOW.\r\n 10                                        ;\r\n 11                                        ; NOTE THAT CORRECTING THE DEFICIENCY AT 1124 (SO THAT\r\n 12                                        ; 1024 BYTES ARE LOADED, RATHER THAN 512) ALSO REQUIRES\r\n 13                                        ; THIS BOOTSTRAP TO BE RELOCATED TO ADDRESS 002000.\r\n 14                                        ;\r\n 15                                        ; MALCOLM MACLEOD - 11 JUNE 2017\r\n 16\r\n 17 000000                                 .ASECT\r\n 18         002000                         .=002000\r\n 19\r\n 20         177170                 RX2CS   = 177170            ; RXV21 CONTROL\/STATUS REGISTER\r\n 21         177172                 RX2DB   = 177172            ; RXV21 DATA BUFFER REGISTER\r\n 22         000100                 WRDCNT  = ^D64              ; 128 FOR DBL-DEN, 64 FOR SGL-DEN\r\n 23         100240                 MASK    = 100240            ; BIT 15=ERR, 7=XFER-RQST, 5=DONE\r\n 24         002132                 QUIT    = GO-2              ; DEC HACK: BRANCHES TO A HALT\r\n 25\r\n 26 002000  012700  100240                 MOV     #MASK,R0    ; PUT BIT MASK INTO R0\r\n 27 002004  012701  177170                 MOV     #RX2CS,R1   ; PUT ADDR OF RX2CS INTO R1\r\n 28 002010  005002                         CLR     R2          ; CLEAR BUS ADDR (DMA DEST'N ADDR)\r\n 29 002012  012705  000100                 MOV     #WRDCNT,R5  ; PUT WORD COUNT (64) INTO R5\r\n 30 002016  012704  000401                 MOV     #401,R4     ; TRACK 1, SECTOR 1\r\n 31 002022  012703  177172         $1:     MOV     #RX2DB,R3   ; PUT ADDR OF RX2DB IN R3\r\n 32\r\n 33                                        ; CHECK THAT THE RXV21 IS READY\r\n 34\r\n 35 002026  030011                 $2:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 36 002030  001776                         BEQ     $2          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 37 002032  100437                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 38\r\n 39                                        ; INITIATE A READ-SECTOR COMMAND\r\n 40\r\n 41 002034  012711  000007                 MOV     #7,(R1)     ; DEN=SDEN, UNIT=0, FN=RD-SECTOR, GO\r\n 42 002040  030011                 $3:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 43 002042  001776                         BEQ     $3          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 44 002044  100432                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 45                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 46 002046  110413                         MOVB    R4,(R3)     ; WRITE SECTOR NUMBER TO RX2DB\r\n 47 002050  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 0-7\r\n 48 002052  030011                 $4:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 49 002054  001776                         BEQ     $4          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 50                                        ; CODE ASSUMES THAT XFER-RQST (NOT ERR OR DONE) IS NOW SET\r\n 51 002056  110413                         MOVB    R4,(R3)     ; WRITE TRACK NUMBER TO RX2DB\r\n 52\r\n 53                                        ; RXV21 IS NOW READING SECTOR DATA INTO ITS OWN BUFFER\r\n 54\r\n 55 002060  000304                         SWAB    R4          ; SWAP TRACK NUMBER TO BITS 15-8\r\n 56 002062  030011                 $5:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 57 002064  001776                         BEQ     $5          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 58 002066  100421                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 59\r\n 60                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 61\r\n 62                                        ; THE SECTOR DATA IS NOW IN RXV21'S DATA BUFFER.\r\n 63                                        ; PREPARE TO TRANSFER SECTOR DATA FROM RXV21 TO RAM BY DMA\r\n 64\r\n 65 002070  012711  000003                 MOV     #3,(R1)     ; DEN=SDEN, UNIT=ANY, FN=EMPTY-BUF, GO\r\n 66 002074  030011                 $6:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 67 002076  001776                         BEQ     $6          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 68 002100  100414                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 69                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 70 002102  010513                         MOV     R5,(R3)     ; LD WORD COUNT INTO RX2WC VIA RX2DB\r\n 71 002104  030011                 $7:     BIT     R0,(R1)     ; APPLY MASK TO RX2CS\r\n 72 002106  001776                         BEQ     $7          ; LOOP UNTIL ERR, XFER-RQST OR DONE\r\n 73 002110  100410                         BMI     QUIT        ; HALT IF ERR IS SET\r\n 74                                        ; CODE ASSUMES THAT XFER-RQST IS NOW SET (IGNORES DONE)\r\n 75 002112  010213                         MOV     R2,(R3)     ; LD BUS ADDRS INTO RX2BA VIA RX2DB\r\n 76\r\n 77                                        ; DATA (128 BYTES) IS NOW BEING COPIED TO RAM VIA DMA\r\n 78\r\n 79 002114  060502                         ADD     R5,R2       ; ADD 64 DEC TO BUS ADDRESS\r\n 80 002116  060502                         ADD     R5,R2       ; ADD 64 DEC TO BUS ADDRESS\r\n 81 002120  122424                         CMPB    (R4)+,(R4)+ ; INCREMENT SECTOR NUMBER BY 2\r\n 82 002122  120427  000017                 CMPB    R4,#17      ; ODD SECTORS D'01-D'15 WILL BE READ\r\n 83 002126  003735                         BLE     $1          ; LOOP BACK AND DO NEXT SECTOR\r\n 84 002130  012700  000000                 MOV     #0,R0       ; PUT UNIT NUMBER OF BOOT DRIVE IN R0\r\n 85 002134  005007                 GO:     CLR     PC          ; GO TO ADDR ZERO\r\n 86\r\n 87         000001                         .END\r\n<\/pre>\n<p>You can also download the source code and assembly listing files for the Handbook SDEN RX02 Bootstrap here if you need them:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-sgl-den-bootstrap.mac\" target=\"_blank\">dy-sgl-den-bootstrap.mac<\/a><\/p>\n<p><a href=\"http:\/\/www.avitech.com.au\/mm-files\/dec-bootstraps\/dy-sgl-den-bootstrap.lst\" target=\"_blank\">dy-sgl-den-bootstrap.lst<\/a><\/p>\n<\/div>\n<h4>General comments<\/h4>\n<p>I&#8217;ve examined the sector data on Track 1 of a single-density RX02 RT-11 V5.3 disk. I did this using ImageDisk. On the single-density disk, it is clear that there is non-zero data in Sectors 1, 3, 5, 7, 9, 15 and 17 (in Sector 13 the data was all zeroes).<\/p>\n<p>The boot menu that is on the M8189 (KDF11-BA) is capable of booting both single-density and double-density RX02 disks. I assume it tries one density first, and if that fails, it then tries the other density. However, I&#8217;ve not examined the code on the M8189 to confirm this.<\/p>\n<p>There are other RX02 bootstraps that I have not examined. For example, there is a <a href=\"http:\/\/www.ak6dn.com\/PDP-11\/M9312\/\" target=\"_blank\">DY bootstrap on the M9312<\/a>.<\/p>\n<h4>My test environment<\/h4>\n<p>All the above bootstraps were tested with the following hardware\/software:<\/p>\n<ul>\n<li>PDP-11\/23 Processor (M8186)<\/li>\n<li>256KB of RAM (A Fourth Generation Systems LS256-1 board)<\/li>\n<li>Camintonn CM-DLV11-J 4-Channel Serial Interface. This is very similar to a DLV11-J (M8043)<\/li>\n<li>Dilog DQ419 RX02-compatible floppy-drive controller<\/li>\n<li>Mitsubishi M2896-63-02U 8-inch floppy drive<\/li>\n<li>RT-11 V5.3 single-density and double-density RX02 boot disks<\/li>\n<\/ul>\n<h4>Useful Resources<\/h4>\n<p>I found these documents useful when producing the source code files shown on this page:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/bitsavers.informatik.uni-stuttgart.de\/pdf\/dec\/disc\/rx02\/EK-RX02-UG-001_UsersGuide_Jul78.pdf\" target=\"_blank\">RX02 Floppy Disk System User&#8217;s Guide<\/a> (Dec Order Number EK-RX02-UG-001): Comprehensive information about programming the RX02 controllers.<\/p>\n<p><a href=\"http:\/\/bitsavers.trailing-edge.com\/www.computer.museum.uq.edu.au\/pdf\/EK-RX012-PS-002%20RX01&#038;RX02%20Pocket%20Service%20Guide.pdf\" target=\"_blank\">DEC&#8217;s RX01\/RX02 Pocket Service Guide<\/a> (DEC Order Number EK-RX012-PS-002). This document includes bootstrap loaders for the RX8\/RX28, RX11\/RXV11 and RX211\/RXV211. It also includes a summary of the registers used on the RX01\/RX02 controllers.<\/p>\n<p><a href=\"http:\/\/www.teach.cs.toronto.edu\/~ajr\/258\/pdp11.pdf\" target=\"_blank\">Alan Rosenthal&#8217;s PDP-11 instruction reference<\/a>: Useful detailed description of the PDP-11 instruction set.<\/p>\n<p><a href=\"http:\/\/bitsavers.informatik.uni-stuttgart.de\/www.computer.museum.uq.edu.au\/RT-11\/AA-5075A-TC%20PDP-11%20MACRO-11%20Language%20Reference%20Manual.pdf\" target=\"_blank\">PDP-11 Macro-11 Language Reference Manual (DEC Order Number AA-5075A-TC)<\/a><\/p>\n<p><a href=\"http:\/\/bitsavers.trailing-edge.com\/www.computer.museum.uq.edu.au\/RT-11\/AA-H853A-TC%20PDP-11%20Keypad%20Editor%20User%27s%20Guide.pdf\" target=\"_blank\">PDP-11 Keypad Editor User&#8217;s Guide<\/a> (DEC Order Number AA-H853A-TC)<\/p>\n<\/div>\n<p>Other useful websites:<\/p>\n<div style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/www.pdp-11.nl\/peripherals\/disk\/rx-info.html\" target=\"_blank\">Henk Gooijen&#8217;s RX01\/RX02 webpage<\/a>: An excellent introduction to the RX01\/RX02 drives and the DEC controllers for them.  Lots of really useful information here.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/PDP-11_architecture#General_register_addressing_modes\" target=\"_blank\">Wikipedia&#8217;s PDP-11 architecture webpage<\/a>: Helpful introduction to the PDP-11 instruction set and architecture.<\/p>\n<p><a href=\"http:\/\/www.diane-neisius.de\/pdp11\/index_E.html\" target=\"_blank\">Diane&#8217;s PDP-11 Page<\/a>: Lots of useful information about setting up a minimal PDP-11 system. Includes information on bootstraps, traps and ODT.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This page sets out the source code for a few RX02 bootstraps, as well as some comments about them. Brief summary These are the key things that I&#8217;ve learned about RX02 bootloaders: The UNIBUS RX02 controller is the RX211 (M8256). The QBUS RX02 controller is the RXV21 (M8029). The bootstrap for the RX211 (UNIBUS) and ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"https:\/\/avitech.com.au\/?page_id=2073\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2073","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P7xTsk-xr","jetpack-related-posts":[{"id":847,"url":"https:\/\/avitech.com.au\/?page_id=847","url_meta":{"origin":2073,"position":0},"title":"Dilog DQ419","author":"malcolm","date":"25-July-2016","format":false,"excerpt":"The Dilog DQ419, when coupled with one or two industry-standard 8-inch floppy drives, provides a PDP-11 QBUS system with an RX02-compatible floppy drive system. By \"industry-standard\" I mean a drive that is compatible with the 50-pin connector used on the Shugart 800\/850 8-inch drives. It is able to format, read\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"dq419-front","src":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/07\/dq419-front-300x176.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":3713,"url":"https:\/\/avitech.com.au\/?page_id=3713","url_meta":{"origin":2073,"position":1},"title":"DEC PDP-11\/23 in BA11-N Chassis","author":"malcolm","date":"29-November-2019","format":false,"excerpt":"Backplane Configuration The table below shows how the H9273-A backplane is currently populated. A B C D M8186 (11\/23 Processor) Empty M8047 (MXV11-A) Empty M8044 (64KB RAM) Empty M8013 (RLV11) M8014 (RLV11) Empty Empty Empty Current configuration This is a basic 11\/23 capable of booting RT-11 V5.3 from a TU58\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=700%2C400 2x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=1050%2C600 3x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2019\/11\/IMG_20191129_220312.jpg?resize=1400%2C800 4x"},"classes":[]},{"id":1008,"url":"https:\/\/avitech.com.au\/?page_id=1008","url_meta":{"origin":2073,"position":2},"title":"DEC RX01 floppy disc drives","author":"malcolm","date":"5-August-2016","format":false,"excerpt":"The RX01 is an 8-inch floppy disc drive device for PDP-8 and PDP-11 computers. It was available in a single-drive or dual-drive configuration. The dual-drive version is shown here. The single-drive version had a blanking plate in place of the right-hand drive. The RX01, or the later RX02, was commonly\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=700%2C400 2x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=1050%2C600 3x, https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2016\/08\/rx01-front-high.jpg?resize=1400%2C800 4x"},"classes":[]},{"id":986,"url":"https:\/\/avitech.com.au\/?page_id=986","url_meta":{"origin":2073,"position":3},"title":"Transferring RX01 discs to SIMH","author":"malcolm","date":"1-August-2016","format":false,"excerpt":"Dave Dunfield's ImageDisk software includes two utilities that are very useful for moving a real RX01 disk to a virtual disk file that can be used with the SIMH PDP-11 simulator. To transfer a real RX01 disc to SIMH, use this process: Put the RX01 disc in an 8-inch floppy\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2722,"url":"https:\/\/avitech.com.au\/?page_id=2722","url_meta":{"origin":2073,"position":4},"title":"GRC TBC QBUS Board","author":"malcolm","date":"15-October-2017","format":false,"excerpt":"The \"GRC TBC\" is a bootstrap and terminator board designed for PDP-11 QBUS systems. The manufacturer is General Robotics Corporation. The TBC provides the following functionality: Termination for QBUS backplane signals On-board EPROMs (for bootstrap or other purposes) Support for front-panel functionality (run status indicator, enable\/halt switch and LTC switch)\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/10\/grc-tbc-pcb-300x174.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2570,"url":"https:\/\/avitech.com.au\/?page_id=2570","url_meta":{"origin":2073,"position":5},"title":"Saturn for RSX-11","author":"malcolm","date":"5-September-2017","format":false,"excerpt":"I found a set of 9 x RX50 disks that appear to be Saturn for RSX. I haven't yet attempted to install Saturn on RSX, so I can't verify whether this set is complete or error free. What I have done is image all 9 disks in an 80-track 5.25\"\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/avitech.com.au\/wp-content\/uploads\/2017\/09\/saturn-rsx-disk1-label-300x99.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/pages\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/avitech.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2073"}],"version-history":[{"count":50,"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/pages\/2073\/revisions"}],"predecessor-version":[{"id":2127,"href":"https:\/\/avitech.com.au\/index.php?rest_route=\/wp\/v2\/pages\/2073\/revisions\/2127"}],"wp:attachment":[{"href":"https:\/\/avitech.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}