diff --git a/level1/modules/rel.asm b/level1/modules/rel.asm
--- a/level1/modules/rel.asm
+++ b/level1/modules/rel.asm
@@ -20,17 +20,21 @@
          use   defsfile
        ENDC
 
 XX.Size  equ   6          number of bytes before REL actually starts
 Offset   equ   Bt.Start+XX.Size
        IFEQ  Level-1
 ScStart  equ   $8000      screen start in memory
        ELSE
+        IFEQ MOOH
 ScStart  equ   $8008      screen start in memory
+        ELSE
+ScStart  equ   $1E00      screen start in (internal) memory
+        ENDC
        ENDC
 
 tylg     set   Systm+Objct
 atrv     set   ReEnt+rev
 rev      set   $05
 edition  set   5
 
 ********************************************************************
@@ -336,17 +340,27 @@ crash    lda   #'*        signal a crash
          fcb   $8C        skip 2 bytes
 
 *************************************************************************
 * Entry point for level2/3
 *************************************************************************
 
 reset    equ   *          later on, have reset different from start?
 start    ldb   #$FF       negative - do complete boot
+       IFNE MOOH
+         lda   #KrnBlk    map in RAM in kernel block at E000
+         sta   $FFA7
+         lda   #$40       enable MMU so that the map is active
+         sta   $FF90
+         sta   $FFC7      shift VDU buffer scanout to $1E00
+         sta   $FFCB
+         sta   $FFCD
+       ELSE
          clr   >$FFDF     added for OS-9 ROM Kit boots +BGP+
+       ENDC
 
 start1   orcc  #IntMasks  turn off IRQ's
          clr   >PIA0Base+3 turn off SAM IRQ's
          clra             make A=0 for later
          IFNE  H6309
          tfr   0,dp       set direct page to $0000
          ldmd  #3         native mode
          ELSE
@@ -374,17 +388,19 @@ start1   orcc  #IntMasks  turn off IRQ's
 *         ldb   #$20       start out at $20
          clrb
          tfr   d,x        here, too
 L0072    sta   ,x+        clear out the direct page
          incb             Boot won't be using any of it!
          bne   L0072      BUT RAMMER/MD DOES!!!
          inc   <D.Speed   0+1=1; high speed
 Cont     clrb             --make sure B=0
+       IFEQ MOOH
          stb   >$FFD9     set to high speed
+       ENDC
          leay  <L001F,pcr point to the video setup data
          ldx   #$0090     set video mapping
          deca             now D=$FF00, versus STU >-$0100,x (saves 1 byte)
 
 * Copy setup data to (1) the GIME at $FF90-$FFA0 and (2) shadow copy
 * in the direct page at $0090 (D.HINIT etc).
 L0084    ldu   ,y++       get the bytes
          stu   d,x        save in the hardware
@@ -393,16 +409,26 @@ L0084    ldu   ,y++       get the bytes
          bcs   L0084
 
          IFEQ  Width-32
          ldd   #$1200     color 0=$12, 1=$00 i.e. black on green
          ELSE
          ldd   #$3F00     color 0=$3F, 1=$00, i.e. black on white
          ENDC
          std   >$FFB0     set only the first two palettes, B=$00 already
+       IFNE MOOH
+         ldx   #ScStart+32 debug output from 2nd line
+         stx   <$04       set debug print pointer
+         leax  -32,x      clear whole screen
+         ldy   #$200
+         ldb   #$20
+ClrLoop  stb   ,x+
+         leay  -1,y
+         bne   ClrLoop
+       ELSE
          lda   #Bt.Block
          sta   >$FFA4     map in the block
 
          ldx   #$8000     start of the block
          IFNE  H6309
          ldq   #Bt.Flag*65536+8
          ELSE
          ldd   #Bt.Flag
@@ -432,51 +458,67 @@ ClrLoop  stb   ,x+
          leay  -1,y
          bne   ClrLoop
 *         ldd   #$2000-8
 *         ldu   #$2020
 *ClrLoop  stu   ,x++
 *         subd  #$0002
 *         bne   ClrLoop
          ENDC
+       ENDC
 
 MoveTxt  leau  <L0011,pcr point to OS-9 Welcome Message
          bsr   Move1      E=$00 already from TFM above...
 * 0  = crash
 * 1  = reset
 * -1 = startup
          ldb   ,s+        check state of boot
          bne   L00E2      if OK, continue
 * U=<L0019 already from TFM above (call to L00FD)
          bsr   Move1      move it on-screen, E=$00 already
          clr   >$FF40     turn off disk drives
 L00E0    bra   L00E0      loop forever
 
 Move1    ldy   ,u++       get where to put the text
+       IFNE MOOH
+         lda #$3F         expose internal video memory
+         sta $FFA0
+       ENDC
          IFNE  H6309
 Move     ldf   ,u+        get the size of the block to move
 L00FD    tfm   u+,y+
          ELSE
 Move     clra
          ldb   ,u+
          tfr   d,x
 L00FD    lda   ,u+
          sta   ,y+
          leax  -1,x
          bne   L00FD
          ENDC
+       IFNE MOOH
+         clr $FFA0        map system block again
+       ENDC
          rts
 
+       IFNE MOOH
+L0011    fdb   ScStart+8
+       ELSE
 L0011    fdb   ScStart+(BOOTLINE*Width)+((Width-L1)/2)
+       ENDC
          fcb   L1         length of the text below
 T1       equ   *
          fcc   /NITROS9 BOOT/
 L1       equ   *-T1
 
+       IFNE MOOH
+         fdb   ScStart+8+L1+1
+       ELSE
          fdb   ScStart+((BOOTLINE+2)*Width)+((Width-LFail)/2)
+       ENDC
          fcb   LFail      length of the 'FAILED' string
 TFail    fcc   /FAILED/
 LFail    equ   *-TFail
 
 * saves 2 bytes over leax <L00E2,pc, cmpx #Bt.Start
 L00E2    tfr   pc,d       get the address at which we're executing
          cmpa  #$26       the bootfile starts out at $2600
          bne   L0101      if not at $26xx, continue with booting
@@ -487,23 +529,48 @@ L00E2    tfr   pc,d       get the addres
          ldx   #$1200
          ENDC
          ldy   #Bt.Start  where to put it
          bsr   L00FD      1 byte smaller than tfm in place
          jmp   >Offset+L0101
 
 BtDebug  pshs  cc,d,x     save the register
          orcc  #IntMasks  turn IRQ's off
+       IFNE MOOH
+         anda  #$7F
+         ldb   #$0D
+         stb   $FF7D      Wordpak register address
+         sta   $FF7C      Wordpak output character
+        IFNE 0
+         ldb   <$06       if VTIO initialized, go silent on VDU
+         bne   DnDebug
+         cmpa  #96        convert ASCII to MC6847 characters
+         blo   lochar
+         suba  #32
+lochar   anda  #$3F
+         ldx   <$04       where to put the bytes
+         ldb   #$3F       unmapped, expose internal video mem
+         stb   >DAT.Regs+0 map the boot screen into block 0
+         sta   ,x+        put the character on-screen
+         clr   >DAT.Regs+0 map block 0 in again
+         cmpx  #ScStart+512
+         blo skok
+         ldx   #ScStart
+skok     stx   <$04     save updated address
+        ENDC
+DnDebug  puls  cc,d,x,pc  restore X and exit
+       ELSE
          ldb   #Bt.Block  block to map in
          stb   >DAT.Regs+0 map the boot screen into block 0
          ldx   >$0002     where to put the bytes
          sta   ,x+        put the character on-screen
          stx   >$0002     save updated address
          clr   >DAT.Regs+0 map block 0 in again
          puls  cc,d,x,pc  restore X and exit
+       ENDC
 
 L0101
          lda   #$7E       RTS
          sta   <D.BtBug
          leax  <BtDebug,pc point to debug routine
          stx   <D.BtBug+1
 
          leau  <R.Crash,pcr point to D.Crash, D.CBStart
diff --git a/level1/modules/term_vdg.asm b/level1/modules/term_vdg.asm
--- a/level1/modules/term_vdg.asm
+++ b/level1/modules/term_vdg.asm
@@ -54,17 +54,21 @@ prn3     set   Black.     border color
          fcb   C$RARR     reprint line character
          fcb   C$SHRARR   duplicate last line character
          fcb   C$PAUS     pause character
          fcb   C$INTR     interrupt character
          fcb   C$QUIT     quit character
          fcb   C$BSP      backspace echo character
          fcb   C$BELL     line overflow character (bell)
          IFGT  Level-1
+       IFNE MOOH
+         fcb   $02        (ModCoVDG) init value for dev ctl reg
+       ELSE
          fcb   $01        init value for dev ctl reg
+       ENDC
          ELSE
          IFEQ  coco2b+deluxe-1
          fcb   ModCoVDG+1 init value for dev ctl reg
          ELSE
          fcb   ModCoVDG   init value for dev ctl reg
          ENDC
          ENDC
          fcb   $00        baud rate
diff --git a/level2/modules/clock.asm b/level2/modules/clock.asm
--- a/level2/modules/clock.asm
+++ b/level2/modules/clock.asm
@@ -62,17 +62,24 @@ NewSvc   fcb   F$Time
          fcb   $80        end of service call installation table
 
 *---------------------------------------------------------
 * IRQ Handling starts here.
 *
 * Caveat: There may not be a stack at this point, so avoid using one.
 *         Stack is set up by the kernel between here and SvcVIRQ.
 *
+       IFNE MOOH
+SvcIRQ   lda   PIA0Base+3
+         bpl   NoClock
+         lda   PIA0Base+2 Acknowledge IRQ
+         lda #8           Set CoCo3 VBLANK bit
+       ELSE
 SvcIRQ   lda   >IRQEnR    Get GIME IRQ Status and save it.
+       ENDC
          ora   <D.IRQS
          sta   <D.IRQS
          bita  #$08       Check for clock interrupt
          beq   NoClock
          anda  #^$08      Drop clock interrupt
          sta   <D.IRQS
          ldx   <D.VIRQ    Set VIRQ routine to be executed
          clr   <D.QIRQ    ---x IS clock IRQ
@@ -457,17 +464,21 @@ InitCont ldx   #PIA0Base  point to PIA0
          stb   >$FF98     set 50 Hz VSYNC
          ENDC
 
          sta   1,x        enable DDRA
          sta   ,x         set port A all inputs
          sta   3,x        enable DDRB
          coma
          sta   2,x        set port B all outputs
+       IFNE MOOH
+         ldd   #$343D     [A]=PIA0 CRA contents, [B]=PIA0 CRB contents (VBORD enabled)
+       ELSE
          ldd   #$343C     [A]=PIA0 CRA contents, [B]=PIA0 CRB contents
+       ENDC
          sta   1,x        CA2 (MUX0) out low, port A, disable HBORD high-to-low IRQs
          stb   3,x        CB2 (MUX1) out low, port B, disable VBORD low-to-high IRQs
          sta   $23,x      disable CART +RG Mar 14, 2012
          lda   ,x         clear possible pending PIA0 HBORD IRQ
          lda   2,x        clear possible pending PIA0 VBORD IRQ
 
 * Don't need to explicitly read RTC during initialization
          ldd   #59*256+TkPerTS last second and time slice in minute
diff --git a/level2/modules/covdg.asm b/level2/modules/covdg.asm
--- a/level2/modules/covdg.asm
+++ b/level2/modules/covdg.asm
@@ -126,30 +126,37 @@ L006F    clr   ,x+          set stored b
          bra   L00D5          and exit
 
 * Read bytes from IN
 * Actually, this is more like an INIZ of the device.
 Read     pshs  u,y,x          save regs
          bsr   SetupPal          set up palettes
          lda   #$AF
          sta   <VD.CColr,u     default color cursor
+      IFNE MOOH
+         lda   #01           allocate/protect video RAM directly
+         sta   $091E
+         sta   $091F
+         ldx   #$1E00
+      ELSE
          pshs  u
          ldd   #768          gets 1 page on an odd page boundary
          os9   F$SRqMem      request from top of sys ram
          bcs   L00D6          error out of no system mem
          tfr   u,d          U = addr of memory
          tfr   u,x
          bita  #$01          test to see if on even page
          beq   IsEven          branch if even
          leax  >256,x          else point 100 bytes into mem
          bra   IsOdd          and free
 IsEven   leau  >512,u          we only need 2 pages for the screen memory
 IsOdd    ldd   #256          1 page return
          os9   F$SRtMem      return system memory
          puls  u
+      ENDC
          stx   <VD.ScrnA,u     save start address of the screen
          stx   <VD.CrsrA,u     and start cursor position
          leax  >512,x          point to end of screen
          stx   <VD.ScrnE,u     save it
          lda   #$60          get default character
          sta   <VD.CChar,u     put character under the cursor
          sta   <VD.Chr1,u     only referenced here ??
          lbsr  ClrScrn          clear the screen
diff --git a/level2/modules/kernel/fsrqmem.asm b/level2/modules/kernel/fsrqmem.asm
--- a/level2/modules/kernel/fsrqmem.asm
+++ b/level2/modules/kernel/fsrqmem.asm
@@ -313,17 +313,17 @@ I.VBlock leau  d,x          point to end
          lsra               A is now logical block * 2
          ldy   <D.SysDAT    get pointer to system DAT
          leay  a,y          offset to bootfile
 L092D    ldd   M$ID,x       get module ID
          cmpd  #M$ID12      legal ID?
          bne   L0954        no, keep looking
 
          ldd   M$Name,x     find name offset pointer
-         pshs  x
+         pshs  x		Why not use U instead of saving X?
          leax  d,x
 name.prt lda   ,x+          get first character of the name
          jsr   <D.BtBug     print it out
          bpl   name.prt
          lda   #C$SPAC      a space
          jsr   <D.BtBug
          puls  x            address of module header
 
@@ -338,17 +338,17 @@ name.prt lda   ,x+          get first ch
          tfr   y,d
          os9   F$VModul
          IFNE  H6309
          ldw   ,s
          leax  w,x
          ELSE
          pshs  b
          ldd   1,s
-         leax  d,x
+         leax  d,x          recover module header pointer
          puls  b
          ENDC
          bcc   L094E        success
          cmpb  #E$KwnMod    Known module?
          bne   L0954        No. Assume a case of mistaken identity and continue
 L094E    ldd   M$Size,x     get the module size
          leax  d,x          and step over it
          fcb   $8C          skip 2 bytes (continue at L0956)
diff --git a/level2/modules/kernel/krn.asm b/level2/modules/kernel/krn.asm
--- a/level2/modules/kernel/krn.asm
+++ b/level2/modules/kernel/krn.asm
@@ -104,17 +104,21 @@ entry   equ     *
       IFNE    H6309
         ldq     #$01001f00      start address to clear & # bytes to clear
         leay    <entry+2,pc     point to a 0
         tfm     y,d+
         std     <D.CCStk        set pointer to top of global memory to $2000
         lda     #$01            set task user table to $0100
       ELSE
         ldx     #$100           start address
+       IFNE MOOH
+        ldy     #$1E00-$100     bytes to clear, up to VDU RAM at $1E00
+       ELSE
         ldy     #$2000-$100     bytes to clear
+       ENDC
         clra
         clrb
 L001C   std     ,x++            clear it 16-bits at a time
         leay    -2,y
         bne     L001C
         stx     <D.CCStk        Set pointer to top of global memory to $2000
         inca                    D = $0100
       ENDC
@@ -367,17 +371,17 @@ L0111   aslb
         abx                     add maximum block number to block map start
         leax    -1,x            Skip good blocks that are RAM
         lda     #NotRAM         Not RAM flag
         subb    #$3F            Calculate # blocks to mark as not RAM
 L0127   sta     ,x+             Mark them all
         decb
         bne     L0127
 
-* ASSUME: however we got here, B=0
+* ASSUME: however we got here, B=0 - not correct if 512K or 1024K
 L0170   ldx     #Bt.Start       start address of the boot track in memory
         lda     #18             size of the boot track is $1800
 
 * Verify the modules in the boot track and update/build a module index
         lbsr    I.VBlock
         bsr     L01D2           go mark system map
 
 * See if init module is in memory already
@@ -1052,22 +1056,35 @@ SWIStack
         ENDC
 
         fcb     $55     D.ErrRst
 
 * This list of addresses ends up at $FEEE after the kernel track is loaded
 * into memory.  All interrupts come through the 6809 vectors at $FFF0-$FFFE
 * and get directed to here.  From here, the BRA takes CPU control to the
 * various handlers in the kernel.
+      IFNE MOOH
+        fdb     0       filler
+        * top of CRM is mirrored to vector table at FFF0
+        fdb     0               Only used on 6309
+        fdb     Where+SWI3VCT
+        fdb     Where+SWI2VCT
+        fdb     Where+FIRQVCT
+        fdb     Where+IRQVCT
+        fdb     Where+SWIVCT
+        fdb     Where+NMIVCT
+        fdb     $ED33		FIXME jump into REL for now
+      ELSE
         bra     SWI3VCT SWI3 vector comes here
         nop
         bra     SWI2VCT SWI2 vector comes here
         nop
         bra     FIRQVCT FIRQ vector comes here
         nop
         bra     IRQVCT  IRQ vector comes here
         nop
         bra     SWIVCT  SWI vector comes here
         nop
         bra     NMIVCT  NMI vector comes here
         nop
+      ENDC
 
         end
diff --git a/level2/modules/keydrv_cc3.asm b/level2/modules/keydrv_cc3.asm
--- a/level2/modules/keydrv_cc3.asm
+++ b/level2/modules/keydrv_cc3.asm
@@ -104,29 +104,70 @@ EvalMatrix
          std   <G.Key1		key 1&2 flags $FF=none
          sta   <G.Key3		key 3     "
          deca			ie. lda #%11111110
          sta   $02,x		strobe one column
 L006E    lda   ,x		read PIA #0 row states
          coma			invert bits so 1=key pressed
          anda  #$7F		keep only keys, bit 0=off 1=on
          beq   L0082		no keys pressed, try next column
+       IFNE KEYDGN
+         pshs  a                Convert column output for Dragon/MOOH
+         anda  #64              save bit 6 while rotating 5-0 twice
+         pshs  a
+         lda   1,s
+         anda  #3               move bits 0,1 to 4,5
+         lsla
+         lsla
+         lsla
+         lsla
+         pshs a
+         lda  2,s
+         anda #$3C              move bits 5,4,3,2 to 3,2,1,0
+         lsra
+         lsra
+         ora ,s+
+         ora ,s++
+       ENDC
          ldb   #$FF		preset counter to -1
 L0077    incb            
          lsra			bit test regA
          bcc   L007E		no key so branch
          lbsr  L010E		convert column/row to matrix value and store it
 L007E    cmpb  #$06		max counter
          blo   L0077		loop if more bits to test
 L0082    inc   <G.KeyFlg	counter; used here for column
          orcc  #Carry		bit marker; disable strobe
          rol   $02,x		shift to next column
          bcs   L006E		not finished with columns so loop
          lbsr  L0166		simultaneous check; recover key matrix value
+       IFNE 0
+         lbmi   L00F5		invalid so go
+         pshs  a                Debug: Display keyboard scan code
+         anda  #$F0
+         lsra
+         lsra
+         lsra
+         lsra
+         adda  #'0
+         cmpa  #'9
+         bls   jnum
+         suba  #'0+9
+jnum     sta   $1e00
+         lda   ,s
+         anda  #$0F
+         adda  #'0
+         cmpa  #'9
+         bls   jnum2
+         suba  #'0+9
+jnum2    sta   $1e01
+         puls  a
+       ELSE
          bmi   L00F5		invalid so go
+       ENDC
          cmpa  <G.LKeyCd	last keyboard code	
          bne   L0095     
          inc   <G.KySame	same key flag ?counter?
 L0095    sta   <G.LKeyCd	setup for last key pressed
          beq   L00B5		if @ key, use lookup table
          suba  #$1A		the key value (matrix) of Z
          bhi   L00B5		not a letter so go
          adda  #$1A		restore regA
@@ -199,22 +240,30 @@ L010E    pshs  b,a
          lda   <G.KeyFlg	get column #
          cmpa  #$03		is it column 3?; ie up arrow
          blt   L011C		if lt must be a letter
          bsr   L00FC		its a non letter so bsr
 L011C    lslb			B*8  8 keys per row
          lslb            
          lslb            
          addb  <G.KeyFlg	add in the column #
+       IFNE MOOH
+         cmpb  #$00		ALT (@ key on Dragon/CoCo1/2 )
+       ELSE
          cmpb  #$33		ALT
+       ENDC
          bne   L012B     
          inc   <G.AltDwn	ALT down flag
          ldb   #$04      
          bra   L0108     
+       IFNE MOOH
+L012B    cmpb  #$31		CTRL (CLEAR key on Dragon/CoCo1/2)
+       ELSE
 L012B    cmpb  #$34		CTRL
+       ENDC
          bne   L0135     
          inc   <G.CntlDn	CTRL down flag
          ldb   #$02      
          bra   L0108     
 L0135    cmpb  #$37		SHIFT key
          bne   L013F     
          com   <G.ShftDn	SHIFT down flag
          ldb   #$01      
@@ -298,41 +347,58 @@ L01CF    ldb   ,x		get current byte
          lda   $01,x		get next byte
          bmi   L01DB		negative - no swap
          std   ,x		swap the bytes
 L01DB    rts             
 
 * Special Key Codes Table : 3 entries per key - Normal, Shift, Control
 * They are in COCO keyboard scan matrix order; the alphabetic and meta
 * control keys are handled elsewhere.  See INSIDE OS9 LEVEL II p.4-1-7
+       IFNE MOOH
+L01DC    fcb   $00,$00,$00   @ KEY (ALT)
+       ELSE
 L01DC    fcb   $40,$60,$00   '@,'`,null				
+       ENDC
 	 fcb   $0c,$1c,$13   UP ARROW:    FF, FS,DC3
 	 fcb   $0a,$1a,$12   DOWN ARROW:  LF,SUB,DC2
 	 fcb   $08,$18,$10   LEFT ARROW:  BS,CAN,DLE
 	 fcb   $09,$19,$11   RIGHT ARROW: HT, EM,DC1
 	 fcb   $20,$20,$20   SPACEBAR
 	 fcb   $30,$30,$81   '0,'0,$81 (caps lock toggle)
 	 fcb   $31,$21,$7c   '1,'!,'|
+       IFNE MOOH
+	 fcb   $32,$22,$60   '2,'",'`
+       ELSE
 	 fcb   $32,$22,$00   '2,'",null
+       ENDC
 	 fcb   $33,$23,$7e   '3,'#,'~
 	 fcb   $34,$24,$1d   '4,'$,GS (was null)
 	 fcb   $35,$25,$1e   '5,'%,RS (was null)
 	 fcb   $36,$26,$1f   '6,'&,US (was null)
 	 fcb   $37,$27,$5e   '7,'','^
 	 fcb   $38,$28,$5b   '8,'(,'[
 	 fcb   $39,$29,$5d   '9,'),']
+      IFNE MOOH
+	 fcb   $3a,$2a,$40   ':,'*,'@
+      ELSE
 	 fcb   $3a,$2a,$00   ':,'*,null
+      ENDC
 	 fcb   $3b,$2b,$7f   ';,'+,DEL
 	 fcb   $2c,$3c,$7b   ',,'<,'{
 	 fcb   $2d,$3d,$5f   '-,'=,'_
 	 fcb   $2e,$3e,$7d   '.,'>,'}
 	 fcb   $2f,$3f,$5c   '/,'?,'\
 	 fcb   $0d,$0d,$0d   ENTER key					
+       IFNE MOOH
+	 fcb   $00,$00,$00   CLEAR key (CTRL)
+	 fcb   $05,$82,$1b   BREAK key (ENQ, NextWin, ESC)
+       ELSE
 	 fcb   $82,$83,$84   CLEAR key (NextWin, PrevWin, KbdMouse toggle)
 	 fcb   $05,$03,$1b   BREAK key (ENQ,ETX,ESC)
+       ENDC
 	 fcb   $31,$33,$35   F1 key (converts to $B1,$B3,$B5)
 	 fcb   $32,$34,$36   F2 key (converts to $B2,$B4,$B6)
 
 *L01DC    fdb   $4060,$000c,$1c13,$0a1a,$1208,$1810,$0919,$1120
 *         fdb   $2020,$3030,$8131,$217c,$3222,$0033,$237e,$3424
 *         fdb   $0035,$2500,$3626,$0037,$275e,$3828,$5b39,$295d
 *         fdb   $3a2a,$003b,$2b7f,$2c3c,$7b2d,$3d5f,$2e3e,$7d2f
 *         fdb   $3f5c,$0d0d,$0d82,$8384,$0503,$1b31,$3335,$3234
diff --git a/level2/modules/vtio.asm b/level2/modules/vtio.asm
--- a/level2/modules/vtio.asm
+++ b/level2/modules/vtio.asm
@@ -166,16 +166,20 @@ Init     ldx   <D.CCMem		get ptr to CC m
          inc   <G.Mouse+Pt.Valid,x	set mouse packet to invalid
          ldd   #$0178		default to right mouse/time out value
          std   <G.Mouse+Pt.Actv,x
 
          ldd   #$FFFF		initialize keyboard values
          std   <G.LKeyCd,x	last keyboard code & key repeat counter inactive
          std   <G.2Key2,x
          ldd   <D.Proc		get cur proc desc ptr in D
+       IFNE MOOH
+         ldb   #1
+         stb   <$06             signal BtDebug to not write to VDU anymore
+       ENDC
          pshs  u,y,x,b,a	save regs
 
 * Added to allow patching for RGB/CMP/Mono and Key info - BGP
 * Uses new init module format to get monitor type and key info
 
          ldy   <D.Init		get init module ptr
          lda   MonType,y	get monitor type byte 0,1,2
          sta   <G.MonTyp,x	save off
@@ -1018,16 +1022,19 @@ setmous2 lda   #$FF
 *
 * Exit:
 *    CC = carry set on error
 *    B  = error code
 *
 Write    ldb   <V.ParmCnt,u	are we in the process of getting parameters?
          lbne  L0600		yes, go process
          sta   <V.DevPar,u	save off character
+       IFNE MOOH
+         jsr   <D.BtBug         copy all output to debug device
+       ENDC
          cmpa  #C$SPAC		space or higher?
          bcc   CoWrite		yes, normal write
          cmpa  #$1E		1E escape code?
          bcc   L05EF		yes, go process
          cmpa  #$1B		$1B escape code?
          beq   L05F3		yes, go handle it
          cmpa  #$05		$05 escape code? (cursor on/off)
          beq   L05F3		yep, go handle it
