changeset 2349:f506d1905781

Added Level 3
author boisy
date Sun, 17 Jan 2010 21:35:51 +0000
parents 8132c03a36cf
children 12d835665f89
files level1/modules/clock.asm level3/Level3.doc level3/ReadMe.l3 level3/coco3/bootfiles/makefile level3/coco3/cmds/defsfile level3/coco3/cmds/makefile level3/coco3/cmds/sfree.asm level3/coco3/defs/Defsfile level3/coco3/defs/makefile level3/coco3/defsfile level3/coco3/makefile level3/coco3/modules/defsfile level3/coco3/modules/end.asm level3/coco3/modules/kernel/defsfile level3/coco3/modules/kernel/makefile level3/coco3/modules/makefile level3/coco3/startup level3/coco3/sys/makefile level3/coco3/sys/motd
diffstat 19 files changed, 1500 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/level1/modules/clock.asm	Sat Jan 16 20:32:16 2010 +0000
+++ b/level1/modules/clock.asm	Sun Jan 17 21:35:51 2010 +0000
@@ -659,22 +659,22 @@
                          
 DelVIRQ  pshs  x,y       
 DelVLup                  
-         ifgt  Level-2   
+         IFEQ  H6309-1   
          ldq              ,y++		move entries up in table
          leay  2,y       
          stq              -8,y
          bne   DelVLup   
          puls  x,y,pc    
-         else            
+         ELSE
          ldx   ,y++       move entries up in table
          stx   -4,y      
          bne   DelVLup   
          puls  x,y       
          leay  -2,y      
          rts             
-         endc            
+         ENDC
                          
-         ifgt  Level-1   
+         IFGT  Level-1   
 *------------------------------------------------------------
 *
 * Handle F$Alarm call
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/Level3.doc	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,208 @@
+The Level III modifications are Copyright 1996 by Alan T. DeKok, all rights
+reserved.
+
+
+Level III
+=========
+
+  It's what everybody's been asking for, so here goes.
+
+  One warning: Level III is VERY dependant on the order of modules in the
+OS9Boot file.  If you do NOT follow the directions below exactly, your
+system will NOT BOOT.  I'm willing to answer questions and perform support,
+but Level III is not for the faint of heart or the OS-9 beginner.
+
+  When you install Level III, you MUST do it on a system using NitrOS-9.
+
+  When you build a Level III OS9Boot, be aware that you WILL NOT be able
+to cobbler a disk once LIII is booted.  You must copy the OS9Boot by hand,
+and use 'ezgen' to update LSN0, or use OS9Gen.
+
+******************************************************************************
+** DO NOT COBBLER DISKS WITH LEVEL III!  IT WILL COBBLER BUT WILL NOT BOOT! **
+******************************************************************************
+
+  Your OS9Boot file MUST be magically formatted as follows.  The reasons for
+this are long and detailed.  I'll just say that if it isn't done this way,
+Level III will NOT work.
+
+****** start of the OS9Boot file.
+NitrOS9     (from the NitrOS9.L3 file.)
+SCF
+            (other SCF modules, i.e. SACIA, Printer, VRN)
+            ( NOT CC3IO or WindInt or VDGInt.  Never!)
+            (up to a limit of 15k of modules)
+_end        <--- specifies the end of SCF information, from the _end.L3 file.
+RBF
+            (other RBF modules, i.e. CC3Disk, Rammer, RamPak, CCHDisk, etc.)
+_end        <--- specifies the end of RBF information
+            (everything else.  Order does not matter here.)
+            (ALL descriptors, Clock, IOMan, OS9p2, Init, CC3IO, Windint,
+              PipeMan, etc.)
+****** End of the OS9Boot file.
+
+  Late tests indicate it is possible to put CC3IO inside the SCF local memory.
+Whether or not it works is dependent on local system configurations.  Either
+way, there's plenty of system memory, and it doesn't appear to make any
+difference to anything.
+
+  Similarly, PipeMan may be put in SCF local memory between SCF and the first
+_end module.  Note that PipeMan may NOT be put in with RBF!
+
+  An 'ident -s' of my Level III OS9Boot file (with comments) looks like this:
+
+    1 $C7 $389B28 . NitrOS9 
+   16 $D1 $E2B0EB . SCF       \
+   12 $E1 $82D6D3 . SACIA     |  SCF and SCF device drivers
+    1 $E1 $329D69 . VRN       |
+   13 $E1 $3389A4 . PRINTER   /
+    1 $C7 $BB7259 . _end 
+   30 $D1 $753C86 . RBF       \
+    4 $E1 $3AB3AA . Rammer    |  RBF and RBF device drivers
+    2 $E1 $BCE29D . RamPak    |
+   11 $E1 $CFAA38 . CC3Disk   /
+    1 $C7 $BB7259 . _end 
+    1 $C1 $BFF958 . OS9p3    everything else
+   67 $C0 $680456 . Init 
+   82 $F1 $7EBD63 . DD       DEVICE DESCRIPTORS GO HERE
+   82 $F1 $93C195 . D0 
+   82 $F1 $F09A9D . D1 
+   82 $F1 $323E4F . D2 
+   82 $F1 $092A49 . MD 
+   82 $F1 $B31A99 . R0 
+  114 $F1 $FD590E . T2 
+   83 $F1 $C9B7C1 . P 
+   19 $C1 $67D5A0 . WindInt    OUTSIDE SCF local memory!
+   20 $E1 $B4F1E2 . CC3IO      perhaps here, perhaps in SCF local memory
+   83 $F1 $17FBEF . Term 
+   83 $F1 $F8D0CB . W 
+   83 $F1 $5EA5AA . W1         WINDOW DESCRIPTORS HERE!
+   83 $F1 $691BAA . W2 
+   83 $F1 $FB498B . W3 
+   83 $F1 $05BFAA . W4 
+   83 $F1 $97ED8B . W5 
+   83 $F1 $E30B59 . W6 
+   83 $F1 $710B78 . W7 
+   83 $F1 $9F0B78 . W8 
+   83 $F1 $0D0B59 . W9 
+   18 $C0 $826A54 . OS9p2     All these modules MUST come after the '_end'
+   12 $C1 $1B5CA4 . IOMan     module, or your system will crash.
+    9 $C1 $402FE2 . Clock 
+    4 $D1 $ED94CC . PipeMan 
+    2 $E1 $ADB22E . Piper 
+   80 $F1 $CC06AF . Pipe 
+    1 $F1 $B2004F . Nil 
+
+
+  OK, now the theory behind the magic.
+
+  When booting OS-9, the startup routine in OS9p1 calls the Boot module to
+load in the OS9Boot file.  OS9p1 then looks for a module named 'NitrOS9
+as the FIRST module of the OS9Boot file.  If it exists, that module is called
+BEFORE verifying the OS9Boot file.
+
+  The NitrOS9 module allocates memory, and moves the SCF modules (up to
+the _end module) into 'SCF local memory', and verifies the modules.  The
+same procedure is followed for RBF modules, and when I get the chance later,
+for PipeMan and SBF modules.
+
+  Extra memory is allocated in 16k chunks, and mapped into address $2000
+to $5FFF of the system map.  An 'smap' will show you that this memory is
+allocated.
+
+  IOMan intercepts EVERY system call, and EVERY request/return system call.
+Any module inside 'local memory' asking for system RAM gets allocated
+RAM from that local memory.  Any module in 'system global memory' asking
+for system RAM gets allocated RAM from the global memory pool.
+
+  The net result of this is that you lose 16k of memory from the bottom
+of the system memory map, but you move about 16k of modules into system local
+memory.  On my setup, I had about 14K free after booting, and now 'smap'
+usually gives me 11k of _global_ memory free.  And I still have 8k of SCF
+memory, and 9k of RBF memory left!
+
+  The ONLY things that take memory out of 'system global memory' are process
+descriptors (.5k each) and path descriptors (.0625K, 64 bytes).  11K is
+room for another 20 processes, each with STDIN, STDOUT, and STDERR going
+to a window.  And 8k of SCF memory is just about enough memory for SCF
+buffers for each of those 20 processes.
+
+  i.e. Level III enables you to have about 25 _different_ processes
+running in different windows, all at the same time!  The only way that this
+is possible on a Level II system is to strip your OS9Boot file down to almost
+nothing.  Level III allows you to keep all of your favorite modules in your
+OS9Boot.
+
+  VDG windows come out of system global memory, too.  That's why I added the
+'largest free block' display to the 'sfree' command, below.  If you have
+less than 6k free in one block, you can't run many old Coco2 games.
+
+  The local 16k memory map is saved and restored across every system call,
+and changed whenever a call to SCF/RBF is done.  Because only IOMan knows
+about the changes, only it (and clock) have to be modified.  All of the
+old file managers and drivers work perfectly.  This includes programs
+like 'winfo' and 'wdir'.
+
+  I got the idea from thinking that it's perfectly possible to boot OS-9
+with NO SCF modules, and likewise with NO RBF modules.  If that's possible,
+why not map SCF and RBF into the same area of memory, and switch between
+them on the fly?  So far, I would say it's taken me the equivalent of 4 weeks
+full-time work, as I ran into HORRIBLE problems.  Level III is sufficiently
+different from Level II that you can't really think the same way about it.
+
+  Anyways, here's an 'sfree' of my current system, with OSTerm running
+in another window, and 3 'shell' windows:
+
+ ----- Level III System Memory ----- System memory:
+37 free pages, largest block 37 pages.
+9K of free RAM.
+
+SCF local memory:
+21 free pages, largest block 21 pages.
+5K of free RAM.
+
+RBF local memory:
+31 free pages, largest block 31 pages.
+7K of free RAM.
+
+----
+  That's 89 pages (22K) of free RAM, and my OS9Boot file is $73E2 bytes long!
+Even with a 4K SACia buffer open, 8 processes, and 4 windows!  I like it...
+
+  Here's an 'smap':
+
+    0 1 2 3 4 5 6 7 8 9 A B C D E F
+ #  = = = = = = = = = = = = = = = =
+ 0  U U U U U U U U U U U U U U U U 
+ 1  U U U U U U U U U U U U U U U U 
+ 2  U U U U U U U U U U U U U U U U 
+ 3  U U U U U U U U U U U U U U U U 
+ 4  U U U U U U U U U U U U U U U U 
+ 5  U U U U U U U U U U U U U U U U 
+ 6  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+ 7  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+ 8  _ _ _ _ _ U U U U U U U U U U U 
+ 9  U U U U U U U U U U U U U U U U 
+ A  U U U U U U U U U U U U U U U U 
+ B  U U U U U U U U U U U U U U U U 
+ C  U U U U U U U U U U U U U U U U 
+ D  U U U U U U U U U U U U U U U U 
+ E  U U U U U U U U U U U U U U U U 
+ F  U U U U U U U U U U U U U U U . 
+
+ Number of Free Pages:  37
+   Ram Free in KBytes:   9
+
+
+---
+  This is enough room to format a disk (greater than 7K), even with many
+processes and OSTerm running!
+
+  I've been running Level III for just under a year, and I've had it in
+beta test on 10+ systems for 8 months.  One system was running a BBS, and
+at one report was up and running for 2 months without a reboot.  I think
+it's stable enough to release to the general public.
+
+  Have fun!
+
+  Alan DeKok.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/ReadMe.l3	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,46 @@
+  My version of Level III!
+
+  The file 'LevelIII.lzh' has a previous (8k block) version, along with
+much documentation as to how to set it up.
+
+  Quick theory:
+
+The system map has 64k available, of which memory can be mapped in and out
+in 8k blocks.
+
+SCF and RBF (and all other file managers) are completely independent.  You
+can boot OS-9 without ANY SCF modules, and likewise without any RBF modules.
+
+Next idea: map SCF and RBF in and out of the system map dynamically, so that
+only one of them is in the map at a time.
+
+The memory map looks like this:
+
+$0000-$1FFF  block 0, system direct page, etc.
+$2000-$3FFF  File Manager Local memory.  Mapped in and out as appropriate.
+$4000-$ECFF  Process/path/device descriptors, Clock, IOMan, etc.
+$ED00-$FEFF  Kernel track: REL Boot OS9p1
+
+  On every system call and IRQ, the 16k block starting at $2000 is mapped
+in or out, and the system DAT image changed also.
+
+  On boot up, the module 'NitrOS-9'  (nitro.a here) sets up the various
+maps, and moves up to 16k of SCF or RBF modules into the FM local memory.
+
+  Once the system is running, IOMan intercepts F$SRqMem and F$SRtMem calls
+from all modules, and allocates FM local memory if the call originates from
+there.  i.e. RBF allocates a drive buffer, and IOMan gives it local memory,
+so a 'smap' would show no change in the number of free pages.
+
+  One problem:  CC3IO and Windint CANNOT be in FM local memory, as they are
+both called via tha D.AltIRQ vector.  Every time I try to put them in local
+memory, the system crashes, despite all precautions I take.  So don't.
+
+  The version of OS9p1 here is Level II OR Level III compliant.
+
+  IOMan is ONLY Level III, and Nitro.a is the Level 3 File Manager setup
+module.  '_end' is a dummy module, just a place-holder.
+
+  I've just discovered that CC3Disk11 will crash on trying to format a floppy
+disk under Level III.  It's probably the memory extensions I made to CC3Disk,
+and I'm checking it out.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/bootfiles/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,119 @@
+include $(NITROS9DIR)/rules.mak
+
+# Module directory
+MD		= ../modules
+# Commands directory
+CD		= ../cmds
+
+DEPENDS		= ./makefile
+
+KERNEL_1773	= $(MD)/rel_80 $(MD)/boot_1773_6ms $(MD)/krn
+KERNEL_1773_50HZ	= $(MD)/rel_80_50hz $(MD)/boot_1773_6ms $(MD)/krn
+KERNEL_DW3	= $(MD)/rel_80 $(MD)/boot_dw3 $(MD)/krn
+
+# NitrOS-9 disk bootfile to allow booting from DriveWire 3 server
+BOOTFILE_DW3	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
+		$(MD)/rbf.mn \
+		$(MD)/rbdw3.dr $(MD)/dw3.sb \
+		$(MD)/ddx0.dd $(MD)/x1.dd $(MD)/x2.dd $(MD)/x3.dd \
+		$(MD)/rb1773.dr $(MD)/d0_40d.dd $(MD)/d1_40d.dd \
+		$(MD)/d2_40d.dd $(MD)/ddd0_40d.dd \
+		$(MD)/scf.mn $(MD)/vtio.dr \
+		$(MD)/keydrv_cc3.sb $(MD)/joydrv_joy.sb $(MD)/snddrv_cc3.sb \
+		$(MD)/cowin.io $(MD)/covdg.io \
+		$(MD)/term_win80.dt \
+		$(MD)/w.dw $(MD)/w1.dw $(MD)/w2.dw $(MD)/w3.dw $(MD)/w4.dw \
+		$(MD)/w5.dw $(MD)/w6.dw $(MD)/w7.dw \
+		$(MD)/scdwp.dr $(MD)/p_scdwp.dd \
+		$(MD)/pipeman.mn $(MD)/piper.dr $(MD)/pipe.dd \
+		$(MD)/clock_60hz $(MD)/clock2_dw3
+
+# NitrOS-9 disk bootfile to allow booting from WD1773 disk controller
+BOOTFILE_40D	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
+		$(MD)/rbf.mn \
+		$(MD)/rb1773.dr $(MD)/d0_40d.dd $(MD)/d1_40d.dd \
+		$(MD)/d2_40d.dd $(MD)/ddd0_40d.dd \
+		$(MD)/scf.mn $(MD)/vtio.dr \
+		$(MD)/keydrv_cc3.sb $(MD)/joydrv_joy.sb $(MD)/snddrv_cc3.sb \
+		$(MD)/cowin.io $(MD)/covdg.io \
+		$(MD)/term_win80.dt \
+		$(MD)/w.dw $(MD)/w1.dw $(MD)/w2.dw $(MD)/w3.dw $(MD)/w4.dw \
+		$(MD)/w5.dw $(MD)/w6.dw $(MD)/w7.dw \
+		$(MD)/pipeman.mn $(MD)/piper.dr $(MD)/pipe.dd \
+		$(MD)/clock_60hz $(MD)/clock2_soft
+
+BOOTFILE_80D	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
+		$(MD)/rbf.mn \
+		$(MD)/rb1773.dr $(MD)/d0_80d.dd $(MD)/d1_40d.dd \
+		$(MD)/d2_40d.dd $(MD)/ddd0_80d.dd \
+		$(MD)/scf.mn $(MD)/vtio.dr \
+		$(MD)/keydrv_cc3.sb $(MD)/joydrv_joy.sb $(MD)/snddrv_cc3.sb \
+		$(MD)/cowin.io $(MD)/covdg.io \
+		$(MD)/term_win80.dt \
+		$(MD)/w.dw $(MD)/w1.dw $(MD)/w2.dw $(MD)/w3.dw $(MD)/w4.dw \
+		$(MD)/w5.dw $(MD)/w6.dw $(MD)/w7.dw \
+		$(MD)/pipeman.mn $(MD)/piper.dr $(MD)/pipe.dd \
+		$(MD)/clock_60hz $(MD)/clock2_soft
+
+BOOTFILE_40D_50HZ	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
+		$(MD)/rbf.mn \
+		$(MD)/rb1773.dr $(MD)/d0_40d.dd $(MD)/d1_40d.dd \
+		$(MD)/d2_40d.dd $(MD)/ddd0_40d.dd \
+		$(MD)/scf.mn $(MD)/vtio.dr \
+		$(MD)/keydrv_cc3.sb $(MD)/joydrv_joy.sb $(MD)/snddrv_cc3.sb \
+		$(MD)/cowin.io $(MD)/covdg.io \
+		$(MD)/term_win80.dt \
+		$(MD)/w.dw $(MD)/w1.dw $(MD)/w2.dw $(MD)/w3.dw $(MD)/w4.dw \
+		$(MD)/w5.dw $(MD)/w6.dw $(MD)/w7.dw \
+		$(MD)/pipeman.mn $(MD)/piper.dr $(MD)/pipe.dd \
+		$(MD)/clock_50hz $(MD)/clock2_soft
+
+BOOTFILE_80D_50HZ	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
+		$(MD)/rbf.mn \
+		$(MD)/rb1773.dr $(MD)/d0_80d.dd $(MD)/d1_40d.dd \
+		$(MD)/d2_40d.dd $(MD)/ddd0_80d.dd \
+		$(MD)/scf.mn $(MD)/vtio.dr \
+		$(MD)/keydrv_cc3.sb $(MD)/joydrv_joy.sb $(MD)/snddrv_cc3.sb \
+		$(MD)/cowin.io $(MD)/covdg.io \
+		$(MD)/term_win80.dt \
+		$(MD)/w.dw $(MD)/w1.dw $(MD)/w2.dw $(MD)/w3.dw $(MD)/w4.dw \
+		$(MD)/w5.dw $(MD)/w6.dw $(MD)/w7.dw \
+		$(MD)/pipeman.mn $(MD)/piper.dr $(MD)/pipe.dd \
+		$(MD)/clock_50hz $(MD)/clock2_soft
+
+BOOTFILES	= bootfile_40d bootfile_40d_50hz bootfile_80d bootfile_80d_50hz bootfile_dw3
+KERNELS		= kernel_1773 kernel_1773_50hz kernel_dw3
+
+ALLOBJS		= $(BOOTFILES) $(KERNELS)
+
+all:	$(ALLOBJS)
+
+# Bootfiles
+bootfile_40d: $(BOOTFILE_40D) $(DEPENDS)
+	$(MERGE) $(BOOTFILE_40D)>$@
+
+bootfile_40d_50hz: $(BOOTFILE_40D_50HZ) $(DEPENDS)
+	$(MERGE) $(BOOTFILE_40D_50HZ)>$@
+
+bootfile_80d: $(BOOTFILE_80D) $(DEPENDS)
+	$(MERGE) $(BOOTFILE_80D)>$@
+
+bootfile_80d_50hz: $(BOOTFILE_80D_50HZ) $(DEPENDS)
+	$(MERGE) $(BOOTFILE_80D_50HZ)>$@
+
+bootfile_dw3: $(BOOTFILE_DW3) $(DEPENDS)
+	$(MERGE) $(BOOTFILE_DW3)>$@
+
+# Kernels
+kernel_1773: $(KERNEL_1773) $(DEPENDS)
+	$(MERGE) $(KERNEL_1773)>$@
+
+kernel_1773_50hz: $(KERNEL_1773_50HZ) $(DEPENDS)
+	$(MERGE) $(KERNEL_1773_50HZ)>$@
+
+kernel_dw3: $(KERNEL_DW3) $(DEPENDS)
+	$(MERGE) $(KERNEL_DW3)>$@
+
+clean:
+	$(RM) $(ALLOBJS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/cmds/defsfile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,2 @@
+          use    ../defsfile
+          use    scfdefs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/cmds/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,68 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+vpath %.asm $(LEVEL3)/cmds:$(LEVEL2)/cmds:$(LEVEL1)/cmds:$(NITROS9DIR)/3rdparty/packages/basic09
+
+DEPENDS		= ./makefile
+AFLAGS		+= -i=$(NITROS9DIR)/3rdparty/packages/basic09
+
+CMDS		= asm attr backup binex build cmp cobbler copy cputype \
+		date dcheck debug ded deiniz del deldir devs dir dirsort disasm \
+		display dmem dmode dsave dump echo edit error exbin \
+		format free grfdrv help ident iniz irqs link list load login \
+		makdir mdir megaread merge mfree mmap modpatch montype mpi os9gen padrom park \
+		pmap proc procs prompt pwd pxd reboot rename save setime \
+		shell_21 sleep smap sfree tee tmode touch tsmon tuneport unlink verify wcreate xmode
+
+CMDS_D2         = basic09 runb gfx2 gfx inkey syscall copy del echo format \
+                merge os9gen prompt tmode
+
+SHELLMODS	= shellplus date deiniz echo iniz link load save unlink
+UTILPAK1	= attr build copy del deldir dir display list makdir mdir \
+		merge mfree procs rename tmode
+
+# Files not compilable by os9asm: config
+all:	$(CMDS) $(CMDS_D2) shell utilpak1 $(DEPENDS)
+
+runb:	runb.asm
+	$(AS) $(AFLAGS) $< $(ASOUT)$@ -aPWD=1
+	$(MERGE) $@ $(SUBS)>$@.tmp
+	$(RM) $@
+	$(MOVE) $@.tmp $@
+
+tmode:	xmode.asm
+	$(AS) $(AFLAGS) $< $(ASOUT)$@ -aTMODE=1
+
+xmode:	xmode.asm
+	$(AS) $(AFLAGS) $< $(ASOUT)$@ -aXMODE=1
+
+pwd:	pd.asm
+	$(AS) $(AFLAGS) $< $(ASOUT)$@ -aPWD=1
+
+pxd:	pd.asm
+	$(AS) $(AFLAGS) $< $(ASOUT)$@ -aPXD=1
+
+shell:  $(SHELLMODS) $(DEPENDS)
+	$(MERGE) $(SHELLMODS)>$@
+	@$(ECHO) "*** Be sure the size of this file is less than 7681 bytes! ***"
+	@ls -l $@
+	@$(ECHO) ""
+
+utilpak1:  $(UTILPAK1) $(DEPENDS)
+	$(MERGE) $(UTILPAK1)>$@
+	@$(ECHO) "*** Be sure the size of this file is less than 7681 bytes! ***"
+	@ls -l $@
+	@$(ECHO) ""
+
+clean:
+	$(RM) shell utilpak1 $(SUBS) $(SHELLMODS) $(CMDS) $(CMDS_D2)
+
+# Only $(CMDS) are shown here
+showobjs:
+	@$(ECHO) shell utilpak1 $(CMDS)
+
+showobjs_d2:
+	@$(ECHO) $(CMDS_D2)
+
+identify:
+	$(IDENT_SHORT) $(ALLOBJS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/cmds/sfree.asm	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,216 @@
+********************************************************************
+* SFree - Show free memory for NitrOS-9 Level 3
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      ????/??/??  Alan DeKok
+* Written from scratch.
+
+         nam   SFree
+         ttl   program module       
+
+
+         ifp1
+         use   defsfile
+         endc
+
+tylg     set   Prgrm+Objct   
+atrv     set   ReEnt+rev
+rev      set   $01
+edition  set   1
+
+         mod   eom,name,tylg,atrv,start,size
+
+Cnt      rmb   1          number of free blocks found
+MaxCnt   rmb   1          size of maximum free block
+
+u000F    rmb   256
+         rmb   200        for the stack
+size     equ   .
+
+name     fcs   /SFree/
+         fcb   edition
+
+L005A    fcb   $00        temporary DAT image
+         fcb   $00 
+
+Global   fcb   C$LF
+         fcc   /----- Level III System Memory -----/
+         fcb   C$LF
+         fcc   /System memory:/
+         fcb   C$CR
+
+SCF      fcb   C$LF
+         fcc   /SCF local memory:/
+         fcb   C$CR
+
+RBF      fcb   C$LF
+         fcc   /RBF local memory:/
+         fcb   C$CR
+
+skip     leax  1,x
+start    lda   ,x
+         cmpa  #C$SPAC
+         beq   skip
+         cmpa  #C$CR      CR? (no parameters)
+         lbne  Help       no, print out help
+
+         leax  >L005A,pcr
+         tfr   x,d
+         ldx   #D.SysMem  ptr to system global memory map
+         ldy   #$0002     2 bytes
+         ldu   #u000F     to a buffer
+         os9   F$CpyMem   copy the memory
+         lbcs  Exit       exit on error
+         ldx   ,u         grab the offset to the buffer
+         leax  $40,x      ignore the first 2 8k blocks
+         ldy   #$00C0     grab the rest of the page
+         os9   F$CpyMem   copy the buffer
+         lbcs  Exit       exit on error
+
+         leax  >Global,pc
+         lbsr  Print
+         lda   #$C0       maximum number of pages to check
+         bsr   Dump
+
+         leax  >L005A,pc
+         tfr   x,d
+         ldx   #$0660     Level III blocks
+         leas  -2,s       reserve 2 bytes on-stack
+         leau  ,s         point to the bytes
+         ldy   #2         copy 2 bytes over
+         OS9   F$CpyMem
+
+         lda   ,s         get SCF block number
+         ora   1,s        and RBF block number
+         beq   Level.2    if none, we're on a Level II system
+
+         clr   ,-s        make a temporary DAT image
+         leax  SCF,pc
+         bsr   Local
+
+         leas  1,s
+         clr   ,s
+         leax  RBF,pc
+         bsr   Local
+
+Level.2  leas  2,s
+
+ClnExit  clrb
+Exit     OS9   F$Exit
+
+Local    lbsr  Print      print out the header
+         leax  2,s
+         tfr   x,d
+         ldu   #u000F
+         ldx   #$0000     from the start of the block
+         ldy   #$0040     64 bytes only
+         OS9   F$CpyMem
+         lda   #$40       64 pages, and fall through to DUMP
+
+Dump     clr   <MaxCnt    no maximum count of free blocks yet
+         clr   <Cnt       total count is zero, too.
+         ldx   #u000F     point to the buffer where the blocks are
+         pshs  a          save number of pages to check
+         clra             we haven't found a free block yet
+
+d.skip   ldb   ,x+        grab a page flag
+         beq   d.loop     this page is free, go check it
+d.skip1  dec   ,s         done one more byte
+         bne   d.skip     if we're not done them all yet, continue
+         bra   d.done     go to the 'done' routine
+
+d.loop   inca             found a maximum series of free page
+         inc   <Cnt       another total free page
+         dec   ,s         count down by one byte
+         beq   d.done     exit if we're done everything
+
+         ldb   ,x+        grab a page flag
+         beq   d.loop     if it's free, increment counters, etc.
+         cmpa  <MaxCnt    is this block larger than the previous free block?
+         bls   d.skip1    if not, exit
+         sta   <MaxCnt    it's larger, so save it.
+         clra             reset the count to zero
+         bra   d.skip1    decrement counters, and find another free block
+
+d.done   leas  1,s        kill counter off of the stack
+         cmpa  <MaxCnt    A=maximum series of free pages
+         bls   d.done1
+         sta   <MaxCnt
+
+d.done1  ldb   <Cnt       get total count of free pages
+         bsr   PNum       print out a decimal number in B
+         leax  MSize,pc
+         ldy   #MLen
+         lda   #$01       STDOUT
+         OS9   I$Write    dump it out
+
+         ldb   <MaxCnt    get maximum size of the free area
+         bsr   PNum       print out the number
+
+         leax  ZSize,pc   to maximum free size message
+         bsr   Print      go print it out
+
+         ldb   <Cnt       get size again
+         lsrb
+         lsrb             get number of K free
+         bsr   PNum       print it out
+         leax  KFree,pc
+         bra   Print
+
+PNum     pshs  a          save a junk byte
+         ldx   #$2F3A     other data
+         pshs  x
+do.100   inc    ,s
+         subb   #100
+         bcc    do.100
+do.10    dec    1,s
+         addb   #10
+         bcc    do.10
+         addb   #$30
+         stb    2,s
+
+         leax  ,s         point to the numbers
+         ldy   #3         number of bytes to print out
+         ldd   ,s
+         cmpa  #'0        leading 0?
+         bne   pn.ok      no, go print
+         leax  1,x        skip this byte
+         leay  -1,y       one less to print
+         cmpb  #'0        another leading 0?
+         bne   pn.ok      no, go print
+         leax  1,x        skip this byte
+         leay  -1,y       one less to print.
+
+pn.ok    lda   #1
+         OS9   I$Write    dump it out
+         puls  a,x,pc     dump 3 bytes off of the stack, and return
+
+MSize    fcc   / free pages, largest block /
+Mlen     equ   *-MSize
+ZSize    fcc   / pages./
+         fcb   C$CR
+KFree    fcc   /K of free RAM./
+         fcb   C$CR
+
+Print    ldy   #$0200
+         lda   #$01       to STDOUT
+         OS9   I$WritLn
+         rts
+
+Help     leax  HMsg,pc    point to the message
+         bsr   Print      dump it out
+         lbra  ClnExit    and exit
+
+HMsg     fcc   /SFree: Level III utility to show free system memory./
+         fcb   C$LF
+         fcc   /       Beta version 0.9/
+         fcb   C$CR
+
+         emod
+eom      equ   *
+         end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/defs/Defsfile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,8 @@
+Level    equ   3
+
+         ifp1            
+         use   /dd/defs/os9defs
+         use   /dd/defs/rbfdefs
+         use   /dd/defs/scfdefs
+         use   /dd/defs/systype
+         endc            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/defs/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,32 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+DEPENDS		= ./makefile
+
+DEFOPTS		= -ls -x -z -aLevel=3
+PERMDEFS	= Defsfile
+DEFS		= OS9Defs RBFDefs SCFDefs SysType VTIODefs
+ALLOBJS		= $(DEFS) $(PERMDEFS)
+
+all:	$(ALLOBJS)
+
+OS9Defs: $(DEFSDIR)/os9defs
+	$(AS) $(AFLAGS) $(DEFOPTS) -aOS9DEFS=0 $< > $@
+
+RBFDefs: $(DEFSDIR)/rbfdefs
+	$(AS) $(AFLAGS) $(DEFOPTS) -aRBFDEFS=0 $< > $@
+
+SCFDefs: $(DEFSDIR)/scfdefs
+	$(AS) $(AFLAGS) $(DEFOPTS) -aSCFDEFS=0 $< > $@
+
+SysType: $(DEFSDIR)/systype
+	$(AS) $(AFLAGS) $(DEFOPTS) -aSYSTYPE=0 $< > $@
+
+VTIODefs: $(DEFSDIR)/vtiodefs_cc3
+	$(AS) $(AFLAGS) $(DEFOPTS) -aVTIODEFS=0 $< > $@
+
+clean:
+	$(RM) $(DEFS)
+
+showobjs:
+	@$(ECHO) $(ALLOBJS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/defsfile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,7 @@
+Level    equ   3
+
+         use   os9defs
+         use   scfdefs
+         use   rbfdefs
+         use   systype
+         use   vtiodefs_cc3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,331 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+CPU		= 6809
+LEVEL		= 3
+
+DISTRO		= $(CPU)L$(LEVEL)
+DISTRONAME	= nos9$(CPU)l$(LEVEL)
+DISTROVER	= $(DISTRONAME)$(NITROS9VER)$(PORT)
+BOOTFILE_DW3	= bootfiles/bootfile_dw3
+BOOTFILE_40D	= bootfiles/bootfile_40d
+BOOTFILE_80D	= bootfiles/bootfile_80d
+BOOTFILE_40D_50HZ	= bootfiles/bootfile_40d_50hz
+BOOTFILE_80D_50HZ	= bootfiles/bootfile_80d_50hz
+KERNELFILE	= bootfiles/kernel_1773
+KERNELFILE_50HZ	= bootfiles/kernel_1773_50hz
+KERNELFILE_DW3	= bootfiles/kernel_dw3
+DIRS		= cmds modules defs sys bootfiles
+
+CMDS		= $(shell $(CD) cmds; make showobjs)
+CMDS_D2		= $(shell $(CD) cmds; make showobjs_d2)
+BOOTTRACK	= $(shell $(CD) modules; make showboottrack)
+KERNEL		= $(shell $(CD) modules; make showkernel)
+SYSMODS		= $(shell $(CD) modules; make showsysmods)
+CLOCKS		= $(shell $(CD) modules; make showclocks)
+RBF		= $(shell $(CD) modules; make showrbf)
+SCF		= $(shell $(CD) modules; make showscf)
+PIPE		= $(shell $(CD) modules; make showpipe)
+MODULECMDS	= shell grfdrv del echo format makdir merge os9gen prompt tmode
+
+DEFS		= $(shell $(CD) defs; make showobjs)
+SYSBIN		= $(shell $(CD) sys; make showbinobjs)
+SYSTEXT		= $(shell $(CD) sys; make showtextobjs)
+STARTUP		= startup
+SYSGO		= sysgo_dd
+
+PACKAGENAME	= $(DISTROVER).zip
+DSKDW3		= $(DISTROVER)_dw3.dsk
+LDSKDW3		= $(DISTRONAME)_dw3.dsk
+DSK360K_1	= $(DISTROVER)_40d_1.dsk
+LDSK360K_1	= $(DISTRONAME)_40d_1.dsk
+DSK360K_1_50HZ	= $(DISTROVER)_40d_1_50hz.dsk
+LDSK360K_1_50HZ	= $(DISTRONAME)_40d_1_50hz.dsk
+DSK360K_2	= $(DISTROVER)_40d_2.dsk
+LDSK360K_2	= $(DISTRONAME)_40d_2.dsk
+DSK720K		= $(DISTROVER)_80d.dsk
+LDSK720K	= $(DISTRONAME)_80d.dsk
+DSK720K_50HZ	= $(DISTROVER)_80d_50hz.dsk
+LDSK720K_50HZ	= $(DISTRONAME)_80d_50hz.dsk
+TESTDSK		= test.dsk
+
+DSKS		= $(DSKDW3) $(DSK360K_1) $(DSK360K_1_50HZ) $(DSK360K_2) $(DSK720K) $(DSK720K_50HZ)
+LDSKS		= $(LDSKDW3) $(LDSK360K_1) $(LDSK360K_1_50HZ) $(LDSK360K_2) $(LDSK720K) $(LDSK720K_50HZ)
+
+# Make all components
+all:
+	@$(ECHO) "**************************************************"
+	@$(ECHO) "*                                                *"
+	@$(ECHO) "*        NitrOS-9/$(CPU) Level 2 Distribution      *"
+	@$(ECHO) "*                                                *"
+	@$(ECHO) "**************************************************"
+	$(foreach dir, $(DIRS), ($(CD) $(dir); make);)
+
+# Clean all components
+clean: dskclean
+	$(foreach dir, $(DIRS), ($(CD) $(dir); make clean);)
+
+dskclean:
+	-$(RM) $(PACKAGENAME) $(DSKS) $(LDSKS)
+
+dsk: all $(PACKAGENAME)
+
+dskcopy: dsk
+	$(CP) $(DSKS) $(DSKDIR)
+
+scp: dsk
+	scp $(PACKAGENAME) boisy@cvs.nitros9.org:/home/nitros9/public_html
+
+$(PACKAGENAME): $(DSKS) ../../ReadMe ../../ChangeLog
+	$(ARCHIVE) $@ $^
+
+$(DSKDW3):
+	-$(RM) $@
+	$(OS9FORMAT_DW3) -q $@ -n"NitrOS-9/$(CPU) Level 2"
+	$(OS9GEN) $@ -b=$(BOOTFILE_DW3) -t=$(KERNELFILE_DW3)
+	$(MAKDIR) $@,CMDS
+	$(MAKDIR) $@,SYS
+	$(MAKDIR) $@,DEFS
+	$(CP) modules/$(SYSGO) $@,sysgo
+	$(OS9ATTR_EXEC) $@,sysgo
+	$(CD) cmds; $(CP) $(CMDS) ../$@,CMDS
+	$(foreach file, $(CMDS), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) sys; $(CP) $(SYSBIN) ../$@,SYS
+	$(foreach file, $(SYSBIN), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) sys; $(CPL) $(SYSTEXT) ../$@,SYS
+	$(foreach file, $(SYSTEXT), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) defs; $(CPL) $(DEFS) ../$@,DEFS
+	$(foreach file, $(DEFS), $(OS9ATTR_TEXT) $@,DEFS/$(file);)
+	$(CPL) $(STARTUP) $@,.
+	$(foreach file, $(STARTUP), $(OS9ATTR_TEXT) $@,$(file);)
+	$(MAKDIR) $@,NITROS9
+	$(MAKDIR) $@,NITROS9/$(DISTRO)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/CMDS
+	$(CD) cmds; $(CP) $(MODULECMDS) ../$@,NITROS9/$(DISTRO)/CMDS
+	$(foreach file, $(MODULECMDS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/CMDS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(CD) modules; $(CP) $(BOOTTRACK) ../$@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(foreach file, $(BOOTTRACK), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(CD) modules; $(CP) $(KERNEL) ../$@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(foreach file, $(KERNEL), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/KERNEL/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(CD) modules; $(CP) $(SYSMODS) ../$@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(foreach file, $(SYSMODS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(CD) modules; $(CP) $(CLOCKS) ../$@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(foreach file, $(CLOCKS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(CD) modules; $(CP) $(RBF) ../$@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(foreach file, $(RBF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/RBF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(CD) modules; $(CP) $(SCF) ../$@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(foreach file, $(SCF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SCF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(CD) modules; $(CP) $(PIPE) ../$@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(foreach file, $(PIPE), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/PIPE/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(CD) bootlists; $(CPL) *.bl ../$@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/SCRIPTS
+	$(CD) scripts; $(CPL) mb* ../$@,NITROS9/$(DISTRO)/SCRIPTS
+	$(RM) $(LDSKDW3)
+	$(SOFTLINK) $@ $(LDSKDW3)
+
+$(DSK360K_1):
+	-$(RM) $@
+	$(OS9FORMAT_DS40) -q $@ -n"NitrOS-9/$(CPU) Level 2 Disk 1"
+	$(OS9GEN) $@ -b=$(BOOTFILE_40D) -t=$(KERNELFILE)
+	$(MAKDIR) $@,CMDS
+	$(MAKDIR) $@,SYS
+	$(MAKDIR) $@,DEFS
+	$(CP) modules/$(SYSGO) $@,sysgo
+	$(OS9ATTR_EXEC) $@,sysgo
+	$(CD) cmds; $(CP) $(CMDS) ../$@,CMDS
+	$(foreach file, $(CMDS), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) sys; $(CP) $(SYSBIN) ../$@,SYS
+	$(foreach file, $(SYSBIN), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) sys; $(CPL) $(SYSTEXT) ../$@,SYS
+	$(foreach file, $(SYSTEXT), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) defs; $(CPL) $(DEFS) ../$@,DEFS
+	$(foreach file, $(DEFS), $(OS9ATTR_TEXT) $@,DEFS/$(file);)
+	$(CPL) $(STARTUP) $@,.
+	$(foreach file, $(STARTUP), $(OS9ATTR_TEXT) $@,$(file);)
+	$(RM) $(LDSK360K_1)
+	$(SOFTLINK) $@ $(LDSK360K_1)
+
+$(DSK360K_1_50HZ):
+	-$(RM) $@
+	$(OS9FORMAT_DS40) -q $@ -n"NitrOS-9/$(CPU) Level 2 Disk 1"
+	$(OS9GEN) $@ -b=$(BOOTFILE_40D_50HZ) -t=$(KERNELFILE_50HZ)
+	$(MAKDIR) $@,CMDS
+	$(MAKDIR) $@,SYS
+	$(MAKDIR) $@,DEFS
+	$(CP) modules/$(SYSGO) $@,sysgo
+	$(OS9ATTR_EXEC) $@,sysgo
+	$(CD) cmds; $(CP) $(CMDS) ../$@,CMDS
+	$(foreach file, $(CMDS), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) sys; $(CP) $(SYSBIN) ../$@,SYS
+	$(foreach file, $(SYSBIN), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) sys; $(CPL) $(SYSTEXT) ../$@,SYS
+	$(foreach file, $(SYSTEXT), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) defs; $(CPL) $(DEFS) ../$@,DEFS
+	$(foreach file, $(DEFS), $(OS9ATTR_TEXT) $@,DEFS/$(file);)
+	$(CPL) $(STARTUP) $@,.
+	$(foreach file, $(STARTUP), $(OS9ATTR_TEXT) $@,$(file);)
+	$(RM) $(LDSK360K_1_50HZ)
+	$(SOFTLINK) $@ $(LDSK360K_1_50HZ)
+
+$(DSK360K_2):
+	-$(RM) $@
+	$(OS9FORMAT_DS40) -q $@ -n"NitrOS-9/$(CPU) Level 2 Disk 2"
+	$(MAKDIR) $@,CMDS
+	$(CD) cmds; $(CP) $(CMDS_D2) ../$@,CMDS
+	$(foreach file, $(CMDS_D2), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(MAKDIR) $@,NITROS9
+	$(MAKDIR) $@,NITROS9/$(DISTRO)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/CMDS
+	$(CD) cmds; $(CP) $(MODULECMDS) ../$@,NITROS9/$(DISTRO)/CMDS
+	$(foreach file, $(MODULECMDS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/CMDS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(CD) modules; $(CP) $(BOOTTRACK) ../$@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(foreach file, $(BOOTTRACK), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(CD) modules; $(CP) $(KERNEL) ../$@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(foreach file, $(KERNEL), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/KERNEL/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(CD) modules; $(CP) $(SYSMODS) ../$@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(foreach file, $(SYSMODS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(CD) modules; $(CP) $(CLOCKS) ../$@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(foreach file, $(CLOCKS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(CD) modules; $(CP) $(RBF) ../$@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(foreach file, $(RBF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/RBF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(CD) modules; $(CP) $(SCF) ../$@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(foreach file, $(SCF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SCF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(CD) modules; $(CP) $(PIPE) ../$@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(foreach file, $(PIPE), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/PIPE/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(CD) bootlists; $(CPL) *.bl ../$@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/SCRIPTS
+	$(CD) scripts; $(CPL) mb* ../$@,NITROS9/$(DISTRO)/SCRIPTS
+	$(RM) $(LDSK360K_2)
+	$(SOFTLINK) $@ $(LDSK360K_2)
+
+$(DSK720K):
+	-$(RM) $@
+	$(OS9FORMAT_DS80) -q $@ -n"NitrOS-9/$(CPU) Level 2"
+	$(OS9GEN) $@ -b=$(BOOTFILE_80D) -t=$(KERNELFILE)
+	$(MAKDIR) $@,CMDS
+	$(MAKDIR) $@,SYS
+	$(MAKDIR) $@,DEFS
+	$(CP) modules/$(SYSGO) $@,sysgo
+	$(OS9ATTR_EXEC) $@,sysgo
+	$(CD) cmds; $(CP) $(CMDS) ../$@,CMDS
+	$(foreach file, $(CMDS), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) cmds; $(CP) $(CMDS_D2) ../$@,CMDS
+	$(foreach file, $(CMDS_D2), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) sys; $(CP) $(SYSBIN) ../$@,SYS
+	$(foreach file, $(SYSBIN), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) sys; $(CPL) $(SYSTEXT) ../$@,SYS
+	$(foreach file, $(SYSTEXT), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) defs; $(CPL) $(DEFS) ../$@,DEFS
+	$(foreach file, $(DEFS), $(OS9ATTR_TEXT) $@,DEFS/$(file);)
+	$(CPL) $(STARTUP) $@,.
+	$(foreach file, $(STARTUP), $(OS9ATTR_TEXT) $@,$(file);)
+	$(MAKDIR) $@,NITROS9
+	$(MAKDIR) $@,NITROS9/$(DISTRO)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/CMDS
+	$(CD) cmds; $(CP) $(MODULECMDS) ../$@,NITROS9/$(DISTRO)/CMDS
+	$(foreach file, $(MODULECMDS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/CMDS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(CD) modules; $(CP) $(BOOTTRACK) ../$@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(foreach file, $(BOOTTRACK), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(CD) modules; $(CP) $(KERNEL) ../$@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(foreach file, $(KERNEL), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/KERNEL/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(CD) modules; $(CP) $(SYSMODS) ../$@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(foreach file, $(SYSMODS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(CD) modules; $(CP) $(CLOCKS) ../$@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(foreach file, $(CLOCKS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(CD) modules; $(CP) $(RBF) ../$@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(foreach file, $(RBF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/RBF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(CD) modules; $(CP) $(SCF) ../$@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(foreach file, $(SCF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SCF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(CD) modules; $(CP) $(PIPE) ../$@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(foreach file, $(PIPE), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/PIPE/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(CD) bootlists; $(CPL) *.bl ../$@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/SCRIPTS
+	$(CD) scripts; $(CPL) mb* ../$@,NITROS9/$(DISTRO)/SCRIPTS
+	$(RM) $(LDSK720K)
+	$(SOFTLINK) $@ $(LDSK720K)
+
+$(DSK720K_50HZ):
+	-$(RM) $@
+	$(OS9FORMAT_DS80) -q $@ -n"NitrOS-9/$(CPU) Level 2"
+	$(OS9GEN) $@ -b=$(BOOTFILE_80D_50HZ) -t=$(KERNELFILE_50HZ)
+	$(MAKDIR) $@,CMDS
+	$(MAKDIR) $@,SYS
+	$(MAKDIR) $@,DEFS
+	$(CP) modules/$(SYSGO) $@,sysgo
+	$(OS9ATTR_EXEC) $@,sysgo
+	$(CD) cmds; $(CP) $(CMDS) ../$@,CMDS
+	$(foreach file, $(CMDS), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) cmds; $(CP) $(CMDS_D2) ../$@,CMDS
+	$(foreach file, $(CMDS_D2), $(OS9ATTR_EXEC) $@,CMDS/$(file);)
+	$(CD) sys; $(CP) $(SYSBIN) ../$@,SYS
+	$(foreach file, $(SYSBIN), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) sys; $(CPL) $(SYSTEXT) ../$@,SYS
+	$(foreach file, $(SYSTEXT), $(OS9ATTR_TEXT) $@,SYS/$(file);)
+	$(CD) defs; $(CPL) $(DEFS) ../$@,DEFS
+	$(foreach file, $(DEFS), $(OS9ATTR_TEXT) $@,DEFS/$(file);)
+	$(CPL) $(STARTUP) $@,.
+	$(foreach file, $(STARTUP), $(OS9ATTR_TEXT) $@,$(file);)
+	$(MAKDIR) $@,NITROS9
+	$(MAKDIR) $@,NITROS9/$(DISTRO)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/CMDS
+	$(CD) cmds; $(CP) $(MODULECMDS) ../$@,NITROS9/$(DISTRO)/CMDS
+	$(foreach file, $(MODULECMDS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/CMDS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(CD) modules; $(CP) $(BOOTTRACK) ../$@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK
+	$(foreach file, $(BOOTTRACK), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/BOOTTRACK/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(CD) modules; $(CP) $(KERNEL) ../$@,NITROS9/$(DISTRO)/MODULES/KERNEL
+	$(foreach file, $(KERNEL), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/KERNEL/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(CD) modules; $(CP) $(SYSMODS) ../$@,NITROS9/$(DISTRO)/MODULES/SYSMODS
+	$(foreach file, $(SYSMODS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SYSMODS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(CD) modules; $(CP) $(CLOCKS) ../$@,NITROS9/$(DISTRO)/MODULES/CLOCKS
+	$(foreach file, $(CLOCKS), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/CLOCKS/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(CD) modules; $(CP) $(RBF) ../$@,NITROS9/$(DISTRO)/MODULES/RBF
+	$(foreach file, $(RBF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/RBF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(CD) modules; $(CP) $(SCF) ../$@,NITROS9/$(DISTRO)/MODULES/SCF
+	$(foreach file, $(SCF), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/SCF/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(CD) modules; $(CP) $(PIPE) ../$@,NITROS9/$(DISTRO)/MODULES/PIPE
+	$(foreach file, $(PIPE), $(OS9ATTR_EXEC) $@,NITROS9/$(DISTRO)/MODULES/PIPE/$(file);)
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(CD) bootlists; $(CPL) *.bl ../$@,NITROS9/$(DISTRO)/BOOTLISTS
+	$(MAKDIR) $@,NITROS9/$(DISTRO)/SCRIPTS
+	$(CD) scripts; $(CPL) mb* ../$@,NITROS9/$(DISTRO)/SCRIPTS
+	$(RM) $(LDSK720K_50HZ)
+	$(SOFTLINK) $@ $(LDSK720K_50HZ)
+
+info:
+	@$(ECHO) "*** NitrOS-9/6809 Level 2 for the Tandy Color Computer 3 ***"
+	@$(foreach dsk, $(DSKS), $(ECHO) $(dsk);)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/modules/defsfile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,1 @@
+         use   ../defsfile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/modules/end.asm	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,33 @@
+********************************************************************
+* End - OS-9 Level 3 End Marker
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      ????/??/??  Alan DeKok
+* Created.
+ 
+         nam   End
+         ttl   OS-9 Level 3 End Marker
+
+         IFP1
+         use   defsfile
+         ENDC
+
+tylg     set   Systm+Obj6309
+attrev   set   ReEnt+rev
+rev      set   4
+edition  set   1
+
+         mod   eom,name,tylg,attrev,start,0
+
+name     fcs   /_end/
+         fcb   Edition 
+
+start    rts
+
+         emod
+eom      equ   *
+         end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/modules/kernel/defsfile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,1 @@
+         use   ../../defsfile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/modules/kernel/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,39 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+vpath %.asm $(LEVEL3)/modules/kernel:$(LEVEL2)/modules/kernel:$(LEVEL1)/modules/kernel
+
+DEPENDS		= ./makefile
+AFLAGS		+= -I$(LEVEL2)/modules/kernel -I$(LEVEL1)/modules/kernel
+
+KERNEL		= krn
+KERNELP2	= krnp2
+SYSCALLS	= fallimg.asm fallram.asm falltsk.asm faproc.asm fcmpnam.asm \
+		fcpymem.asm fdatlog.asm fdelram.asm ffmodul.asm ffreehb.asm \
+		fld.asm fldabx.asm flink.asm fmove.asm fnproc.asm fprsnam.asm \
+		freboot.asm fsrqmem.asm fssvc.asm fvmodul.asm \
+		fallbit.asm fallprc.asm fchain.asm fclrblk.asm fcrcmod.asm \
+		fdelimg.asm fexit.asm ffind64.asm ffork.asm fgblkmp.asm \
+		fgcmdir.asm fgmoddr.asm fgprdsc.asm fgprocp.asm ficpt.asm \
+		fid.asm fmapblk.asm fmem.asm fsend.asm fsleep.asm fsprior.asm \
+		fsswi.asm fstime.asm fsuser.asm funlink.asm funload.asm
+
+ALLOBJS		= $(KERNEL) $(KERNELP2)
+
+all:	$(ALLOBJS)
+
+$(KERNEL):	krn.asm $(SYSCALLS)
+
+$(KERNELP2):	krnp2.asm $(SYSCALLS)
+
+clean:
+	$(RM) $(ALLOBJS)
+
+showobjs:
+	@$(ECHO) $(ALLOBJS)
+
+showcopyobjs:
+	@$(ECHO) $(COPYOBJS)
+
+identify:
+	$(IDENT_SHORT) $(ALLOBJS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/modules/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,311 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+vpath %.asm kernel:$(LEVEL2)/modules/kernel:$(LEVEL2)/modules:$(LEVEL1)/modules
+
+AFLAGS		+= -I$(LEVEL1)/modules
+
+CLOCKELIM       = -aRTCElim=1
+CLOCKDISTO2     = -aRTCDsto2=1
+CLOCKDISTO4     = -aRTCDsto4=1
+CLOCKBNB        = -aRTCBB=1
+CLOCKSMART      = -aRTCSmart=1 -aMPIFlag=1
+CLOCKHARRIS     = -aRTCHarrs=1
+CLOCKCLOUD9     = -aRTCCloud9=1
+CLOCKSOFT       = -aRTCSoft=1
+CLOCKMESSEMU    = -aRTCMessEmu=1
+CLOCKJVEMU      = -aRTCJVEmu=1
+
+DEPENDS		= ./makefile
+TPB		= ../../3rdparty/booters
+
+BOOTERS		= boot_1773_6ms boot_1773_30ms \
+		 boot_burke boot_rampak boot_wd1002 boot_dw3
+BOOTTRACK	= rel_32 rel_40 rel_80 rel_32_50hz rel_40_50hz rel_80_50hz $(BOOTERS) krn
+KERNEL		= krnp2 krnp3_perr krnp4_regdump
+SYSMODS		= ioman init sysgo_h0 sysgo_dd
+CLOCKS          = clock_60hz clock_50hz \
+		clock2_elim clock2_disto2 clock2_disto4 clock2_bnb \
+		clock2_smart clock2_harris clock2_cloud9 clock2_soft \
+		clock2_jvemu clock2_messemu clock2_dw3
+
+RBF		= rbf.mn \
+		rbdw3.dr dw3.sb \
+		rb1773.dr rb1773_scii_ff74.dr rb1773_scii_ff58.dr \
+		d0_35s.dd d1_35s.dd d2_35s.dd d3_35s.dd \
+		d0_40d.dd d1_40d.dd d2_40d.dd d0_80d.dd \
+		d1_80d.dd d2_80d.dd \
+		ddd0_35s.dd ddd0_40d.dd ddd0_80d.dd \
+		rammer.dr r0_8k.dd r0_96k.dd r0_128k.dd r0_192k.dd \
+		ddr0_8k.dd ddr0_96k.dd ddr0_128k.dd ddr0_192k.dd md.dd \
+		ddx0.dd x0.dd x1.dd x2.dd x3.dd
+		
+
+SCF		= scf.mn \
+		vtio.dr vrn.dr scbbp.dr scbbt.dr scdwp.dr sspak.dr sc6551.dr \
+		cowin.io cogrf.io covdg.io covdg_small.io \
+		keydrv_cc3.sb snddrv_cc3.sb \
+		joydrv_joy.sb joydrv_6551L.sb joydrv_6552L.sb \
+		joydrv_6551M.sb joydrv_6552M.sb \
+		nil.dd p_scbbp.dd p_scdwp.dd \
+		t1_scbbt.dd t2_sc6551.dd t3_sc6551.dd \
+		ftdd.dd vi.dd ssp.dd term_scbbt.dt term_sc6551.dt \
+		term_vdg.dt term_win40.dt term_win80.dt w.dw w1.dw w2.dw \
+		w3.dw w4.dw w5.dw w6.dw w7.dw \
+		w8.dw w9.dw w10.dw w11.dw w12.dw w13.dw w14.dw w15.dw \
+		v1.dw v2.dw v3.dw v4.dw v5.dw \
+		v6.dw v7.dw \
+		scdwn.dr term_scdwn.dt n0_scdwn.dd n1_scdwn.dd n2_scdwn.dd n3_scdwn.dd \
+                n4_scdwn.dd n5_scdwn.dd n6_scdwn.dd n7_scdwn.dd \
+		n8_scdwn.dd n9_scdwn.dd n10_scdwn.dd n11_scdwn.dd \
+                n12_scdwn.dd n13_scdwn.dd n14_scdwn.dd
+
+PIPE		= pipeman.mn pipeman_named.mn \
+		piper.dr \
+		pipe.dd
+
+#
+# The following macros represent a collection of modules for various
+# kernel tracks and bootfile configurations.
+#
+KERNEL_1773	= rel_32 boot_1773 krn
+KERNEL_RAMPAK	= rel_32 $(TPB)/boot_rampak krn
+KERNEL_KENTON	= rel_32 $(TPB)/boot_kenton krn
+KERNEL_IDE	= rel_32 $(TPB)/boot_ide krn
+
+ALLOBJS		=  $(BOOTTRACK) $(KERNEL) $(SYSMODS) $(CLOCKS) $(RBF) $(SCF) $(PIPE)
+
+all:	$(ALLOBJS)
+
+# Kernel
+krn krnp2:
+	$(CD) kernel; make $@
+	$(CP) kernel/$@ .
+
+# Special cases
+cogrf.io: cowin.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aCoGrf=1
+
+rb1773_scii_ff74.dr:    rb1773.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aSCII=1
+                                                                            
+rb1773_scii_ff58.dr:    rb1773.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aSCII=1 -aSCIIALT=1
+                                                                            
+rel_32: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=32
+
+rel_40: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=40
+
+rel_80: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=80
+
+rel_32_50hz: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=32 -aTkPerSec=50
+
+rel_40_50hz: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=40 -aTkPerSec=50
+
+rel_80_50hz: rel.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aWidth=80 -aTkPerSec=50
+
+boot_1773_6ms: boot_1773.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aSTEP=0
+
+boot_1773_30ms: boot_1773.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aSTEP=3
+
+sysgo_dd: sysgo.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDD=1
+	
+sysgo_h0: sysgo.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS)
+	
+# Floppy descriptors
+SSDD35		= -aCyls=35 -aSides=1 -aSectTrk=18 -aSectTrk0=18 \
+		-aInterlv=3 -aSAS=8 -aDensity=1
+DSDD40		= -aCyls=40 -aSides=2 -aSectTrk=18 -aSectTrk0=18 \
+		-aInterlv=3 -aSAS=8 -aDensity=1
+DSDD80		= -aCyls=80 -aSides=2 -aSectTrk=18 -aSectTrk0=18 \
+		-aInterlv=3 -aSAS=8 -aDensity=1 -aD35
+
+ddd0_35s.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(SSDD35) -aDNum=0 -aDD=1
+
+d0_35s.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(SSDD35) -aDNum=0
+
+d1_35s.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(SSDD35) -aDNum=1
+
+d2_35s.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(SSDD35) -aDNum=2
+
+d3_35s.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(SSDD35) -aDNum=3
+
+ddd0_40d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD40) -aDNum=0 -aDD=1
+
+d0_40d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD40) -aDNum=0
+
+d1_40d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD40) -aDNum=1
+
+d2_40d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD40) -aDNum=2
+
+ddd0_80d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD80) -aDNum=0 -aDD=1
+
+d0_80d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD80) -aDNum=0
+
+d1_80d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD80) -aDNum=1
+
+d2_80d.dd: rb1773desc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) $(DSDD80) -aDNum=2
+
+# RAM Disk descriptors
+r0_8k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=8
+
+ddr0_8k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=8 -aDD=1
+
+r0_96k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=96
+
+ddr0_96k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=96 -aDD=1
+
+r0_128k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=128
+
+ddr0_128k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=128 -aDD=1
+
+r0_192k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=192
+
+ddr0_192k.dd: r0.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aRAMSize=192 -aDD=1
+
+# DriveWire 3 SCF descriptors
+term_scdwn.dt: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aTERM=1 -aAddr=0
+
+n0_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=0
+
+n1_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=1
+
+n2_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=2
+
+n3_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=3
+
+n4_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=4
+
+n5_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=5
+
+n6_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=6
+
+n7_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=7
+
+n8_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=8
+
+n9_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=9
+
+n10_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=10
+
+n11_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=11
+
+n12_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=12
+
+n13_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=13
+
+n14_scdwn.dd: scdwndesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aAddr=14
+
+# DriveWire 3 RBF descriptors
+ddx0.dd: dwdesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDD=1 -aDNum=0
+
+x0.dd: dwdesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDNum=0
+
+x1.dd: dwdesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDNum=1
+
+x2.dd: dwdesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDNum=2
+
+x3.dd: dwdesc.asm
+	$(AS) $< $(ASOUT)$@ $(AFLAGS) -aDNum=3
+
+# VDGInt Modules
+covdg.io: covdg.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aCOCO2=1
+
+covdg_small.io: covdg.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $<
+
+# Clocks
+clock_60hz: clock.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aPwrLnFrq=60
+
+clock_50hz: clock.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aPwrLnFrq=50
+
+clock2_cloud9: clock2_ds1315.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aCLOUD9=1
+
+clock2_bnb: clock2_ds1315.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aBNB=1
+
+clean:
+	$(CD) kernel; make $@
+	$(RM) $(ALLOBJS)
+
+showobjs:
+	@$(ECHO) $(ALLOBJS)
+
+showboottrack:
+	@$(ECHO) $(BOOTTRACK)
+
+showkernel:
+	@$(ECHO) $(KERNEL)
+
+showsysmods:
+	@$(ECHO) $(SYSMODS)
+
+showclocks:
+	@$(ECHO) $(CLOCKS)
+
+showrbf:
+	@$(ECHO) $(RBF)
+
+showscf:
+	@$(ECHO) $(SCF)
+
+showpipe:
+	@$(ECHO) $(PIPE)
+
+identify:
+	$(IDENT_SHORT) $(ALLOBJS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/startup	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,10 @@
+* Echo welcome message
+echo * Welcome to NitrOS-9 Level 3 *
+echo *   on the Color Computer 3   *
+* Lock shell and std utils into memory
+link shell
+load utilpak1
+* Start system time from keyboard
+setime </1
+date -t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/sys/makefile	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,61 @@
+PORT = coco3
+include $(NITROS9DIR)/rules.mak
+
+vpath %.hp $(LEVEL2)/sys:$(LEVEL1)/sys
+vpath %.asm $(LEVEL2)/sys
+
+DEPENDS		= ./makefile
+
+L1TXTFILES	= errmsg password
+L2TXTFILES	= motd
+BINFILES	= stdfonts stdpats_2 stdpats_4 stdpats_16 stdptrs \
+		ibmedcfont isolatin1font
+HELPFILES	= asm.hp attr.hp \
+		backup.hp basic09.hp binex.hp build.hp \
+		chd.hp chx.hp cmp.hp cobbler.hp config.hp copy.hp cputype.hp \
+		date.hp dcheck.hp debug.hp ded.hp deiniz.hp del.hp deldir.hp devs.hp \
+		dir.hp dirsort.hp disasm.hp display.hp dmem.hp dmode.hp dsave.hp dump.hp \
+		echo.hp edit.hp error.hp ex.hp exbin.hp \
+		format.hp free.hp \
+		gfx.hp gfx2.hp grfdrv.hp \
+		help.hp \
+		ident.hp iniz.hp inkey.hp irqs.hp \
+		kill.hp \
+		link.hp list.hp load.hp login.hp \
+		makdir.hp mdir.hp megaread.hp merge.hp mfree.hp mmap.hp modpatch.hp \
+		montype.hp mpi.hp os9gen.hp \
+		padrom.hp park.hp pmap.hp proc.hp procs.hp prompt.hp pwd.hp pxd.hp \
+		reboot.hp rename.hp runb.hp \
+		save.hp setime.hp setpr.hp shell.hp sleep.hp smap.hp \
+		tee.hp tmode.hp touch.hp tsmon.hp tuneport.hp \
+		unlink.hp \
+		verify.hp \
+		wcreate.hp \
+		xmode.hp
+
+#HELPFILES	= make.hp maketerm.hp rdump.hp rlink.hp rma.hp scred.hp
+
+HELPMSG		= helpmsg
+
+TEXTFILES	= $(L2TXTFILES) $(HELPMSG) $(L1TXTFILES)
+ALLOBJS		= $(TEXTFILES) $(BINFILES)
+
+all:	$(ALLOBJS) $(DEPENDS)
+
+$(HELPMSG): $(HELPFILES)
+	$(MERGE) $^ > $@
+
+$(L1TXTFILES): $(LEVEL1)/sys/$@
+	-$(SOFTLINK) $(LEVEL1)/sys/$@
+
+clean:
+	$(RM) $(HELPMSG) $(L1TXTFILES) $(BINFILES)
+
+showbinobjs:
+	@$(ECHO) $(BINFILES)
+
+showtextobjs:
+	@$(ECHO) $(TEXTFILES)
+
+showobjs:
+	@$(ECHO) $(ALLOBJS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level3/coco3/sys/motd	Sun Jan 17 21:35:51 2010 +0000
@@ -0,0 +1,3 @@
+
+Welcome to NitrOS-9 Level 3!
+