On Sun, Mar 6, 2016 at 5:06 PM, Don North <no...@alum.mit.edu> wrote:
> From the SIMH pdp11 RX driver (pdp11_rx.c) the disk size is computed as > follows, > and the byte offset into the file is computed by CALC_DA(trk,sec) given > the PHYSICAL > track (0..76) and sector (1..26) addresses used in accessing the > controller. > > So the SIMH disk image should be 77*26*128 = 256,256 bytes for an RX01 > format. > RX02 format is same number of tracks and sectors, but has 256 byte sectors. > > So if you image an RX disk using logical operating system 512B blocks > there are > 494 of them (76*26*128/512 = 494) numbered 0..493. Track 0 is skipped in > the > filesystem (block 0 is at track=1 sector=1) for legacy compatibility > reasons (with IBM). > > However, since the SIMH file is in physical track/sector order, if you > read the disk image > using logical device blocks, you have to know how the driver interleaves > logical blocks > onto physical track/sectors, as you must de-interleave to build the SIMH > file. > > Or else you must run a program on the PDP-11 side that reads the RX drive > as physical > tracks and sectors, not using file system access commands. > > It's not pretty, but if you think about it enough it is the only way for > SIMH to simulate the > RX/RY devices and be operating system agnostic. > > Don > > From PDP11/pdp11_rx.c: > > #define RX_NUMTR 77 /* tracks/disk */ > #define RX_NUMSC 26 /* sectors/track */ > #define RX_NUMBY 128 /* bytes/sector */ > #define RX_SIZE (RX_NUMTR * RX_NUMSC * RX_NUMBY) /* bytes/disk */ > > #define CALC_DA(t,s) (((t) * RX_NUMSC) + ((s) - 1)) * RX_NUMBY > http://www.dbit.com/putr/putr.asm has the following: ; ; RX01 interleave routine. ; ; bp logical device rec ; ch cylinder (0-75.) ; cl logical sector (0-25.) ; ; On return: ; ch cylinder (1-76.) ; cl sector (1-26.) ; ; From RT-11 V04 DY.MAC: ; ; ISEC=(ISEC-1)*2 ; IF(ISEC.GE.26) ISEC=ISEC-25 ; ISEC=MOD(ISEC+ITRK*6,26)+1 ; ITRK=ITRK+1 ; (and then some assembly code to implement that) I didn't try anything based on this. I was confused about "ISEC-1". Assuming sectors started at zero, this gave a negative result. Plus, I was wrong about the sector size. Thanks! This seems like enough hints to figure it out. b