sys/arch/amiga tree. This is the machdep part required to get the kernel

up on an A3000. There are still (very) few changes required outside the
arch/amiga tree, so you can't recompile the kernel yet. Support for
third party SCSI controllers for the A2000 is on its way. The kernel is
fully functional (except for a missing ethernet-driver ...). This
tree is based on my version #390.
This commit is contained in:
mw 1993-07-05 19:19:41 +00:00
parent 67365a58d5
commit adfe768529
14 changed files with 1177 additions and 0 deletions

25
sys/arch/amiga/AMIGA-MMU Normal file
View File

@ -0,0 +1,25 @@
The HP300 version uses a kernel which is loaded into the range 0xfffxxx... but
is linked for range 0x000.. This causes the problem that with switching the
MMU to the mapped kernel, the PC becomes invalid. The HP version solves the
problem by mapping 1:1 the last page of physical memory into virtual memory.
On the Amiga, there *is* memory at PA 0x0, so we might as well use it, causes
much less grief and weirdness in locore.s. However, since memory down there
is CHIPMEM, inherently slower than FASTMEM, and badly needed for framebuffer
storage space, we'll copy the kernel over to the first bank of FASTRAM, and
when enabling the MMU, the kernel will execute in FASTRAM, although the PC
stays the same.
This strategy has the big advantage (compared to the solution in Amiga MACH)
that we can link the kernel absolutely to VA 0, for all memory models, since
we'll never execute the kernel in the FASTMEM space while the MMU is turned
off.
This strategy also means, that we don't have to relocate any addresses while
bootstrapping the mmu!!
Initialization of the MMU happens in amiga_init.c. This file is quite a mess,
I have generated it trying to understand what's happening in the hp300 locore.s
file. I think, it should be able to handle MMU initialization much cleaner
now that we don't have to think about relocation until the MMU is enabled.
If you need your daily bit of horror, take a look at amiga_init.c...

26
sys/arch/amiga/BUGS Normal file
View File

@ -0,0 +1,26 @@
Current list as of 93-7-5:
Those I'm aware of:
- nfsd and mountd crash regularly when going to multiuser mode...
- the console seems to have some problems displaying text when parity is
enabled. This shows in a distorted login-prompt (multiuser mode).
- the vt200 emulator is really far from perfect, and needs a lot more work
to be honestly called a vt200 (or vt320 even) emulator.
- the console chops the rightmost character, I guess this is a problem of
the display-window, not of the bitmap drawing itself.
- 8bit characters are all displayed as ^@. Problems could lie in wrong tty
settings or the ite driver.
- although autoconfig information is passed into the kernel and the hardware
table is generated, no I/O-space is currently allocated in kernel VM for
boards. This will probably be one of the first things to fix or nobody is
able to access their boards under BSD ...
- sun-style disklabels are not yet supported.
- disklabels can't be written back to disk. You'll have to configure your
drives under amigados (with hdtoolbox), and just format the partitions
under BSD. I think this is a tolerable limitation.
- there's currently no provision for reading the realtime-clock, so time
is always set using the last modification date of the mounted root
filesystem.
- severe crash after dumping to disk...
to be continued...

121
sys/arch/amiga/INSTALL Normal file
View File

@ -0,0 +1,121 @@
How to install BSD on your Amiga:
--------------------------------
*Please* (re)read the README.amiga file, and make sure your system is
supported by the current kernel.
Since BSD doesn't yet have a floppy driver, and you'll need a root fs
to start using commands (chicken and egg problem..) to make your own
fs, installation of the root fs is a bit hacky...
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
> We copy a binary image (8M) of the root fs directly to the place on <
> your harddisk. This is an extremely dangerous thing to do, since if <
> you get the offsets wrong, you'll destroy data on other partitions of <
> the drive! <
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you don't feel like risking the life of innocent data on your disk,
better stop installing now, and wait until installation gets safer in
the future!!!
Ok.. if you're reading on, start up hdtoolbox, and create some partitions
for use by BSD. You'll have to at least create two partitions:
o a root partition:
Must have FileSystem: Custom File System
Identifier: 0x42534452 (`BSDR')
Reserved begin: 0
end: 0
Use custom boot code: NO (ie. no checkmark)
FS block size: 512
You don't have to check Automount, the partition could only
confuse AmigaDOS.
o a swap partition:
Must have FileSystem: Custom File System
Identifier: 0x42534453 (`BSDS')
Reserved begin: 0
end: 0
Use custom boot code: NO (ie. no checkmark)
FS block size: 512
You don't have to check Automount, the partition could only
confuse AmigaDOS.
You might also add a /usr partition, for example on BSDD:
Must have FileSystem: Custom File System
Identifier: 0x42534444 (`BSDD')
Reserved begin: 0
end: 0
Use custom boot code: NO (ie. no checkmark)
FS block size: 512
You don't have to check Automount, the partition might only
confuse AmigaDOS.
Other settings (like MaxTransfer and Mask) are ignored.
Now, you'll have to find out about the exact block start address and length
in blocks of the BSDR fs (BSD will find out about the data of the other
partitions once it's started up). Go into "Change Drive Type" menu, and
write down the "Blocks per Cylinder" value it shows you for this drive. Then
go into the "Partition Drive" menu, select your BSDR partition, enable
"Advanced Options", and write down the "Start Cyl" and "End Cyl" values.
Doing "Blocks per Cylinder" * "Start Cyl" gives you the block start number
of the BSDR partition, doing "Blocks per Cylinder" * ("End Cyl" - "Start Cyl")
results in the length of the partition in blocks. You'll need these values
to install the root fs onto the drive, so please write them down, and PLEASE
make sure you calculated them right, since if not, you'll scribble anywhere
on the drive, and that just might be.. (insert worst imaginations..).
**************************************************************************
The rootfs has a length of ~8M, 16448 blocks. Your root fs must have at
least (!) the same amount of blocks. You don't have to make it exactly
16448 blocks though, a task that could even be impossible if the number of
blocks per cylinder on your drive is not a divisor of 16448.
**************************************************************************
Now you're almost ready to do the installation. Unzip the distributed rootfs.gz
file (you'll need 8M of free space on your amigados partition for this!), and
then do:
filetodev {START_NUMBER} 16448 rootfs scsi.device {UNIT} 1000
with:
{START_NUMBER}: above calculated block start number
{UNIT}: the scsi unit you're installing on, 0-6
The filetodev program is included in the bffs11.lzh archive, and was written
by Chris Hooper (cdh@mtu.edu).
How to start BSD
----------------
You start BSD with a loader program from AmigaDOS. This loader is called
`loadbsd', and it takes as parameter the kernel file, normally vmunix.
So,
loadbsd vmunix
will (try to...) boot BSD. The kernel as distributed prefers to boot from
SCSI unit 6. It will probably boot from other units as well (can't test
this at the moment, since I don't want to repartition my other drives). If
you run into problems (ie. BSD says it can't mount the root filesystem),
you'll have to recompile the kernel. Please see the RECOMPILE file for
how to do this.
What about /usr ?
-----------------
For the first distribution of the kernel, I decided not to distribute
binaries for the /usr filesystem. Simply, because /usr is huge compared
to root, and a.out headers are likely to change in the future, rendering
a distributed /usr filesystem almost useless.

29
sys/arch/amiga/Makefile Normal file
View File

@ -0,0 +1,29 @@
# @(#)Makefile 7.3 (Berkeley) 6/9/91
COMM= ../net/*.[ch] ../netimp/*.[ch] ../netinet/*.[ch] ../netns/*.[ch] \
../netiso/*.[ch] ../netccitt/*.[ch] \
../kern/*.c ../ufs/*.[ch] ../nfs/*.[ch] ../vm/*.[ch] ../sys/*.h
# Makefile for hp300 tags file
all:
@echo "make tags or links only"
THP300= ../hp300/tags
SHP300= ../hp300/hp300/*.[ch] ../hp300/include/*.h \
../hp300/hpux/*.[ch] ../hp300/dev/*.[ch]
AHP300= ../hp300/hp300/*.s
# Directories in which to place hp300 tags links
DHP300= dev hpux include
tags:
-ctags -dtf ${THP300} ${COMM} ${SHP300}
egrep "^ENTRY(.*)|^ALTENTRY(.*)" ${AHP300} | \
sed "s;\([^:]*\):\([^(]*\)(\([^, )]*\)\(.*\);\3 \1 /^\2(\3\4$$/;" \
>> ${THP300}
sort -o ${THP300} ${THP300}
links:
-for i in ${DHP300}; do \
cd ../$$i && rm -f tags; ln -s ../tags tags; done

203
sys/arch/amiga/README.first Normal file
View File

@ -0,0 +1,203 @@
******************************************************************************
Here's the initial version of NetBSD for the Amiga. This version is strictly
for the kernel hackers among you, there's no sense in `normal' users trying
to install it, possibly killing their other partitions, facing kernel panics and
not knowing what to do. Please keep that in mind, if you feel like going on...
******************************************************************************
Currently supported equipment:
-----------------------------
o any Amiga with either 68020/68851 or 68030, 6888[12] is currently required
(because fpu code is conditionally compilable in the kernel, and this
version contains fpu code).
o A3000 internal SCSI controller. Note that you cannot boot BSD currently
with any other SCSI controller (not to mention weird IDE interfaces..).
o internal RS232 port. This is not by default used as the system console.
you have to recompile if you want the console on the RS232.
o some `sort of' VT200 emulator for the custom chips display, which is
an NTSC laced, 640x400 monochrome display. This is the default console.
o disk and tape drivers using the mentioned A3000 scsi controller.
Disks I tried it on include: Wren7, IBM-OEM 0663E12, Quantum LP105S.
Only tape tested is my Wangtek 5150ES.
Some comments on these:
----------------------
68020&68851/68030 support:
These cpu's should be fully supported. Note that you cannot run
BSD with a '30EC, the MMU is absolutely required. The '40 is
currently *NOT* supported, don't try! The reason for this is
the braindamaged, mind boggingly stupid '40 MMU, which only
implements a very limited subset of the 68851/68030 MMUs. In
particular, it doesn't deal with the current 2-level MMU
setup. See the extra doc about AMIGA-MMU for details.
Exception handling for the '40 is also different to its predecessors,
however this should be easier to implement than revamping
the MMU code to work on the '40.
A3000 internal SCSI controller:
This is a driver tested on an AMD33C93A chip, I just hope I
didn't do anything that won't run on the dreadful WD33C93A-PROTO
still in use in thousands of A3000. It is a *VERY* rough
driver, it's really a hack, and should be replaced by a chip-
specific low-level driver for use with the generic scsi/*
code for the PC. Might even use Mach-drivers as well. The
driver would support DMA, if only DMA would work... That is,
DMA trashed my memory, so I disabled it for a while, and the
driver was degraded to a PIO in the meanwhile.. Hope to get
DMA up again RSN ...
Note that (contrary to Amiga Unix..) this driver should handle
drives ok that send sync-requests (it just rejects those..).
Internal RS232 port:
Well, that's not exactly a terribly complicated thing.. It should
perform reasonably well, but I didn't really test it with file
transfers, just with my old VT100. It should do hardware flow-
control, but that's not tested either. The driver supports being
a console.
Custom chips display, console:
I implemented the console in a two-layer approach stolen from
the hp300 implementation. There is a low-level layer (grf*)
responsible for creating a display (`view' in AmigaOS parlance),
and a hi-level layer (ite*) dealing with display of characters,
scrolling regions, handling keyboard, etc. This approach should
it make trivial to support consoles on custom graphics boards.
Grf currently opens an interlaced NTSC screen, with a resolution
of 1024x1024 pixels, and a visible display size of 640x400. It
provides for smooth scrolling of this display window inside the
larger bitmap (once the ioctl's are implemented..), and it can
handle overscan (by changing the visible display size and moving
the display offset). These ioctl's aren't implemented yet either.
Oh: don't try to convince me to offer a PAL display, I won't.
The console tries to be some sort of VT200 compatible terminal,
however, I only implemented a small subset of features. Essentially,
I took the existing HP-ite driver, a VT320 manual, and started
to replace the control sequences with the ones I found in the
manual. Don't expect the driver to do downloadable fonts or other
weird features, I think even scrolling regions might be broken
at the moment. It should however work reasonably well for most
editing purposes.
Keyboard:
Default keymap is US-ASCII. However, I reasoned quite a bit about
how to do the mapping of keys into characters and character
sequences to easily change the keymap to international layouts.
Dead-keys are supported, as well as having a second set of keys
reachable with the Alt keys (same usage as AmigaOS). Thus, you
should be able to generate an ö (oe) by typing Alt-k o.
However, currently any 8bit characters just appear as ^@ on the
screen, and I don't know whether the tty is responsible for this
misfeature, or whether I have a bug in my alt-key handling...
All keys sending <CSI> sequences send <CSI> as <ESC>[ instead of
\x9b, as under AmigaOS. This should make use with Emacs, Bash, etc.
*much* easier.
For information about how keymaps work, look at dev/kbdmap.h and
dev/kbdmap.c.
Disks:
See the special section on how RDBs map into BSD partitions.
Tapes:
The tape driver seems to support a variety of different tape
drives. Chances are, your tape will work too. Just give it a try,
worst thing that can happen is a kernel panic ;-)
RDB's and how BSD finds its partitions on disk drives
-----------------------------------------------------
BSD partition tables usually look like this:
A: boot partition, ~8M
B: swap partition, twice the (Fast)RAM size you have
C: the entire disk
D: /usr
E, F, G, H: additional partitions
Since Amiga partitions are managed thru a RigidDiskBlock (RDB) stored
in the first cylinder(s) of a drive, I took the following approach to
map Amiga partitions to BSD A-H partitions:
C: still is the entire disk. Take extreme care!!
A: has identifier: BSDR (Root fs)
B: has identifier: BSDS (Swap fs)
DEFGH: have identifiers: BSDD, BSDE, BSDF, BSDG, BSDH.
BSD recognizes at most one partition of each type per drive, but you can
have multiple BSDD partitions on different drives, for example.
There is no restriction on the volume name for those partitions, and
there's no restriction on the order of the partitions on the disk, you can
have BSDD before BSDR, for example.
-> IMPORTANT NOTE: BSD will boot off the last BSDR partition it finds,
ie. if you have a BSDR partition on drives 0 and 6,
it will boot from the one in drive 6 !!
I'm running BSD on my Amiga with BSDR, BSDS, BSDE on drive 6, and a
BSDD on drive 1. BSDD on drive 6 is a backup root filesystem, I can just
change its type to BSDR, change the BSDR type to BSDD (ie. swap them), and
boot off the other partition, without BSD noticing anything.
Using UFS partitions formatted under Amiga Unix System V Release 4
------------------------------------------------------------------
You can use such partitions under NetBSD-Amiga, however, you cannot use
partitions formatted (newfs/mkfs) under NetBSD-Amiga under Amix. Amix
uses the old BSD-4.2 ffs, and doesn't understand the new BSD-4.3 ffs.
Other documents
---------------
The BSD distribution contains a huge doc directory, so if you want to
know everything about XYZ, chances are you'll find a manual for it there.
The other short docs in this distribution cover:
AMIGA-MMU: short description of what's going on when initializing
the system.
BUGS: you might guess what this contains :-)
INSTALL: quick guide on how to install the included dump of the
root filesystem on your harddisk. This is quite risky,
please read the warnings, and only try the installation
if you feel totally confident that you understood the
process!
README.first: this file.
RECOMPILE: short notes about how to change the default configuration
(throw out unneeded drivers, add drivers for other
SCSI units, etc). Recompiling probably requires a lot
of experience in this sort of things (possibly from already
hacking around with the Mach kernel...), I'd imagine
make'ing the kernel requires a lot of unix'ish tools
not commonly found on `normal' amigas, however you
should find most of them in the Mach distribution.
Distribution of NetBSD-Amiga
----------------------------
I'll try to put my updates on ftp.eunet.ch, given that I don't run out
of diskspace there. After integrating the Amiga changes into the official
NetBSD sources, you'll also be able to get the (entire) distribution
from sun-lamp.cs.berkeley.edu, or any of its mirrors. I'm using the
NetBSD-current sources, and am updating my source tree regularly, however I
didn't incorporate the most recent changes before the first release, since
I've worked with this version for some time now, and found it to be
fairly stable (so no loadable kernel modules yet in this release).
There is going to be a mailing-list for NetBSD-Amiga, I'll post the
information to comp.unix.amiga when I know its definite name and location.
You can reach me at mw@eunet.ch, please mention `BSD' in your Subject:
line, this makes it easier for me to automatically sort incoming mail
according to topic, thanks!
-Markus Wild

63
sys/arch/amiga/RECOMPILE Normal file
View File

@ -0,0 +1,63 @@
How to recompile (under AmigaDOS)
---------------------------------
You need a fairly complete unix programming environment. You also need
gcc, I don't think any of the commercial compilers could recompile the
kernel. The central configuration directory is sys/arch/amiga/conf. CD
there, and take a look at the file AMIGA. Things you might change in
this file are:
timezone: change to your timezone.
options: comment out modules you don't need, to make the kernel
smaller. Good candidates for exclusion are probably
the ISOFS (CD filesystem), ISO and TPIP (implement OSI
sockets). PCFS is entirely untested, so you might
get rid of it as well.
config: this is a vital line, it tells BSD where to find the
root filesystem and the swap partition. The device
name is composed of `sd', which is the disk driver,
the unit number (6 in the distributed file), and the
partition (A==root).
disk: make sure there's an entry for your SCSI unit, the
kernel as distributed supports drives at units 0, 1 and
6.
tape: if you don't have a tape drive, you can remove those
entries, and save some space in the kernel.
pseudo-device: you can safely remove `sl' and `bpfilter', please don't
remove `ite', or you'll end up without a console...
When you're happy with the config file, you have to run it thru the
config program. config is included in the bin directory of this
distribution, together with the loader. In sys/arch/amiga/conf, do
config AMIGA
After a moment, config reminds you to do a make depend, well, you can't,
there's no mkdep at the moment;-) Just make sure all object files of
previous runs are removed, then `make', and cross fingers. The make
process will need some binaries found in the bin directory of this
distribution, so add bin to your PATH before starting the compilation.
The distributed console bitmap font is *UGLY*. I'd strongly suggest
you CD to sys/arch/amiga/stand/dumpfont, and generate a new font source
file containing the topaz.font of AmigaOS. This looks *much* nicer
than the free Mach font, but since it is part of AmigaOS, it is
owned by Commodore, and may not be redistributed, you'll have to regenerate
it, sorry. Dumpfont will output a new source file to stdout. Redirect
this output to a file, and then copy it to sys/arch/amiga/dev/kernel_font.c.
If you can't get dumpfont working on your system (or if you're
crosscompiling from a non-amiga system), copy the ugly
sys/arch/amiga/dev/kernel_font.c.distrib to sys/arch/amiga/dev/kernel_font.c
instead.
If you run into problems recompiling, configuring, etc. first try to
find a solution yourself. I would prefer to work on BSD than to answer
tons of email, but if you're really stuck, you can reach me at mw@eunet.ch.
-Markus Wild

83
sys/arch/amiga/conf/AMIGA Normal file
View File

@ -0,0 +1,83 @@
machine "amiga"
cpu "A3000"
ident GODZILLA
timezone -1 dst
maxusers 16
# Standard options
#options QUOTA
options INET
options NFS,NFSSERVER,NFSCLIENT
options MFS
options ISOFS
options FIFO
options PCFS,KERNFS
options FDESC
options ISO
options TPIP
options "COMPAT_43"
options "TCP_COMPAT_42"
options "COMPAT_NOMID"
options "HAVE_USL_UFS"
# Options for all HP machines
#options SYSVSHM
#options HPUXCOMPAT
# Options specific to this host.
options DEBUG,DIAGNOSTIC,FPCOPROC
# options PANICBUTTON
options KTRACE
#options "BUFPAGES=900"
options "NKMEMCLUSTERS=256"
options GENERIC
#options PROFTIMER,"PRF_INTERVAL=500"
#options KGDB,"KGDBDEV=15*256+2","KGDBRATE=19200"
#config vmunix root on sd6a swap on sd6b
config vmunix swap generic
# manufacturer 1 is a pseudo and stands for `builtin'
master scsi0 at manufacturer 1 product 1
#master floppy0 at manufacturer 1 product 2
# further builtin devices
device ser0 at manufacturer 1 product 3
#device clock at manufacturer 1 product 4
#device kbd at manufacturer 1 product 5
#device par at manufacturer 1 product 6
#device mouse at manufacturer 1 product 8
disk sd0 at scsi0 slave 0
disk sd1 at scsi0 slave 1
disk sd2 at scsi0 slave 2
disk sd3 at scsi0 slave 3
disk sd4 at scsi0 slave 4
disk sd5 at scsi0 slave 5
disk sd6 at scsi0 slave 6
tape st0 at scsi0 slave 4
tape st1 at scsi0 slave 5
device grf0 at manufacturer 1 product 7
# ethernet board
#device le0 at manufacturer ? product ?
# my dear A2410
#device tiga0 at manufacturer 1030 product 0
pseudo-device sl 4
pseudo-device ppp 4
pseudo-device bpfilter 16
pseudo-device ite 1
pseudo-device pty
pseudo-device loop
pseudo-device ether
pseudo-device vn 10
pseudo-device devpager
pseudo-device swappager
pseudo-device vnodepager

View File

@ -0,0 +1,67 @@
#
# GENERIC HP9000/300
#
machine "hp300"
cpu "HP320"
cpu "HP330"
cpu "HP340"
cpu "HP350"
cpu "HP360"
cpu "HP370"
ident GENERIC
timezone 7 dst
maxusers 8
# Standard 4.4bsd options
options QUOTA
options INET
options MFS,NFS
options "COMPAT_43"
options "COMPAT_42","TCP_COMPAT_42"
# More standard options for the HPs
options MAPMEM,SYSVSHM
options HPUXCOMPAT
# KTRACE: various kernel event traces
options KTRACE
# DIAGNOSTIC: compile in lots of debugging and consistancy checking code.
options DIAGNOSTIC
config vmunix swap generic
master hpib0 at scode7
master hpib1 at scode?
disk rd0 at hpib? slave 0
disk rd1 at hpib? slave ?
disk rd2 at hpib? slave ?
disk rd3 at hpib? slave ?
tape ct0 at hpib? slave ?
tape ct1 at hpib? slave ? flags 1
device ppi0 at hpib0 slave 5
master scsi0 at scode?
master scsi1 at scode?
disk sd0 at scsi? slave ?
disk sd1 at scsi? slave ?
disk sd2 at scsi? slave ?
disk sd3 at scsi? slave ?
device dca0 at scode9 flags 1
device dcm0 at scode? flags 0xe
device dcm1 at scode? flags 0xe
device dcl0 at scode? flags 0
device dcl1 at scode? flags 0
device le0 at scode?
device grf0 at scode?
device grf1 at scode?
pseudo-device ite
pseudo-device pty
pseudo-device loop
pseudo-device ether
pseudo-device clock

View File

@ -0,0 +1,151 @@
# @(#)Makefile.hp300 7.10 (Berkeley) 6/27/91
#
# Makefile for 4.4 BSD
#
# This makefile is constructed from a machine description:
# config machineid
# Most changes should be made in the machine description
# /sys/conf/``machineid''
# after which you should do
# config machineid
# Machine generic makefile changes should be made in
# /sys/conf/Makefile.``machinetype''
# after which config should be rerun for all machines of that type.
#
# N.B.: NO DEPENDENCIES ON FOLLOWING FLAGS ARE VISIBLE TO MAKEFILE
# IF YOU CHANGE THE DEFINITION OF ANY OF THESE RECOMPILE EVERYTHING
#
# -DTRACE compile in kernel tracing hooks
# -DQUOTA compile in file system quotas
# DEBUG is set to -g by config if debugging is requested (config -g).
# PROF is set to -pg by config if profiling is requested (config -p).
AS= gcc:compilers/amiga/2.3.3/as ${DEBUG}
CC= gcc ${DEBUG}
CPP= gcc:compilers/amiga/2.3.3/cpp -traditional
LD= ld.bsd
TOUCH= touch -f -c
GPROF.EX=/usr/src/usr.lib/libc/csu/amiga/gmon.ex
# source tree is located via $S relative to the compilation directory
S= ../../../..
AMIGA= ../..
INCLUDES= -I. -I$S/arch -I$S -I$S/sys
COPTS= ${INCLUDES} ${IDENT} -DKERNEL -Dmc68020 -Damiga -DREFBIT
CFLAGS= -O -mc68020 -m68881 ${COPTS}
# compile rules: rules are named ${TYPE}_${SUFFIX}${CONFIG_DEP}
# where TYPE is NORMAL, DRIVER, or PROFILE}; SUFFIX is the file suffix,
# capitalized (e.g. C for a .c file), and CONFIG_DEP is _C if the file
# is marked as config-dependent.
NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
DRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $<
DRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
PROFILE_C= ${CC} -S -c ${COPTS} $<; \
ex - $*.s < ${GPROF.EX}; \
${AS} -o $@ $*.s; \
rm -f $*.s
NORMAL_S= ${CPP} ${COPTS} $< | ${AS} -o $@
NORMAL_S_C= ${CPP} ${COPTS} ${PARAM} $< | ${AS} -o $@
%OBJS
%CFILES
# load lines for config "xxx" will be emitted as:
# xxx: ${SYSTEM_DEP} swapxxx.o
# ${SYSTEM_LD_HEAD}
# ${SYSTEM_LD} swapxxx.o
# ${SYSTEM_LD_TAIL}
SYSTEM_OBJ= locore.o ${OBJS} param.o ioconf.o
#SYSTEM_DEP= Makefile symbols.sort ${SYSTEM_OBJ}
SYSTEM_DEP= Makefile ${SYSTEM_OBJ}
SYSTEM_LD_HEAD= @echo loading $@; rm -f $@
SYSTEM_LD= @strip=-x; [ X${DEBUG} = X-g ] && strip=-X; \
${LD} $$strip -n -o $@ -e start ${SYSTEM_OBJ} vers.o
#SYSTEM_LD_TAIL= @echo rearranging symbols;\
# symorder symbols.sort $@;\
SYSTEM_LD_TAIL= @size $@; chmod 755 $@; \
[ X${DEBUG} = X-g ] && { \
echo cp $@ $@.gdb; rm -f $@.gdb; cp $@ $@.gdb; \
echo strip -d $@; strip -d $@; } || true
%LOAD
newvers:
sh $S/conf/newvers.sh
${CC} $(CFLAGS) -c vers.c
clean:
rm -f eddep *vmunix tags *.o locore.i [a-z]*.s \
Errs errs linterrs makelinks
lint: /tmp param.c
@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} -UKGDB \
${AMIGA}/amiga/Locore.c ${CFILES} ${AMIGA}/amiga/swapgeneric.c \
ioconf.c param.c| \
grep -v 'struct/union .* never defined' | \
grep -v 'possible pointer alignment problem'
symbols.sort: ${AMIGA}/amiga/symbols.raw
grep -v '^#' ${AMIGA}/amiga/symbols.raw \
| sed 's/^ //' | sort -u > symbols.sort
locore.o: assym.s ${AMIGA}/amiga/vectors.s ${AMIGA}/amiga/locore.s
locore.o: ${AMIGA}/include/trap.h ${AMIGA}/include/psl.h ${AMIGA}/amiga/pte.h
locore.o: ${AMIGA}/include/cpu.h
${CPP} -DLOCORE ${COPTS} ${AMIGA}/amiga/locore.s | ${AS} -o locore.o
# the following is necessary because autoconf.o depends on #if GENERIC
autoconf.o: Makefile
# the following are necessary because the files depend on the types of
# hp cpu's included in the system configuration
clock.o machdep.o autoconf.o conf.o: Makefile
# depend on network configuration
af.o uipc_proto.o locore.o: Makefile
# depend on maxusers
assym.s: Makefile
assym.s: genassym
./genassym >assym.s
genassym:
${CC} ${INCLUDES} ${IDENT} ${PARAM} -Dmc68020 -Damiga -o genassym \
${AMIGA}/amiga/genassym.c
depend: assym.s param.c
mkdep ${COPTS} ${CFILES} ioconf.c param.c
mkdep -a -p ${INCLUDES} ${IDENT} ${PARAM} ${AMIGA}/amiga/genassym.c
links:
egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
sort -u | comm -23 - dontlink | \
sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
sh makelinks && rm -f dontlink
tags:
@echo "see $S/kern/Makefile for tags"
ioconf.o: ioconf.c
${CC} -c ${CFLAGS} ioconf.c
param.c: $S/conf/param.c
rm -f param.c
cp $S/conf/param.c .
param.o: param.c Makefile
${CC} -c ${CFLAGS} ${PARAM} param.c
%RULES

View File

@ -0,0 +1,4 @@
fd 2
sd 4
cd 5
vn 6

View File

@ -0,0 +1,31 @@
arch/amiga/amiga/amiga_init.c standard
arch/amiga/amiga/autoconf.c standard
arch/amiga/amiga/clock.c standard
arch/amiga/amiga/conf.c standard
arch/amiga/amiga/cons.c standard
arch/amiga/amiga/disksubr.c standard
arch/amiga/amiga/dkbad.c standard
arch/amiga/amiga/in_cksum.c optional inet
arch/amiga/amiga/machdep.c standard config-dependent
arch/amiga/amiga/mem.c standard
arch/amiga/amiga/ns_cksum.c optional ns
arch/amiga/amiga/oc_cksum.s optional inet
arch/amiga/amiga/pmap.c standard
arch/amiga/amiga/sys_machdep.c standard
arch/amiga/amiga/trap.c standard
arch/amiga/amiga/vm_machdep.c standard
arch/amiga/dev/dma.c optional scsi
arch/amiga/dev/vn.c optional vn
arch/amiga/dev/scsi.c optional scsi device-driver
arch/amiga/dev/sd.c optional sd
arch/amiga/dev/st.c optional st
arch/amiga/dev/ser.c optional ser device-driver
arch/amiga/dev/kbd.c optional ite
arch/amiga/dev/ite.c optional ite
arch/amiga/dev/ite_cc.c optional ite
arch/amiga/dev/ite_tg.c optional ite
arch/amiga/dev/kernel_font.c optional ite
arch/amiga/dev/kbdmap.c optional ite
arch/amiga/dev/grf.c optional grf
arch/amiga/dev/grf_cc.c optional grf
arch/amiga/dev/grf_tg.c optional grf

View File

@ -0,0 +1,57 @@
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)ansi.h 7.1 (Berkeley) 3/9/91
*/
#ifndef _ANSI_H_
#define _ANSI_H_
/*
* Types which are fundamental to the implementation and may appear in
* more than one standard header are defined here. Standard headers
* then use:
* #ifdef _SIZE_T_
* typedef _SIZE_T_ size_t;
* #undef _SIZE_T_
* #endif
*
* Thanks, ANSI!
*/
#define _CLOCK_T_ unsigned long /* clock() */
#define _PTRDIFF_T_ int /* ptr1 - ptr2 */
#define _SIZE_T_ unsigned long /* sizeof() */
#define _TIME_T_ long /* time() */
#define _VA_LIST_ char * /* va_list */
#define _WCHAR_T_ unsigned short /* wchar_t */
#endif /* _ANSI_H_ */

View File

@ -0,0 +1,94 @@
/* This is a *real* hack to dump the topaz80 kernel font. This one is
ways nicer than the ugly Mach font, but we'll have to dump it from a
running system to not run against Commodore copyrights. *NEVER* distribute
the generated font with BSD, always regenerate! */
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <graphics/gfx.h>
#include <graphics/rastport.h>
#include <graphics/text.h>
#include <inline/exec.h>
#include <inline/graphics.h>
#include <stdio.h>
main()
{
unsigned char str[256], *pp;
int i;
struct TextAttr ta = { "topaz.font", 8, FS_NORMAL, FPF_ROMFONT };
struct RastPort rp;
struct BitMap bm = { 256, /* bytes per row */
8, /* rows */
0, /* flags */
1, /* depth */
0, /* pad */
0 }; /* planes */
struct TextFont *tf;
InitRastPort (& rp);
rp.BitMap = &bm;
bm.Planes[0] = pp = AllocRaster (256 * 8, 8);
if (!pp)
{
fprintf (stderr, "Can't allocate raster!\n");
exit (1);
}
bzero (pp, 256 * 8);
tf = OpenFont (& ta);
if (! tf)
{
fprintf (stderr, "can't open topaz font.\n");
exit (1);
}
SetFont (&rp, tf);
/* initialize string to be printed */
for (i = 32; i < 256; i++) str[i - 32] = i;
Move (&rp, 0, 6);
Text (&rp, str, 256 - 32);
{
int bin = open ("bitmap", 1);
if (bin >= 0)
{
write (bin, pp, 256*8);
close (bin);
}
}
/* dump them.. */
printf ("/* generated automatically by dumpfont.c. *DONT* distribute\n");
printf (" this file, it contains information Copyright by Commodore!\n");
printf ("\n");
printf (" This is the (new) topaz80 system font: */\n\n");
printf ("unsigned char kernel_font_width = 8;\n");
printf ("unsigned char kernel_font_height = 8;\n");
printf ("unsigned char kernel_font_lo = 32;\n");
printf ("unsigned char kernel_font_hi = 255;\n\n");
printf ("unsigned char kernel_cursor[] = {\n");
printf (" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };\n\n");
printf ("unsigned char kernel_font[] = {\n");
for (i = 0; i < 256 - 32; i++)
{
printf ("/* %c */ ", i + 32);
printf ("0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x,\n",
pp[i+0*256], pp[i+1*256], pp[i+2*256], pp[i+3*256],
pp[i+4*256], pp[i+5*256], pp[i+6*256], pp[i+7*256]);
}
printf ("};\n");
CloseFont (tf);
FreeRaster (pp, 256 * 8, 8);
}

View File

@ -0,0 +1,223 @@
#include <sys/types.h>
#include <a.out.h>
#include <stdio.h>
#include <exec/types.h>
#include <exec/execbase.h>
#include <exec/memory.h>
#include <libraries/configregs.h>
#include <libraries/expansionbase.h>
#include <inline/exec.h>
#include <inline/expansion.h>
struct ExpansionBase *ExpansionBase;
#undef __LDPGSZ
#define __LDPGSZ 8192
void get_mem_config (void **fastmem_start, u_long *fastmem_size, u_long *chipmem_size);
int
main (int argc, char *argv[])
{
struct exec e;
int fd;
if (argc >= 2)
{
if ((fd = open (argv[1], 0)) >= 0)
{
if (read (fd, &e, sizeof (e)) == sizeof (e))
{
if (e.a_magic == NMAGIC)
{
u_char *kernel;
int text_size;
struct ConfigDev *cd;
int num_cd;
ExpansionBase= (struct ExpansionBase *) OpenLibrary ("expansion.library", 0);
if (! ExpansionBase) /* not supposed to fail... */
abort();
for (cd = 0, num_cd = 0; cd = FindConfigDev (cd, -1, -1); num_cd++) ;
text_size = (e.a_text + __LDPGSZ - 1) & (-__LDPGSZ);
kernel = (u_char *) malloc (text_size + e.a_data + e.a_bss
+ num_cd*sizeof(*cd) + 4);
if (kernel)
{
if (read (fd, kernel, e.a_text) == e.a_text
&& read (fd, kernel + text_size, e.a_data) == e.a_data)
{
int *knum_cd;
struct ConfigDev *kcd;
void *fastmem_start;
u_long fastmem_size, chipmem_size;
get_mem_config (&fastmem_start, &fastmem_size, &chipmem_size);
if (argc == 3 && !strcmp (argv[2], "-k"))
{
fastmem_start += 4*1024*1024;
fastmem_size -= 4*1024*1024;
}
printf ("Using %dM FASTMEM at 0x%x, %dM CHIPMEM\n",
fastmem_size>>20, fastmem_start, chipmem_size>>20);
/* give them a chance to read the information... */
sleep(2);
bzero (kernel + text_size + e.a_data, e.a_bss);
knum_cd = (int *) (kernel + text_size + e.a_data + e.a_bss);
*knum_cd = num_cd;
if (num_cd)
for (kcd = (struct ConfigDev *) (knum_cd+1);
cd = FindConfigDev (cd, -1, -1);
*kcd++ = *cd) ;
startit (kernel,
text_size + e.a_data + e.a_bss + num_cd*sizeof(*cd) + 4,
e.a_entry, fastmem_start,
fastmem_size, chipmem_size);
}
else
fprintf (stderr, "Executable corrupt!\n");
}
else
fprintf (stderr, "Out of memory! (%d)\n", text_size + e.a_data + e.a_bss
+ num_cd*sizeof(*cd) + 4);
}
else
fprintf (stderr, "Unsupported executable: %o\n", e.a_magic);
}
else
fprintf (stderr, "Can't read header of %s\n", argv[1]);
close (fd);
}
else
perror ("open");
}
else
fprintf (stderr, "%0 some-vmunix\n", argv[0]);
}
void
get_mem_config (void **fastmem_start, u_long *fastmem_size, u_long *chipmem_size)
{
extern struct ExecBase *SysBase;
struct MemHeader *mh, *nmh;
*fastmem_size = 0;
*chipmem_size = 0;
/* walk thru the exec memory list */
Forbid ();
for (mh = (struct MemHeader *) SysBase->MemList.lh_Head;
nmh = (struct MemHeader *) mh->mh_Node.ln_Succ;
mh = nmh)
{
if (mh->mh_Attributes & MEMF_CHIP)
{
/* there should hardly be more than one entry for chip mem, but
handle it the same nevertheless */
if ((u_int)mh->mh_Upper - (u_int)mh->mh_Lower > *chipmem_size)
{
*chipmem_size = (u_int)mh->mh_Upper - (u_int)mh->mh_Lower;
/* round to multiple of 512K */
*chipmem_size = (*chipmem_size + 512*1024 - 1) & -(512*1024);
/* chipmem always starts at 0, so don't remember start
address */
}
}
else
{
if ((u_int)mh->mh_Upper - (u_int)mh->mh_Lower > *fastmem_size)
{
u_int start = (u_int) mh->mh_Lower;
u_int end = (u_int) mh->mh_Upper;
/* some heuristics.. */
start &= -__LDPGSZ;
/* get the mem back stolen by incore kickstart on A3000 with
V36 bootrom. */
if (end == 0x07f80000)
end = 0x08000000;
*fastmem_size = end - start;
*fastmem_start = (void *)start;
}
}
}
Permit();
}
asm ("
.set ABSEXECBASE,4
.text
.globl _startit
_startit:
movel sp,a3
movel 4:w,a6
lea pc@(start_super-.+2),a5
jmp a6@(-0x1e) | supervisor-call
start_super:
movew #0x2700,sr
| the BSD kernel wants values into the following registers:
| a0: fastmem-start
| d0: fastmem-size
| d1: chipmem-size
movel a3@(4),a1 | loaded kernel
movel a3@(8),d2 | length of loaded kernel
movel a3@(12),a2 | entry point
movel a3@(16),a0 | fastmem-start
movel a3@(20),d0 | fastmem-size
movel a3@(24),d1 | chipmem-size
subl a4,a4 | target, load to 0
lea pc@(zero-.+2),a3
pmove a3@,tc | Turn off MMU
lea pc@(nullrp-.+2),a3
pmove a3@,crp | Turn off MMU some more
pmove a3@,srp | Really, really, turn off MMU
| Turn off 68030 TT registers
btst #2,(ABSEXECBASE)@(0x129) | AFB_68030,SysBase->AttnFlags
beq nott | Skip TT registers if not 68030
lea pc@(zero-.+2),a3
.word 0xf013,0x0800 | pmove a3@,tt0 (gas only knows about 68851 ops..)
.word 0xf013,0x0c00 | pmove a3@,tt1 (gas only knows about 68851 ops..)
nott:
movew #(1<<9),0xdff096 | disable DMA
L0:
moveb a1@+,a4@+
subl #1,d2
bcc L0
jmp a2@
| A do-nothing MMU root pointer (includes the following long as well)
nullrp: .long 0x7fff0001
zero: .long 0
");