next68k: current issues

Andreas Grabher <[email protected]> Mon, 6 Feb 2023 23:07:32 +0100
Newsgroups gmane.os.netbsd.ports.next68k
Message-ID <[email protected]>
Hello all,

I am the maintainer of Previous (NeXT Computer Emulator). Mr. Engel =
might have already introduced me. We are trying to make NetBSD boot on =
emulated NeXT hardware and have run into some issues. I hope to have =
sorted out the problems that were inside Previous itself. Some issues =
left seem to be inside NetBSD:

1. Turbo VRAM:=20
Obviously NetBSD uses the same addresses for Turbo NeXTcube and =
NeXTstation as for the non-Turbo ones. In fact the Turbos use different =
locations for their VRAM: 0x0C000000 (same for color and monochrome, =
only sizes vary)
If I hack Previous to have the VRAM at that location, NetBSD boots on =
all Turbo systems (color and monochrome).

2. Incomplete SCSI transfer:
The SCSI driver in the boot program (bootloader) seems to be a bit too =
restrictive when it comes to transfer length. I have the problem, that a =
shorter than expected inquiry reply causes the bootloader to fail. =
Inquiry message length varies between manufacturers and short messages =
should not cause an error. I think this could be fixed easily by setting =
next68k/stand/boot/scsi.c, line 446 from #if 1 to #if 0

    if (resid !=3D 0)
    {
#if 1 <=E2=80=94=E2=80=94 CHANGE THIS TO 0
      printf("WARNING: unexpected %d characters remain in DMA\n",resid);
	scsierror("DMA transfer incomplete");
	return -1;
#endif
    }

3. There seems to be an issue with the structure of SCSI disks (might =
also be a usage problem by me):
I do these steps:

A: disklabel -i /dev/sd0c
> a
> 4.2BSD
> [0c, 0s 0M]
> $
> W
> y
> Q

B: installboot -v /dev/rsd0c /usr/mdec/boot
C: newfs /dev/rsd0a

This leads to a disk that can be mounted and I can write and read files. =
But that disk can=E2=80=99t be used for booting, because the bootloader =
is overwritten by newfs. If I swap steps B and C I get a disk with =
broken filesystem, but the bootloader does work. Obviously installboot =
and newfs write to the same location and overwrite each others results.

On a valid disk with 512 byte blocks it should be (all numbers are in =
512-byte-blocks):
Label: Block 0, 15, 30, 45 (4 copies)
Bootloader: Block 64, 192 (2 copies)
Front porch: 320 Blocks


I think issues 1 and 2 need to be fixed in NetBSD while issue 3 might =
just be a usage issue, but I=E2=80=99m not sure.

Best wishes,
Andreas