Skip to content

My old project of amputating features of Basilisk II, and re-porting it to SDL, along with fake SCSI

License

Notifications You must be signed in to change notification settings

neozeed/CockatriceIII

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is the fifth public version of Cockatrice (update six?)

This version is compiled with GCC 8.1.0 with the -Os flag, as distributed as:
i686-8.1.0-win32-sjlj-rt_v6-rev0

 **** THERE IS A BUG IN PARSING PREF FILES, PUT AN EMPTY LINE or a HASH as the 
last entry, and everything will be fine!!!!!!!!!!!!!! ****

WHATS NEW?  Well the bigges thing is a SDL sound change from rakslice fixing
audio playback of when MacOS would pick strange formats, and not trying to match
it, but forcing SDL to stick to one format as needed.  Real Audio, Retrun to Zork,
and many more games now work (Including flash player, KHAAAN!!!)

I also added the ability to force the clock behind allowing timebombed installers
to live like it's 1998

Ive tried to iron out a few prefs bugs, so some of the mysterious 
crashing should be over.  Ive also integrated DrMinGW in this Win32
build to dump out some debug logs if there is any issues.  I've also change
the GCC to build -Ofast as the new recommended level for building neutral
fast applications, and include all the debug information.
Because it's compiled in, it won't upset your normal JIT debugger (assuming
you even have one).

In any event, if you are having issues, give me the CPU type, OS, and 
the rpt file, and I can at least have a guess as to why it's crashing.

Enclosed is two executables, the SDL dll that I'm using 
(although there is nothing special about it), and all the DLLs associated
with Dr MinGW.

08/22/2013  05:03 AM           124,520 symsrv.dll
02/20/2014  10:13 AM         1,256,112 dbghelp.dll
11/12/2015  06:49 AM           216,064 mgwhelp.dll
11/12/2015  06:49 AM            23,040 exchndl.dll
12/19/2018  01:49 PM           339,968 SDL.dll
03/24/2010  11:32 AM           224,768 qemu-img.exe
02/10/2016  01:01 AM            35,790 ethlist.exe
10/28/2020  01:46 PM         3,914,844 CockatriceIII.exe

To create a new disk image, I've enclosed the qemu-img program.
Just run it something like this:

qemu-img.exe create -f raw scsi0.disk 2000M

and it'll create a 2,000 MB file suitable for Cockatrice III

To further aid people in getting started I threw in a minimal
System 7 & System 8 install in the archive directory.

10/02/2016  01:09 AM           300,061 blank_2gb.7z
09/02/2016  11:53 PM         1,896,688 min7.7z
09/02/2016  11:59 PM         8,868,401 min8.7z

These will extract out to scsi0.disk, so don't overwrite that unless
you want to.

The previous release of Cockatrice, greatly improved
networking speed and stability.  I can now copy several GB worth of 
data over AppleTalk, while before this was dreadfully slow and unstable.
I've also started to expand the SCSI code to better support the buffer
demands of Basilisk II, so you can now format disks 2GB without it
crashing.  I have also started to add primative CD-ROM support, in addition
to the SCSI disk files.  The SCSI device #6 is hard coded to be a CD-ROM.
There is no 'hot' insertation method, and ignore/lock are ignored for now.
Simply use the following statement in your config file:

scsi6 <diskfilename>

But at this time, ISO-9660 filesystems will not mount.  Only *SOME*
HFS volumes will.  I have also made available on sourceforge a 'util' CD
that contains among other things the disk tool from A/UX that can format
any disk.  You can find it at:

https://sourceforge.net/projects/cockatrice/files/Utils/

I highly recommend using it if you are starting for the first time.  To
force your virtual MAC to boot from the CD use the statements:

disk6 CDUtils.iso
bootdriver -33
bootdisk 6

And this will ensure that the CD-ROM gets boot priority.  I've found that
the Macintosh Quadra 800 ROM is the best for running System 7 and 8.

My BasiliskII_Prefs is as follows:

-------------------------------------------------------------------
#screen win/1152/870
screen win/1000/600
#ether slirp
ether {FFFFFFFF-FFFF-7777-FFFF-FFFFFFFFFFFF}
rom Quadra800.rom
bootdrive 0
bootdriver -33
#ramsize 67108864
ramsize 268435456
frameskip 2
modelid 29
cpu 4
fpu true
nocdrom false
nosound false
nogui false
idlewait false
scsi0 OS7.disk
scsi6 CDUtils.iso
disk xfer.dsk
#disk rtz.disk
yearoffset 7
#
-------------------------------------------------------------------


This way my SCSI disk boots instead of trying to boot from the 
transfer.hfv volume, which is the default behavour.

is the syntax to add a disk into position 0 of the SCSI bus.

Another 'feature' is that for 68040 emulation you can now disable the
numerical coprocessor.  You may find this desierable as it is quite buggy
and things like the scrollbars will function in OS 8.

= Networking
As always, pcap is present, This will allow you to  use native networking.  
Although this is more geared to wired networking.  For wireless, use SLiRP.  
There is no tun/tap networking in this version.

To setup the Windows networking, run the program ethlist to determin the 
network adapters available in your computer.


C:\BasiliskII\mingw>ethlist.exe
Network devices:
  Number       NAME                                     (Description)
  0  {FFFFFFFF-FFFF-7777-FFFF-FFFFFFFFFFFF} (Local Area Connection)

Press Enter to continue...


In this example there is a single interface.  But due to the nature of 
Windows, the index number could easily change, but the GUID is what pcap 
is expecting and for now that is what you have to specifiy in the 
BasiliskII_Prefs file.

In this example you would add the line:

ether {FFFFFFFF-FFFF-7777-FFFF-FFFFFFFFFFFF}

And then you shold be good to go.

When you start Cockatrice, you should then see something similar to this:

C:\BasiliskII\mingw>CockatriceIII.exe
Basilisk II V0.5 by Christian Bauer et al.
Reading ROM file...
Setting up for a 68040, With FPU and 32bit addressing
SCSI Unit 0:scsi0.disk geometry: 50 sectors, 2621440 cylinders, 16 heads
EtherInit with [PCAP]
Pcap version [WinPcap version 4.1.3 (packet.dll version 10, 2, 0, 5002), based on libpcap version 1.0 branch 1_0_rel0b (20091008)]
Ethernet address fe fd 00 00 6e 60
Building packet filter.........!
SDL_Audio inited 16bit, 44100Hz, 2 channels
SDL_Video 600x1000 8bit deep/size 1
Patching a 32-bit clean ROM (version $067c or higher)

On Windows 10 with the newer pcap it will constantly print the following message:

'FATAL Bad Memory Block.'

However as far as I can tell this is 'cosmetic' aka non fatal message from WinPcap.


Linux and OS X users just need to specify the name of their 
ethernet interfaces.  WIFI ADAPTERS WILL NOT WORK!!!  Instead use SLiRP.

You may also need to run this as the root user.  In a future release I'll
try a stab at the user mode support, although I think that is a Windows
only thing.

= SLiRP
To use the SLiRP (ie user mode NAT) you simply use the statement

ether slirp

And if your MacOS uses DHCP it'll figure out the configuration 
on it's own.  Otherwise use the folowing address:

IP			10.0.2.15
NetMask			255.255.255.0
Gateway			10.0.2.2
DNS			10.0.2.3

YOU CANNOT PING ANYTHING ON YOUR NETWORK OR THE INTERNET 
with SLiRP mode.  This is normal, and expected.  If you must ping something 
to ensure the stack is working, ping 10.0.2.2.  It is the only thing that can ping.

I've done my best to make the SLiRP as stable as possible, but it's possible 
that it may fail frm time to time. 

But I've downloaded 150MB files at 450KB/sec without issue.  

Plenty of things are missing from this version, as it is derived from 
BasiliskII version 0.8.  I am striving to make it 100% SDL reliant for 
system calls, but for now the os x/Linux and MinGW are more tied to UNIX, 
while the Visual C++ version is more agnostic.  But for now I'm only 
happy with the GCC/Clang built versions. But the Visual C++ build is making
great progress

I've mostly tested with os 8.0 for internet stuff, and 7.11 for using 
AppleTalk to communicate with Shoebill, and Windows NT AppleTalk servers.


For System 7.1.1 without AppleTalk or OpenTransport I just set the modelid
to 5, and restrict the CPU to 3

Various other ROMs either have booting issues from SCSI, or other errors that
BasiliskII's ROM patches cannot compensate for.

= Y2K and going back in time.
Installers like RealAudio only work in the late 90's they will refuse to work.
I added a config line of:
yearoffset 0

Change it to any number and it'll remove that many billion ticks away from
the offset allowing you to travel back in time.
As of 2020 a 7 sends me back to 1998.  Maybe if there is enough need I can
refine it to setting the year/month/date...

-------
C:\Cockatrice\temp\Cockatrice-v0.0-5>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/Program\ Files\ (x86)/mingw-w64/i686-8.1.0-win32-sjlj-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686-w64-mingw32/8.1.0/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw810/i686-810-win32-sjlj-rt_v6-rev0/mingw32 --enable-shared --enable-static --enable-targets=all --enable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-sjlj-exceptions --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch-32=i686 --with-arch-64=nocona --with-tune-32=generic --with-tune-64=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/i686-w64-mingw32-static --with-pkgversion='i686-win32-sjlj-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/i686-810-win32-sjlj-rt_v6-rev0/mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/i686-810-win32-sjlj-rt_v6-rev0/mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/i686-810-win32-sjlj-rt_v6-rev0/mingw32/opt/include -I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/i686-810-win32-sjlj-rt_v6-rev0/mingw32/opt/lib -L/c/mingw810/prerequisites/i686-zlib-static/lib -L/c/mingw810/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware'
Thread model: win32
gcc version 8.1.0 (i686-win32-sjlj-rev0, Built by MinGW-W64 project)