changeset 1682:e2ac12787e55

Sticking with clock2_smart for now. Also moved Robert's swread and swset to 3rdparty/utils
author boisy
date Fri, 30 Jul 2004 23:49:50 +0000
parents 48f9212ef739
children 786453492c1e
files 3rdparty/utils/smartwatch/swread.asm 3rdparty/utils/smartwatch/swset.asm defs/os9defs defs/releasedefs docs/Getting Started With NitrOS-9.doc level1/ChangeLog level1/cmds/format.asm level1/cmds/makefile level1/cmds/swread.asm level1/modules/makefile level1/modules/sysgo.asm level1/sys/makefile level2/cmds/makefile level2/coco3/ChangeLog level2/coco3_6309/ChangeLog level2/makefile level2/modules/makefile level2/sys/makefile
diffstat 18 files changed, 676 insertions(+), 980 deletions(-) [+]
line wrap: on
line diff
--- a/3rdparty/utils/smartwatch/swread.asm	Fri Jul 30 02:33:35 2004 +0000
+++ b/3rdparty/utils/smartwatch/swread.asm	Fri Jul 30 23:49:50 2004 +0000
@@ -4,7 +4,7 @@
 * $Id$
 *
 * Copyright May, 1990 by Robert Gault
-
+ 
 * SWREAD will read smartwatch compensating for 12hr mode if active
 * time will be sent to OS-9 in 24hr mode for compatability
 *
@@ -25,16 +25,32 @@
 *        RAM/ROM block when ROMs activated.
 * 2      Relocated part of clock read routine to        RG  94/12/19
 *        shorten the time spent with irqs off.
-
+* 3      Adapted module for Level-1 use. Trimmed code.  RG  04/07/24
+*        Forced to add back the relocation loop for Level-1.
+*        Attempted to write a clock2 modules but just too
+*        difficult to acquire needed system low ram.
+*        Removed 6309 code for consistency as it had
+*        little effect on speed or size.
+*        Switched from Chain to Setime to Fork.
+ 
          nam   SWRead
          ttl   Read SmartWatch clock
-
+ 
          ifp1  
          use   defsfile
-         use   systype
          endc  
 
+DOHELP   equ   0
+SETIME   equ   0
+
+* Next three lines for testing purposes. Remove as makefile will
+* handle this choice.
+*Level    equ   1
+*Level    equ   2
+*D.TSec    equ   $5A
+
 cartI    equ   $FF22      cartridge IRQ report
+MPI.Slct equ   $FF7F
 rom      equ   $FFDE
 ram      equ   $FFDF
 IEN      equ   %00100000
@@ -42,235 +58,293 @@
 SCS      equ   %00000100
 ROM1     equ   %00000010
 ROM0     equ   %00000001
-*D.Cntury	set	$6A century byte
-
+RTC.Base equ   $C000
+RTC.Blk  equ   $3E
+RTC.Read equ   4
+RTC.Zero equ   0
+RTC.One  equ   1
+ 
 type     set   prgrm+objct
 revs     set   reent+1
-edition  set   2
-
+edition  set   3
+ 
          mod   pgrmend,name,type,revs,start,size
-
+ 
 name     fcs   /SWRead/
          fcb   edition
-
+ 
 locblk0  rmb   2          pointer to block 0
 locblk3E rmb   2          pointer to block $3E ie. disk ROM
-dpsave   rmb   1
 sleep    rmb   1          sleep interval time in minutes
-byte1    rmb   1          temp storage of clock read data; if never changes - no clock
+byte1    rmb   1          clock read data; if no change - no clock
 clkflag  rmb   1          set when clock is found
 mpiimage rmb   1
 sleepflg rmb   1          indicates multiple reads requested
 timer    rmb   1          count down for sleep interval; per minute
 century  rmb   1          century flag
 rawdata  rmb   8          direct readout from clock chip
-
+relocimg rmb   300        place in data for relocated code
 stack    rmb   200
 size     equ   .
-
+ 
 message1 fcc   /no clock found/
          fcb   C$CR
+         IFNE  SETIME
 setime   fcc   /setime/   forced chain to setime routine
          fcb   C$CR
-
+         ENDC
+ 
+         IFNE  DOHELP
 errmes   fcb   C$LF
-         fcc   /Swread syntax:/
+         fcc   /SWRead syntax:/
          fcb   C$LF,C$LF
-         fcc   /swread [n&]/
+         fcc   /SWRead [n&]/
          fcb   C$LF
          fcc   /           The parameter string is optional; n = 1 to 60 min/
          fcb   C$LF
-         fcc   /           permitting the watch to be poled in background every/
+         fcc   /           permits watch to be polled in background every/
          fcb   C$LF
          fcc   /           n minutes. Use decimal time values./
          fcb   C$CR
-allert   fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,0
-
-start    clr   <sleepflg
+         ENDC
+errmes2  fcb   C$LF
+         fcc   /Don't have relocation memory./
+         fcb   C$LF,C$CR
+ 
+start    clr   sleepflg
          cmpd  #2
          blo   noparams
          ldd   ,x
          cmpa  #'?
-         lbeq  syntax
+         beq  syntax
          cmpa  #'-
-         lbeq  syntax
-
+         beq  syntax
+ 
          cmpb  #'0        if second byte is CR then only one number
          blo   onebyte
          subd  #$3030     convert from ascii to bcd
-
+ 
          cmpd  #$600      one hour skip is max
-         lbhi  syntax
+         bhi  syntax
          cmpb  #9         must be a number from 0-9
-         lbhi  syntax
-
+         bhi  syntax
+ 
          pshs  b          convert reg.D to hexidecimal
          ldb   #10
          mul   
          addb  ,s+
          bra   storeit
+ 
+syntax   
+         IFNE  DOHELP
+         lda   #2
+         leax  errmes,pcr
+         ldy   #300
+         os9   I$Writln
+         ENDC
+         clrb  
+         os9   F$Exit
 
 onebyte  suba  #'0
          cmpa  #9
-         lbhi  syntax
-
-storeit  stb   <timer
-         stb   <sleep     used to reset timer on count down
-         com   <sleepflg
-
+         bhi  syntax
+ 
+storeit  stb   timer
+         stb   sleep     used to reset timer on count down
+         com   sleepflg
+ 
 noparams equ   *
          lda   MPI.Slct
          anda  #3         retain IRQ settings
          ora   #$30       start at slot 4; ROM setting
-         sta   <mpiimage
-
+         sta   mpiimage
+ 
+         IFGT  Level-1
 doit     pshs  u
          ldb   #1         single block
-         ldx   #$3E       disk rom; $07C000-$07DFFF
+         ldx   #RTC.Blk       disk rom; $07C000-$07DFFF
          os9   F$MapBlk   map into user space clock ROM
          bcs   exit2
          stu   locblk3E   save pointer
          ldx   #0         system direct page
          os9   F$MapBlk   system direct page
          bcs   exit2
-         leax  ,u         faster but = to TFR; get pointer for system DP
          stu   locblk0    save pointer
-         tfr   dp,b       get our own DP
-         stb   dpsave
-
          bsr   readclk
-
-         ldb   #1         unmap blocks from user space
-         ldu   locblk3E   get pointer
-         os9   F$ClrBlk
-         ldb   #1
-         ldu   locblk0    get pointer
+         ldb   #1           block count
+         ldu   locblk3E
+         os9   F$ClrBlk     unmap the block
+         ldu   locblk0
          os9   F$ClrBlk
          puls  u
-
-         tst   <clkflag   was clock found?
+         ELSE
+         tfr   u,d
+         cmpa  #$7E
+         lbhs   noroom     the assigned DP is too close to ROM
+         ldx   #RTC.Base
+         stx   locblk3E
+         ldx   #0
+         stx   locblk0
+         leax  readclk,pcr
+         pshs  u
+         leau  relocimg,u
+         ldy   #endrel-readclk
+reloc    lda   ,x+        move the read routines to the data page
+         sta   ,u+
+         leay  -1,y
+         bne   reloc
+         puls  u
+doit     jsr   relocimg,u
+         ENDC
+ 
+         tst   clkflag   was clock found?
          beq   error2
-         tst   <sleepflg  are we in repeat mode?
+         tst   sleepflg  are we in repeat mode?
          beq   exit
-
+ 
 snooze   ldx   #3540      = one minute of ticks minus one second for overhead
          os9   F$Sleep
          cmpx  #0
          bne   exit       received signal so quit
-
+ 
          dec   timer
          bne   snooze
-
+ 
          lda   sleep      reset timer
          sta   timer
          bra   doit       go and read the clock
+ 
+exit2    puls u
+         bra  ex
 
-exit2    leas  2,s        puls u
-         coma             set cc
-         os9   F$Exit
 error    ldb   #E$IllArg
-         os9   F$Exit
-
+         bra   ex
+ 
 error2   lda   #2         error path
          leax  message1,pcr
          ldy   #40
          os9   I$WritLn
+         IFNE  SETIME
 * force a normal Setime as SmartWatch was not detected
          lda   #Prgrm+Objct  modul type
          ldb   #2         size of data area
          leax  setime,pcr
          ldy   #0         parameter size
-         leas  stack,u
-         leau  size,u
+*         leas  stack,u
          os9   F$Chain
-exit     clrb  
-         os9   F$exit
-
+         ENDC
+exit     equ   *
+         clrb  
+ex       os9   F$Exit
+ 
 * this is the heart of the clock reading routine
-* regX regU point to system direct page
+         
 readclk  pshs  cc
-         lda   d.hinit,x  get $FF90 image
+         IFGT  Level-1
+         lda   d.hinit,u  get $FF90 image
+         ENDC
          ldb   MPI.Slct   get current setting
          pshs  d          save them
+         IFGT  Level-1
          anda  #^(IEN+FEN+ROM1+ROM0) no GIME IRQ/FIRQ; external access
          orcc  #IntMasks  stop interrupts
          sta   $FF90
+         ELSE
+         orcc  #IntMasks  stop interrupts
+         ENDC
          sta   rom        go to ROM mode
-         ldx   <locblk3E  point to clock ROM
-         ldb   <mpiimage  get new value for MPI
-         clr   <clkflag   start with clock not found
-         lda   locblk3E
-         tfr   a,dp       point to clock
-
+         ldx   locblk3E  point to clock ROM
+         ldb   mpiimage  get new value for MPI
+         clr   clkflag   start with clock not found
+ 
 findclk  stb   MPI.Slct   set new slot
-         leay  allert,pcr point to clock wakeup code
-         lda   <4         clear clock at $C004
-         clrb  
-         bita  #1         1bit serial I/O port; if no clock, all bits should be 0 or 1
-         beq   low
-         comb  
-low      stb   >byte1     save as flag for found clock
-
+         leay  <alert,pcr point to clock wakeup code
+         lda   RTC.Read,x   clear clock at $C004
+* Reading clock fills a byte with bit0. If clock not present,
+* then result is either $00 or $FF. Any other test byte will
+* result in a false positive for finding the clock.
+         clrb
+         bita  #1
+         beq   f1
+         comb
+f1       stb   byte1     set initial value and look for change
+ 
 nxtbyte  ldb   #8         bits/byte
          lda   ,y+
          beq   gettime
 nxtbit   lsra             do a serial generation
          bcs   high
-         cmpa  <0         talk to clock at $C000; cmp faster than tst
+         cmpa  RTC.Zero,x   talk to clock at $C000; cmp faster than tst
          bra   high2
-high     cmpa  <1         talk to clock at $C001
+high     cmpa  RTC.One,x    talk to clock at $C001
 high2    decb  
          bne   nxtbit
          bra   nxtbyte
+ 
+* Code to tell swatch socket to switch from ROM to clock.
+alert   fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,0
 
 gettime  lda   #8         8 bytes to read from clock
          pshs  a
+         IFGT  Level-1
          ldy   #rawdata
+         ELSE
+         leay  rawdata,u
+         ENDC
 * read serial bit stream from clock
-timebyte lsr   <4
-         rora  
-         lsr   <4
-         rora  
-         lsr   <4
-         rora  
-         lsr   <4
+timebyte lsr   RTC.Read,x        this is faster than a short loop with dec/bne
          rora  
-         lsr   <4
-         rora  
-         lsr   <4
-         rora  
-         lsr   <4
-         rora  
-         lsr   <4
-         rora  
-         sta   ,y+        store in raw data	
-         cmpa  >byte1     if reg.A never changes then no clock
-         beq   maybe      always possible that a clock byte might look like ROM
-         inc   >clkflag   indicate a found clock
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         lsr   RTC.Read,x
+         rora
+         sta   ,y+        store in raw data
+         tst   clkflag    once clock found, bypass tests
+         bne   maybe
+         cmpa  byte1
+         beq   maybe      always possible a clock byte looks like ROM
+         inc   clkflag
 maybe    dec   ,s
          bne   timebyte
          leas  1,s        yank counter
-         tst   >clkflag   did we find the clock?
+         tst   clkflag
          bne   found
-         ldb   >mpiimage  try another MPI slot
+         ldb   mpiimage
          bitb  #$30       did we get to slot 0?
-         beq   found
+         beq   found      yes? then quick looking
          subb  #$10       next slot
-         stb   >mpiimage  save image so that we don't hunt the next time.
+         stb   mpiimage
          bra   findclk
 
-found    lda   >dpsave
-         tfr   a,dp       back to program DP
+noclk    rts 
+found    equ   *
          sta   ram        go back to RAM mode
          puls  d
          stb   MPI.Slct   restore to original setting
-         tst   cartI      clear CART flag incase autostart ROM pack was present in MPI
+         tst   cartI      clear CART flag for autostart ROM pack present in MPI
+         IFGT  Level-1
          sta   $FF90      restore GIME mode
+         ENDC
          puls  cc         restore IRQs
-         tst   <clkflag
+         tst   clkflag
          beq   noclk
+         IFGT  Level-1
          ldx   #rawdata
          leay  D.Slice,u
+         ELSE
+         leax  rawdata,u
+         ldy   #D.TSec    $5A
+         ENDC
          ldb   #8
          pshs  b
 trans    lda   ,x+        translate serial data into OS-9 format
@@ -279,19 +353,15 @@
          bne   notyr
          cmpa  #$80       binary coded decimal number
          bhi   nintn
-*	ldb	#20
-*	stb	D.Cntury,u
-         sta   <century
+         sta   century
          bra   notyr
-nintn          
-*	ldb	#19
-*	stb	D.Cntury,u
-         clr   <century
-*notyr	ldb	,s
+nintn    clr   century
 notyr    cmpb  #4         day of the week
          bne   notdywk
+         IFGT  Level-1
          anda  #7
          sta   D.Daywk,u
+         ENDC
          bra   nxtdata
 notdywk  cmpb  #5         special 12/24, AM/PM indicator
          bne   cnvrt      convert any number
@@ -299,7 +369,7 @@
          beq   cnvrt      24 hour time
          bita  #%00100000 AM/PM bit since 12 hour time, check AM/PM
          pshs  cc
-         anda  #%00011111 keep only time
+         anda  #%00011111 keep only time 1-12
          puls  cc
          bne   PMhr
          cmpa  #$12       bcd value
@@ -308,45 +378,34 @@
          bra   cnvrt
 Pmhr     cmpa  #$12       bcd value
          beq   cnvrt      12PM = 1200 24 hr time
-         adda  #$12       all other times (1-11) add 12; ie. 1300-2300
-cnvrt    tfr   a,b        return result in reg.B
-         anda  #%11110000 get MSN
-         lsra  
-         lsra  
-         sta   ,-s        save #4a
-         lsra  
-         sta   ,-s        save #2a
-         subb  ,s+        16a+b-4a
-         subb  ,s+        12a+b-2a=10a+b
+         adda  #$12       bcd value; other times (1-11) add 12; ie. 1300-2300
+cnvrt    clrb             convert BCD to binary
+a1       cmpa  #$10
+         bcs   a2
+         addd  #$f00a
+         bra   a1
+a2       pshs  a  
+         addb  ,s+
          stb   ,-y        decrease pointer and then store
 nxtdata  dec   ,s
          bne   trans
-         tst   <century
+         tst   century
          beq   not20
-         lda   #100
+         lda   #100       user convention for >1999 values
          adda  ,y
          sta   ,y
 not20    puls  b,pc
-
-noclk    clr   D.Daywk,u  clear garbage as new date routine reads D.Daywk
-         leay  D.Time,u
-         ldd   #7
-noclklp  sta   ,y+        clear clock packet; faster than a clr ,y+
-         decb  
-         bne   noclklp
-*	clr	D.Cntury,u
-         clr   <century
-         clr   <clkflag
-         rts   
-
-syntax   lda   #2
-         leax  errmes,pcr
-         ldy   #300
-         os9   I$Writln
-         clrb  
-         os9   F$Exit
+ 
+* This is the end of the code to be relocated.
+endrel   equ   *
+ 
+noroom   lda  #2
+         leax errmes2,pcr
+         ldy  #300
+         os9  I$WritLn
+         clrb
+         os9  F$Exit
 
          emod  
 pgrmend  equ   *
          end
-
--- a/3rdparty/utils/smartwatch/swset.asm	Fri Jul 30 02:33:35 2004 +0000
+++ b/3rdparty/utils/smartwatch/swset.asm	Fri Jul 30 23:49:50 2004 +0000
@@ -1,362 +1,405 @@
-********************************************************************
-* SWSet - Set time in SmartWatch
-*
-* $Id$
-*
-* Copyright May, 1990 by Robert Gault
-*
-* SWSET will set the smartwatch in either 12hr or 24hr mode
-* time will be sent to OS-9 in 24hr mode for compatability
-* see new DATE which presents time in 12hr. mode with day of week
-* and SWREAD which sends data from clock to OS-9
-*
-* Ed.    Comments                                       Who YY/MM/DD
-* ------------------------------------------------------------------
-* 1      Revised: clock disable; no relocation          RG  95/07/04
-
-         nam   SWSet
-         ttl   Set time in SmartWatch
-
-         ifp1  
-         use   defsfile
-         use   systype
-         endc  
-
-type     set   prgrm+objct
-revs     set   reent+1
-edition  set   1
-
-         mod   pgrmend,name,type,revs,start,size
-
-          
-locblk0  rmb   2          pointer to block 0
-locblk3E rmb   2          pointer to block $3E ie. disk ROM
-temp1    rmb   1
-temp2    rmb   1
-clkbyte  rmb   1
-clkflag  rmb   1
-mpiimage rmb   1
-alrtimag rmb   8          storage for the allert code with following:
-csec     rmb   1
-sec      rmb   1
-min      rmb   1
-hour     rmb   1
-daywk    rmb   1
-daymn    rmb   1
-month    rmb   1
-year     rmb   1
-stopbyte rmb   1
-rawdata  rmb   18
-stack    rmb   200
-size     equ   .
-
-rom      equ   $FFDE
-ram      equ   $FFDF
-cartI    equ   $FF22
-skp1     equ   $21
-skp2     equ   $8C        code for cmpx #nn
-
-name     fcs   /SWSet/
-         fcb   edition
-
-clknfnd  fcb   C$LF
-         fcc   /no clock found/
-         fcb   C$LF
-         fcc   /I'm running Setime/
-         fcb   C$CR
-setime   fcc   /setime/
-         fcb   C$CR
-swread   fcc   /swread/
-         fcb   C$CR
-
-query    lda   #1
-         os9   I$Writln
-         clra             path 0
-         leax  temp1,u    storage
-         ldy   #1
-         os9   I$Read
-         lda   temp1      get key
-         rts   
-
-start    leax  alrtimag,u point to image of allert code
-         ldb   #8
-         leay  allert,pcr
-s1loop   lda   ,y+        transfer to data
-         sta   ,x+
-         decb  
-         bne   s1loop
-         ldb   #8
-s2loop   clr   ,x+        clear out the time date data
-         decb  
-         bne   s2loop
-         dec   ,x         mark stop byte
-         lda   MPI.Slct
-         anda  #3         keep IRQ
-         ora   #$30       start with slot 4
-         sta   mpiimage   save setting
-         lda   #1
-         leax  crmesage,pcr copyright message
-         ldy   #mesage1-crmesage
-         os9   I$WritLn
-getfunc  leax  mesage1,pcr select	time or disable clock
-         ldy   #mesage2-mesage1
-         bsr   query
-         anda  #$DF
-         cmpa  #'D        disable
-         lbeq  killit
-         cmpa  #'T        timer
-         lbeq  doit
-         cmpa  #'C        clock
-         bne   getfunc
-getday   leax  mesage2,pcr
-         ldy   #mesage3-mesage2 get day of week
-         bsr   query
-         suba  #'0
-         blo   getday
-         cmpa  #7
-         bhi   getday
-         sta   daywk      convert from ascii to number
-tmode    leax  mesage3,pcr 12	or 24 hour time
-         ldy   #mesage4-mesage3
-         bsr   query
-         cmpa  #'1        error trap
-         blo   tmode
-         cmpa  #'2
-         bhi   tmode
-         beq   date
-         lda   #%10000000 12 hr bit
-         sta   hour
-getAMPM  leax  mesage4,pcr
-         ldy   #mesage5-mesage4
-         lbsr  query
-         clrb  
-         anda  #$df
-         cmpa  #'A
-         beq   AMPMcode
-         cmpa  #'P
-         bne   getAMPM
-         ldb   #%100000   PM bit
-AMPMcode orb   hour
-         stb   hour
-date     leax  mesage5,pcr get date and time
-         lda   #1
-         ldy   #endmes-mesage5
-         os9   I$Writln
-         clra  
-         leax  rawdata,u
-         ldy   #18
-         os9   I$ReadLn
-         leax  rawdata,u
-         clr   temp1
-         bsr   ascbcd
-         stb   year
-         bsr   ascbcd
-         stb   month
-         bsr   ascbcd
-         stb   daymn
-         bsr   ascbcd
-         tst   hour
-         beq   sthour
-         cmpb  #$12       max in 12 hour mode
-         bhi   date
-         orb   hour
-sthour   stb   hour
-         bsr   ascbcd
-         stb   min
-         bsr   ascbcd
-         stb   sec
-         bra   doit
-
-ascbcd   clr   temp2
-         bsr   data1
-         bne   noinfo
-         com   temp2
-         tfr   a,b
-         bsr   data1
-         bne   endasc
-         lslb  
-         lslb  
-         lslb  
-         lslb  
-         pshs  a
-         addb  ,s+
-         inca  
-endasc   rts   
-noinfo   leas  2,s
-         bra   doit
-
-data1    lda   ,x+
-         beq   nomore
-         cmpa  #C$CR
-         beq   nomore
-         cmpa  #C$SPAC
-         beq   data2
-         cmpa  #'/
-         beq   data2
-         cmpa  #':
-         beq   data2
-         suba  #'0
-         bcs   error
-         cmpa  #9
-         bhi   error
-         orcc  #Zero
-         rts   
-data2    tst   temp2
-         beq   data1
-         rts   
-nomore   com   temp1
-         rts   
-error    leas  4,s
-         lbra  date
-
-doit     pshs  u
-         ldb   #1
-         ldx   #$3E       disk rom
-         os9   f$mapblk
-         bcs   exit2
-         stu   locblk3E
-         ldx   #0
-         os9   f$mapblk
-         bcs   exit2
-         leax  ,u
-         stx   locblk0
-         ldu   ,s
-         bsr   reloc
-         ldb   #1
-         ldu   locblk3E
-         os9   f$clrblk
-         ldb   #1
-         ldu   locblk0
-         os9   f$clrblk
-         puls  u
-         tst   clkflag
-         bne   exit
-         lda   #2
-         leax  clknfnd,pcr
-         ldy   #40
-         os9   I$Writln
-         lda   #$11
-         ldb   #2
-         leax  setime,pcr
-         ldy   #0
-         leas  stack,u
-         leau  size,u
-         os9   F$Chain
-exit     lda   #$11
-         ldb   #2
-         leax  swread,pcr
-         ldy   #0
-         leas  stack,u
-         leau  size,u
-         os9   F$Chain
-exit2    leas  2,s
-         coma  
-         os9   F$Exit
-
-killit   lda   #C$SPAC
-         sta   daywk
-         bra   doit
-
-reloc    pshs  cc
-         lda   d.hinit,x  get $FF90 image
-         ldb   MPI.Slct
-         pshs  d
-         anda  #$CC       external disk rom access
-         orcc  #IntMasks
-         sta   $FF90      set for external ROM
-         sta   rom
-         ldx   locblk3E
-         ldb   mpiimage   get new value
-         clr   clkflag
-
-findclk  stb   MPI.Slct   set new slot
-         leay  allert,pcr
-         lda   4,x        clear clock
-         clrb  
-         bita  #1
-         beq   low
-         comb  
-low      stb   clkbyte
-         bsr   nxtbyte
-         bsr   gettime
-         tst   clkflag
-         bne   found
-         ldb   mpiimage
-         bitb  #$30       test for last try
-         beq   found
-         subb  #$10       next slot
-         stb   mpiimage
-         lbra  findclk
-
-nxtbyte  ldb   #8         bits/byte
-         lda   ,y+
-         cmpa  #-1
-         bne   nxtbit
-         rts   
-nxtbit   lsra  
-         bcs   high
-         cmpa  ,x         talk to clock; faster than tst
-         fcb   skp2
-high     cmpa  1,x
-         decb  
-         bne   nxtbit
-         bra   nxtbyte
-
-gettime  lda   #8         bytes to read
-         pshs  a
-timebyte ldb   #8
-timebit  lsr   4,x        read clock
-         rora  
-         decb  
-         bne   timebit
-         cmpa  clkbyte
-         beq   maybe
-         inc   clkflag
-maybe    dec   ,s
-         bne   timebyte
-         leas  1,s
-         rts   
-
-found    tst   clkflag
-         beq   noclk1
-         leay  alrtimag,u
-         lda   4,x
-         bsr   nxtbyte
-noclk1   sta   ram
-         puls  d
-         stb   MPI.Slct
-         tst   cartI
-         sta   $ff90
-         puls  cc,pc
-
-allert   fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,$ff
-crmesage fcb   C$LF
-         fcc   /Set Smartwatch/
-         fcb   C$LF
-         fcc   /(c) May, 1990 by Robert Gault/
-         fcb   C$LF
-         fcb   C$CR
-mesage1  fcc   /Select clock, timer, or disable/
-         fcb   C$LF
-         fcc   /<C>lock; <T>imer; <D>isable ->/
-mesage2  fcb   C$LF
-         fcc   /Enter the day 0-7; Mon=1 Sun=7/
-         fcb   C$LF
-         fcc   /day = ->?	/
-mesage3  fcb   C$LF
-         fcc   /Select 12 or 24 hour clock/
-         fcb   C$LF
-         fcc   /<1> = 12; <2> = 24  ->/
-mesage4  fcb   C$LF
-         fcc   /Select <A>M or <P>M ->/
-mesage5  fcb   C$LF
-         fcc   /Enter as much of the date & time as desired/
-         fcb   C$LF
-         fcc   !yy/mm/dd hh:mm:ss!
-         fcb   C$LF
-         fcc   /->/
-endmes   equ   *
-
-         emod  
-pgrmend  equ   *
-         end
+********************************************************************
+* SWSet - Set time in SmartWatch
+*
+* $Id$
+*
+* Copyright May, 1990 by Robert Gault
+*
+* SWSET will set the smartwatch in either 12hr or 24hr mode
+* time will be sent to OS-9 in 24hr mode for compatability
+* see new DATE which presents time in 12hr. mode with day of week
+* and SWREAD which sends data from clock to OS-9
+*
+* Ed.    Comments                                       Who YY/MM/DD
+* ------------------------------------------------------------------
+* 1      Revised: clock disable; no relocation          RG  95/07/04
+*        Revised to accommodate Level1 & Level2 so      RG  04/07/28
+*        relocation of code brought back.
+
+         nam   SWSet
+         ttl   Set time in SmartWatch
+
+         ifp1  
+         use   defsfile
+         use   systype
+         endc  
+
+type     set   prgrm+objct
+revs     set   reent+1
+edition  set   1
+
+         mod   pgrmend,name,type,revs,start,size
+
+          
+locblk0  rmb   2          pointer to block 0
+locblk3E rmb   2          pointer to block $3E ie. disk ROM
+temp1    rmb   1
+temp2    rmb   1
+clkbyte  rmb   1
+clkflag  rmb   1
+mpiimage rmb   1
+alrtimag rmb   8          storage for the alert code with following:
+csec     rmb   1
+sec      rmb   1
+min      rmb   1
+hour     rmb   1
+daywk    rmb   1
+daymn    rmb   1
+month    rmb   1
+year     rmb   1
+stopbyte rmb   1
+rawdata  rmb   18
+relocimg rmb   300
+stack    rmb   200
+size     equ   .
+
+rom      equ   $FFDE
+ram      equ   $FFDF
+cartI    equ   $FF22
+skp1     equ   $21
+skp2     equ   $8C        code for cmpx #nn
+
+name     fcs   /SWSet/
+         fcb   edition
+
+clknfnd  fcb   C$LF
+         fcc   /no clock found/
+         fcb   C$LF
+         fcc   /I'm running Setime/
+         fcb   C$CR
+setime   fcc   /setime/
+         fcb   C$CR
+swread   fcc   /swread/
+         fcb   C$CR
+
+query    lda   #1
+         os9   I$Writln
+         clra             path 0
+         leax  temp1,u    storage
+         ldy   #1
+         os9   I$Read
+         lda   temp1      get key
+         rts
+
+noroom   lda   #2
+         leax  mesroom,pcr
+         ldy   #50
+         os9   I$WritLn
+         clrb
+         os9   F$Exit   
+
+start    leax  alrtimag,u point to image of alert code
+         ldb   #8
+         leay  alert,pcr
+s1loop   lda   ,y+        transfer to data
+         sta   ,x+
+         decb  
+         bne   s1loop
+         ldb   #8
+s2loop   clr   ,x+        clear out the time date data
+         decb  
+         bne   s2loop
+         dec   ,x         mark stop byte
+         lda   MPI.Slct
+         anda  #3         keep IRQ
+         ora   #$30       start with slot 4
+         sta   mpiimage   save setting
+         lda   #1
+         leax  crmesage,pcr copyright message
+         ldy   #mesage1-crmesage
+         os9   I$WritLn
+getfunc  leax  mesage1,pcr select	time or disable clock
+         ldy   #mesage2-mesage1
+         bsr   query
+         anda  #$DF
+         cmpa  #'D        disable
+         lbeq  killit
+         cmpa  #'T        timer
+         lbeq  doit
+         cmpa  #'C        clock
+         bne   getfunc
+getday   leax  mesage2,pcr
+         ldy   #mesage3-mesage2 get day of week
+         bsr   query
+         suba  #'0
+         blo   getday
+         cmpa  #7
+         bhi   getday
+         sta   daywk      convert from ascii to number
+tmode    leax  mesage3,pcr 12	or 24 hour time
+         ldy   #mesage4-mesage3
+         bsr   query
+         cmpa  #'1        error trap
+         blo   tmode
+         cmpa  #'2
+         bhi   tmode
+         beq   date
+         lda   #%10000000 12 hr bit
+         sta   hour
+getAMPM  leax  mesage4,pcr
+         ldy   #mesage5-mesage4
+         lbsr  query
+         clrb  
+         anda  #$df
+         cmpa  #'A
+         beq   AMPMcode
+         cmpa  #'P
+         bne   getAMPM
+         ldb   #%100000   PM bit
+AMPMcode orb   hour
+         stb   hour
+date     leax  mesage5,pcr get date and time
+         lda   #1
+         ldy   #endmes-mesage5
+         os9   I$Writln
+         clra  
+         leax  rawdata,u
+         ldy   #18
+         os9   I$ReadLn
+         leax  rawdata,u
+         clr   temp1
+         bsr   ascbcd
+         stb   year
+         bsr   ascbcd
+         stb   month
+         bsr   ascbcd
+         stb   daymn
+         bsr   ascbcd
+         tst   hour
+         beq   sthour
+         cmpb  #$12       max in 12 hour mode
+         bhi   date
+         orb   hour
+sthour   stb   hour
+         bsr   ascbcd
+         stb   min
+         bsr   ascbcd
+         stb   sec
+         bra   doit
+
+ascbcd   clr   temp2
+         bsr   data1
+         bne   noinfo
+         com   temp2
+         tfr   a,b
+         bsr   data1
+         bne   endasc
+         lslb  
+         lslb  
+         lslb  
+         lslb  
+         pshs  a
+         addb  ,s+
+*        inca  
+endasc   rts   
+noinfo   leas  2,s
+         bra   doit
+
+data1    lda   ,x+
+         beq   nomore
+         cmpa  #C$CR
+         beq   nomore
+         cmpa  #C$SPAC
+         beq   data2
+         cmpa  #'/
+         beq   data2
+         cmpa  #':
+         beq   data2
+         suba  #'0
+         bcs   error
+         cmpa  #9
+         bhi   error
+         orcc  #Zero
+         rts   
+data2    tst   temp2
+         beq   data1
+         rts   
+nomore   com   temp1
+         rts   
+error    leas  4,s
+         lbra  date
+
+doit     equ   *
+         IFGT  Level-1
+         pshs  u
+         ldb   #1
+         ldx   #$3E       disk rom
+         os9   f$mapblk
+         bcs   exit2
+         stu   locblk3E
+         ldx   #0
+         os9   f$mapblk
+         bcs   exit2
+         leax  ,u
+         stx   locblk0
+         ldu   ,s
+         bsr   reloc
+         ldb   #1
+         ldu   locblk3E
+         os9   f$clrblk
+         ldb   #1
+         ldu   locblk0
+         os9   f$clrblk
+         puls  u
+         ELSE
+         tfr   u,d        look at the start of the program data page
+         cmpa  #$7E
+         lbhs  noroom
+         ldx   #RTC.Base
+         stx   locblk3E
+         ldx   #0
+         stx   locblk0
+         leax  reloc,pcr
+         pshs  u
+         leau  relocimg,u
+         ldy   #endrel-reloc
+rl       lda   ,x+
+         sta   ,u+
+         leay  -1,y
+         bne   rl
+         puls  u
+         jsr   relocimg,u
+         ENDC
+         tst   clkflag
+         bne   exit
+         lda   #2
+         leax  clknfnd,pcr
+         ldy   #40
+         os9   I$Writln
+         lda   #$11
+         ldb   #2
+         leax  setime,pcr
+         ldy   #0
+         leas  stack,u
+         leau  size,u
+         os9   F$Chain
+exit     lda   #$11
+         ldb   #2
+         leax  swread,pcr
+         ldy   #0
+         leas  stack,u
+         leau  size,u
+         os9   F$Chain
+exit2    leas  2,s
+         coma  
+         os9   F$Exit
+
+killit   lda   #C$SPAC
+         sta   daywk
+         bra   doit
+
+* regX points to system DP, regU points to program DP
+reloc    pshs  cc
+         IFGT  Level-1
+         lda   d.hinit,x  get $FF90 image
+         ENDC
+         ldb   MPI.Slct
+         pshs  d
+         IFGT  Level-1
+         anda  #$CC       external disk rom access
+         ENDC
+         orcc  #IntMasks
+         IFGT  Level-1
+         sta   $FF90      set for external ROM
+         ENDC
+         sta   rom
+         ldx   locblk3E
+         ldb   mpiimage   get new value
+         clr   clkflag
+
+findclk  stb   MPI.Slct   set new slot
+         leay  alert,pcr
+         lda   4,x        clear clock
+         clrb  
+         bita  #1
+         beq   low
+         comb  
+low      stb   clkbyte
+         bsr   nxtbyte
+         bsr   gettime
+         tst   clkflag
+         bne   found
+         ldb   mpiimage
+         bitb  #$30       test for last try
+         beq   found
+         subb  #$10       next slot
+         stb   mpiimage
+         lbra  findclk
+
+nxtbyte  ldb   #8         bits/byte
+         lda   ,y+
+         cmpa  #-1
+         bne   nxtbit
+         rts   
+nxtbit   lsra  
+         bcs   high
+         cmpa  ,x         talk to clock; faster than tst
+         fcb   skp2
+high     cmpa  1,x
+         decb  
+         bne   nxtbit
+         bra   nxtbyte
+
+gettime  lda   #8         bytes to read
+         pshs  a
+timebyte ldb   #8
+timebit  lsr   4,x        read clock
+         rora  
+         decb  
+         bne   timebit
+         cmpa  clkbyte
+         beq   maybe
+         inc   clkflag
+maybe    dec   ,s
+         bne   timebyte
+         leas  1,s
+         rts   
+
+found    tst   clkflag
+         beq   noclk1
+         leay  alrtimag,u
+         lda   4,x
+         bsr   nxtbyte
+noclk1   sta   ram
+         puls  d
+         stb   MPI.Slct
+         tst   cartI
+         sta   $ff90
+         puls  cc,pc
+
+alert    fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,$ff
+endrel   equ   *
+
+mesroom  fcb   C$LF
+         fcc   /Don't have relocation memory!/
+         fcb   C$CR
+crmesage fcb   C$LF
+         fcc   /Set Smartwatch/
+         fcb   C$LF
+         fcc   /(c) May, 1990 by Robert Gault/
+         fcb   C$LF
+         fcb   C$CR
+mesage1  fcc   /Select clock, timer, or disable/
+         fcb   C$LF
+         fcc   /<C>lock; <T>imer; <D>isable ->/
+mesage2  fcb   C$LF
+         fcc   /Enter the day 0-7; Mon=1 Sun=7/
+         fcb   C$LF
+         fcc   /day = ->?	/
+mesage3  fcb   C$LF
+         fcc   /Select 12 or 24 hour clock/
+         fcb   C$LF
+         fcc   /<1> = 12; <2> = 24  ->/
+mesage4  fcb   C$LF
+         fcc   /Select <A>M or <P>M ->/
+mesage5  fcb   C$LF
+         fcc   /Enter as much of the date & time as desired/
+         fcb   C$LF
+         fcc   !yy/mm/dd hh:mm:ss!
+         fcb   C$LF
+         fcc   /->/
+endmes   equ   *
+
+         emod  
+pgrmend  equ   *
+         end
--- a/defs/os9defs	Fri Jul 30 02:33:35 2004 +0000
+++ b/defs/os9defs	Fri Jul 30 23:49:50 2004 +0000
@@ -399,6 +399,7 @@
          org   $00
 D.WDAddr rmb   2          FHL/Isted WD1002-05 interface base address
 D.WDBtDr rmb   1          FHL/Isted WD1002-05 boot physical device drive num.
+D.SWPage rmb   1          SmartWatch page # (see clock2_smart)
          rmb   5
 D.COCOXT rmb   1          Busy flag for CoCo-XT driver (one drive at a time)
 
@@ -476,6 +477,7 @@
          org   $00
 D.WDAddr rmb   2          FHL/Isted WD1002-05 interface base address
 D.WDBtDr rmb   1          FHL/Isted WD1002-05 boot physical device drive num.
+D.SWPage rmb   1          SmartWatch page # (see clock2_smart)
          rmb   5
 D.COCOXT rmb   1          Busy flag for CoCo-XT driver (one drive at a time)
 
--- a/defs/releasedefs	Fri Jul 30 02:33:35 2004 +0000
+++ b/defs/releasedefs	Fri Jul 30 23:49:50 2004 +0000
@@ -7,4 +7,4 @@
 NOS9Minor equ   3
 * If DEVEL is 1, then sysgo shows that a development
 * version is being run.
-DEVEL     equ   1
+DEVEL     equ   0
Binary file docs/Getting Started With NitrOS-9.doc has changed
--- a/level1/ChangeLog	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/ChangeLog	Fri Jul 30 23:49:50 2004 +0000
@@ -1,6 +1,4 @@
 NitrOS-9/6309 Level 2 V03.02.03:
-- swread and swset have been added as command line utilities for SmartWatch
-  support, as the clock2 SmartWatch module does not work.
 - format has been enhanced to show more information about the disk being
   formatted.
 - dirm has been removed from the commands list.
--- a/level1/cmds/format.asm	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/cmds/format.asm	Fri Jul 30 23:49:50 2004 +0000
@@ -52,13 +52,12 @@
 currtrak rmb   2                current track on
 currside rmb   2
 currsect rmb   1                current sector on
-sectcount rmb   1                counted sectors
-u0009    rmb   1
-u000A    rmb   2
+sectcount rmb  2                counted sectors
+sectdata rmb   2		sector data pointer
 u000C    rmb   2
 u000E    rmb   2
 mfm      rmb   1                denisity (double/single)
-u0011    rmb   1
+maxdns   rmb   1
 tpi      rmb   1
 numsides rmb   1
 *u0014    rmb   1
@@ -80,7 +79,7 @@
 ClustSz  rmb   1                cluster size
 u0029    rmb   1
 u002A    rmb   1
-u002B    rmb   1
+clustcnt rmb   1
 u002C    rmb   1
 u002D    rmb   1
 u002E    rmb   1
@@ -259,7 +258,7 @@
          pshs  b                save it
          andb  #DNS.MFM         check double-density
          stb   <mfm             save double-density (Yes/No)
-         stb   <u0011           save it again
+         stb   <maxdns          save it again
          ldb   ,s               get saved PD.DNS byte
          lsrb                   checking
          pshs  b                save it
@@ -267,7 +266,7 @@
          stb   <tpi             save it
          puls  b                get checking
          lsrb                   
-         andb  <u0011
+         andb  <maxdns
          stb   <u004C
          puls  b
          stb   <u004D
@@ -418,8 +417,8 @@
 * S/D - density; single or double
 ********************************************************************
 
-DoDsity  cmpb  <u0011
-         bgt   OptAbort
+DoDsity  cmpb  <maxdns		compare against maximum
+         bgt   OptAbort		if greater than, abort
          cmpb  <u004C
          blt   OptAbort
          stb   <mfm
@@ -634,7 +633,7 @@
 ********************************************************************
 
 GetDTyp  leax  >hdsdat,pcr      assume hard drive data for now
-         stx   <u000A           sector data pointer
+         stx   <sectdata        sector data pointer
          ldb   <dtype           get disk drive type
          bitb  #TYP.HARD+TYP.NSF hard disk or non-standard type?
          bne   L0323            no, check track data
@@ -645,11 +644,11 @@
 L031B    leax  >sgtdat,pcr
          tst   <mfm             double-density?
          beq   L032D            no,
-L0323    stx   <u000A
+L0323    stx   <sectdata
          leax  >dbtdat,pcr
          tst   <u004C
          beq   L032F
-L032D    stx   <u000A
+L032D    stx   <sectdata
 L032F    stx   <u000C
          tst   <sectmode	LBA values already in place?
          beq   ack@
@@ -861,18 +860,18 @@
          bne   L047E
          tst   <currside
          bne   L047E
-         ldy   <u000A
+         ldy   <sectdata
 *         ldb   <u001C
          ldb   <sectors0+1
 L047E    sty   <u000E
-         stb   <u0009
+         stb   <sectcount+1
          stb   <u0018
          bsr   L04EC
          leax  >LSN0,u
          bsr   L0451
          sty   <u000E
 L0490    bsr   L044E
-         dec   <u0009
+         dec   <sectcount+1
          bne   L0490
          lda   ,y+
          sty   <u000E
@@ -888,7 +887,7 @@
          std   <u003F
          ldd   ,y
          std   <u0041
-         clr   <u0009
+         clr   <sectcount+1
          leax  >LSN0,u
          ldd   <u003F
          leay  >u008F,u
@@ -896,15 +895,15 @@
          ldd   <currtrak+1
          adda  <stoff
          std   ,x
-         ldb   <u0009
+         ldb   <sectcount+1
          lda   b,y
          incb  
-         stb   <u0009
+         stb   <sectcount+1
          ldb   <currsect
          adda  <u004B
          bcs   L04E5
          std   $02,x
-         lda   <u0009
+         lda   <sectcount+1
          cmpa  <u0018
          bcc   L04E4
          ldd   <u0041
@@ -1101,7 +1100,7 @@
          clrb  
          sta   <oksects		clear OK sectors
          std   <oksects+1
-         std   <currtrak	clear current rack
+         std   <currtrak	clear current track
          std   <sectcount	clear counted sectors
          std   <u0032
          stb   <u0031
@@ -1109,13 +1108,13 @@
          leax  >optbuf,u
          stx   <u0038
          lbsr  ClrSec
-         leax  >$0100,x
+         leax  256,x
          stx   <u003A
          clra  
          ldb   #$01		D = 1
          std   <u0034
          lda   <clustsiz        get cluster size
-         sta   <u002B           store in cluster counter
+         sta   <clustcnt        store in cluster counter
          clr   <u002A
          clra  
          ldb   <ClustSz
@@ -1177,7 +1176,7 @@
          cmpd  <u0017           good sector count?
          bcs   L0745            next segment
          clr   <sectcount       clear counted sectors
-         clr   <u0009           
+         clr   <sectcount+1           
          tst   <dovfy           are we verifying?
          bne   L073A            no,
          lda   #C$SPAC          yes, get space
@@ -1201,7 +1200,7 @@
          std   <currtrak        save it back
          ldd   <sectors         get number of sectors
          std   <u0017           save it
-L0745    dec   <u002B           decrement cluster counter
+L0745    dec   <clustcnt        decrement cluster counter
          bne   L075B
          bsr   L0784
          tst   <u002A
@@ -1213,7 +1212,7 @@
          inc   <oksects
 L0755    clr   <u002A
          lda   <clustsiz        get cluster size
-         sta   <u002B           save in cluster counter
+         sta   <clustcnt        save in cluster counter
 L075B    ldb   <u0031
          ldx   <u0032
          leax  $01,x
@@ -1562,7 +1561,7 @@
 Query
 *         fcc   "y (yes) or n (no)"
 *         fcb   C$LF
-         fcc   "proceed?  "
+         fcc   "Ready?  "
 QueryLen equ   *-Query
 CapErr   fcc   "ABORT can't get media capacity"
          fcb   C$CR
--- a/level1/cmds/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/cmds/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -11,7 +11,7 @@
 		free grfo help ident iniz irqs link list load login makdir \
 		megaread mdir merge mfree mpi os9gen padrom park prompt printerr procs pwd pxd \
 		rename runb save setime shellplus shell_21 sleep \
-		swread tee tmode touch tsmon tuneport unlink verify xmode
+		tee tmode touch tsmon tuneport unlink verify xmode
 SUBS		= gfx inkey syscall
 ALLOBJS		= $(CMDS) $(DRAGONCMDS) $(SUBS)
 
--- a/level1/cmds/swread.asm	Fri Jul 30 02:33:35 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-********************************************************************
-* SWRead - Read SmartWatch clock
-*
-* $Id$
-*
-* Copyright May, 1990 by Robert Gault
- 
-* SWREAD will read smartwatch compensating for 12hr mode if active
-* time will be sent to OS-9 in 24hr mode for compatability
-*
-* The routine does grab a large uninterruptible block of time from
-* the system, but no other way seems possible.
-*
-* syntax  swread [n&]      n=1-60 minutes
-* D.Daywk stored for possible use
-*
-* Ed.    Comments                                       Who YY/MM/DD
-* ------------------------------------------------------------------
-* 1      Created                                        RG  91/03/01
-* 1      Changed irq handling; MPI handling;            RG  91/10/29
-*        error handling
-* 1      Removed relocation routine. Removal could be   RG  92/12/26
-*        dangerous if OS-9 did not grab block from the
-*        low addresses first. Code must not be in a
-*        RAM/ROM block when ROMs activated.
-* 2      Relocated part of clock read routine to        RG  94/12/19
-*        shorten the time spent with irqs off.
-* 3      Adapted module for Level-1 use. Trimmed code.  RG  04/07/24
-*        Forced to add back the relocation loop for Level-1.
-*        Attempted to write a clock2 modules but just too
-*        difficult to acquire needed system low ram.
-*        Removed 6309 code for consistency as it had
-*        little effect on speed or size.
-*        Switched from Chain to Setime to Fork.
- 
-         nam   SWRead
-         ttl   Read SmartWatch clock
- 
-         ifp1  
-         use   defsfile
-         endc  
-
-DOHELP   equ   0
-SETIME   equ   0
-
-* Next three lines for testing purposes. Remove as makefile will
-* handle this choice.
-*Level    equ   1
-*Level    equ   2
-*D.TSec    equ   $5A
-
-cartI    equ   $FF22      cartridge IRQ report
-MPI.Slct equ   $FF7F
-rom      equ   $FFDE
-ram      equ   $FFDF
-IEN      equ   %00100000
-FEN      equ   %00010000
-SCS      equ   %00000100
-ROM1     equ   %00000010
-ROM0     equ   %00000001
-RTC.Base equ   $C000
-RTC.Blk  equ   $3E
-RTC.Read equ   4
-RTC.Zero equ   0
-RTC.One  equ   1
- 
-type     set   prgrm+objct
-revs     set   reent+1
-edition  set   3
- 
-         mod   pgrmend,name,type,revs,start,size
- 
-name     fcs   /SWRead/
-         fcb   edition
- 
-locblk0  rmb   2          pointer to block 0
-locblk3E rmb   2          pointer to block $3E ie. disk ROM
-sleep    rmb   1          sleep interval time in minutes
-byte1    rmb   1          clock read data; if no change - no clock
-clkflag  rmb   1          set when clock is found
-mpiimage rmb   1
-sleepflg rmb   1          indicates multiple reads requested
-timer    rmb   1          count down for sleep interval; per minute
-century  rmb   1          century flag
-rawdata  rmb   8          direct readout from clock chip
-relocimg rmb   300        place in data for relocated code
-stack    rmb   200
-size     equ   .
- 
-message1 fcc   /no clock found/
-         fcb   C$CR
-         IFNE  SETIME
-setime   fcc   /setime/   forced chain to setime routine
-         fcb   C$CR
-         ENDC
- 
-         IFNE  DOHELP
-errmes   fcb   C$LF
-         fcc   /SWRead syntax:/
-         fcb   C$LF,C$LF
-         fcc   /SWRead [n&]/
-         fcb   C$LF
-         fcc   /           The parameter string is optional; n = 1 to 60 min/
-         fcb   C$LF
-         fcc   /           permits watch to be polled in background every/
-         fcb   C$LF
-         fcc   /           n minutes. Use decimal time values./
-         fcb   C$CR
-         ENDC
-errmes2  fcb   C$LF
-         fcc   /Don't have relocation memory./
-         fcb   C$LF,C$CR
- 
-start    clr   sleepflg
-         cmpd  #2
-         blo   noparams
-         ldd   ,x
-         cmpa  #'?
-         beq  syntax
-         cmpa  #'-
-         beq  syntax
- 
-         cmpb  #'0        if second byte is CR then only one number
-         blo   onebyte
-         subd  #$3030     convert from ascii to bcd
- 
-         cmpd  #$600      one hour skip is max
-         bhi  syntax
-         cmpb  #9         must be a number from 0-9
-         bhi  syntax
- 
-         pshs  b          convert reg.D to hexidecimal
-         ldb   #10
-         mul   
-         addb  ,s+
-         bra   storeit
- 
-syntax   
-         IFNE  DOHELP
-         lda   #2
-         leax  errmes,pcr
-         ldy   #300
-         os9   I$Writln
-         ENDC
-         clrb  
-         os9   F$Exit
-
-onebyte  suba  #'0
-         cmpa  #9
-         bhi  syntax
- 
-storeit  stb   timer
-         stb   sleep     used to reset timer on count down
-         com   sleepflg
- 
-noparams equ   *
-         lda   MPI.Slct
-         anda  #3         retain IRQ settings
-         ora   #$30       start at slot 4; ROM setting
-         sta   mpiimage
- 
-         IFGT  Level-1
-doit     pshs  u
-         ldb   #1         single block
-         ldx   #RTC.Blk       disk rom; $07C000-$07DFFF
-         os9   F$MapBlk   map into user space clock ROM
-         bcs   exit2
-         stu   locblk3E   save pointer
-         ldx   #0         system direct page
-         os9   F$MapBlk   system direct page
-         bcs   exit2
-         stu   locblk0    save pointer
-         bsr   readclk
-         ldb   #1           block count
-         ldu   locblk3E
-         os9   F$ClrBlk     unmap the block
-         ldu   locblk0
-         os9   F$ClrBlk
-         puls  u
-         ELSE
-         tfr   u,d
-         cmpa  #$7E
-         lbhs   noroom     the assigned DP is too close to ROM
-         ldx   #RTC.Base
-         stx   locblk3E
-         ldx   #0
-         stx   locblk0
-         leax  readclk,pcr
-         pshs  u
-         leau  relocimg,u
-         ldy   #endrel-readclk
-reloc    lda   ,x+        move the read routines to the data page
-         sta   ,u+
-         leay  -1,y
-         bne   reloc
-         puls  u
-doit     jsr   relocimg,u
-         ENDC
- 
-         tst   clkflag   was clock found?
-         beq   error2
-         tst   sleepflg  are we in repeat mode?
-         beq   exit
- 
-snooze   ldx   #3540      = one minute of ticks minus one second for overhead
-         os9   F$Sleep
-         cmpx  #0
-         bne   exit       received signal so quit
- 
-         dec   timer
-         bne   snooze
- 
-         lda   sleep      reset timer
-         sta   timer
-         bra   doit       go and read the clock
- 
-exit2    puls u
-         bra  ex
-
-error    ldb   #E$IllArg
-         bra   ex
- 
-error2   lda   #2         error path
-         leax  message1,pcr
-         ldy   #40
-         os9   I$WritLn
-         IFNE  SETIME
-* force a normal Setime as SmartWatch was not detected
-         lda   #Prgrm+Objct  modul type
-         ldb   #2         size of data area
-         leax  setime,pcr
-         ldy   #0         parameter size
-*         leas  stack,u
-         os9   F$Chain
-         ENDC
-exit     equ   *
-         clrb  
-ex       os9   F$Exit
- 
-* this is the heart of the clock reading routine
-         
-readclk  pshs  cc
-         IFGT  Level-1
-         lda   d.hinit,u  get $FF90 image
-         ENDC
-         ldb   MPI.Slct   get current setting
-         pshs  d          save them
-         IFGT  Level-1
-         anda  #^(IEN+FEN+ROM1+ROM0) no GIME IRQ/FIRQ; external access
-         orcc  #IntMasks  stop interrupts
-         sta   $FF90
-         ELSE
-         orcc  #IntMasks  stop interrupts
-         ENDC
-         sta   rom        go to ROM mode
-         ldx   locblk3E  point to clock ROM
-         ldb   mpiimage  get new value for MPI
-         clr   clkflag   start with clock not found
- 
-findclk  stb   MPI.Slct   set new slot
-         leay  <alert,pcr point to clock wakeup code
-         lda   RTC.Read,x   clear clock at $C004
-* Reading clock fills a byte with bit0. If clock not present,
-* then result is either $00 or $FF. Any other test byte will
-* result in a false positive for finding the clock.
-         clrb
-         bita  #1
-         beq   f1
-         comb
-f1       stb   byte1     set initial value and look for change
- 
-nxtbyte  ldb   #8         bits/byte
-         lda   ,y+
-         beq   gettime
-nxtbit   lsra             do a serial generation
-         bcs   high
-         cmpa  RTC.Zero,x   talk to clock at $C000; cmp faster than tst
-         bra   high2
-high     cmpa  RTC.One,x    talk to clock at $C001
-high2    decb  
-         bne   nxtbit
-         bra   nxtbyte
- 
-* Code to tell swatch socket to switch from ROM to clock.
-alert   fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,0
-
-gettime  lda   #8         8 bytes to read from clock
-         pshs  a
-         IFGT  Level-1
-         ldy   #rawdata
-         ELSE
-         leay  rawdata,u
-         ENDC
-* read serial bit stream from clock
-timebyte lsr   RTC.Read,x        this is faster than a short loop with dec/bne
-         rora  
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         lsr   RTC.Read,x
-         rora
-         sta   ,y+        store in raw data
-         tst   clkflag    once clock found, bypass tests
-         bne   maybe
-         cmpa  byte1
-         beq   maybe      always possible a clock byte looks like ROM
-         inc   clkflag
-maybe    dec   ,s
-         bne   timebyte
-         leas  1,s        yank counter
-         tst   clkflag
-         bne   found
-         ldb   mpiimage
-         bitb  #$30       did we get to slot 0?
-         beq   found      yes? then quick looking
-         subb  #$10       next slot
-         stb   mpiimage
-         bra   findclk
-
-noclk    rts 
-found    equ   *
-         sta   ram        go back to RAM mode
-         puls  d
-         stb   MPI.Slct   restore to original setting
-         tst   cartI      clear CART flag for autostart ROM pack present in MPI
-         IFGT  Level-1
-         sta   $FF90      restore GIME mode
-         ENDC
-         puls  cc         restore IRQs
-         tst   clkflag
-         beq   noclk
-         IFGT  Level-1
-         ldx   #rawdata
-         leay  D.Slice,u
-         ELSE
-         leax  rawdata,u
-         ldy   #D.TSec    $5A
-         ENDC
-         ldb   #8
-         pshs  b
-trans    lda   ,x+        translate serial data into OS-9 format
-         ldb   ,s
-         cmpb  #1         year
-         bne   notyr
-         cmpa  #$80       binary coded decimal number
-         bhi   nintn
-         sta   century
-         bra   notyr
-nintn    clr   century
-notyr    cmpb  #4         day of the week
-         bne   notdywk
-         IFGT  Level-1
-         anda  #7
-         sta   D.Daywk,u
-         ENDC
-         bra   nxtdata
-notdywk  cmpb  #5         special 12/24, AM/PM indicator
-         bne   cnvrt      convert any number
-         bita  #%10000000 12/24 hour bit
-         beq   cnvrt      24 hour time
-         bita  #%00100000 AM/PM bit since 12 hour time, check AM/PM
-         pshs  cc
-         anda  #%00011111 keep only time 1-12
-         puls  cc
-         bne   PMhr
-         cmpa  #$12       bcd value
-         bne   cnvrt
-         clra             12 AM = 0 hrs 24hr time
-         bra   cnvrt
-Pmhr     cmpa  #$12       bcd value
-         beq   cnvrt      12PM = 1200 24 hr time
-         adda  #$12       bcd value; other times (1-11) add 12; ie. 1300-2300
-cnvrt    clrb             convert BCD to binary
-a1       cmpa  #$10
-         bcs   a2
-         addd  #$f00a
-         bra   a1
-a2       pshs  a  
-         addb  ,s+
-         stb   ,-y        decrease pointer and then store
-nxtdata  dec   ,s
-         bne   trans
-         tst   century
-         beq   not20
-         lda   #100       user convention for >1999 values
-         adda  ,y
-         sta   ,y
-not20    puls  b,pc
- 
-* This is the end of the code to be relocated.
-endrel   equ   *
- 
-noroom   lda  #2
-         leax errmes2,pcr
-         ldy  #300
-         os9  I$WritLn
-         clrb
-         os9  F$Exit
-
-         emod  
-pgrmend  equ   *
-         end
--- a/level1/modules/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/modules/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -1,14 +1,15 @@
 include ../../rules.mak
 
-CLOCKELIM       = -aRTCElim=1 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKDISTO2     = -aRTCElim=0 -aRTCDsto2=1 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKDISTO4     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=1 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKBNB        = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=1 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKHARRIS     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=1 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKCLOUD9     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=1 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKJVEMU      = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=1 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKMESSEMU    = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=1 -aMPIFlag=0
-CLOCKSOFT       = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=1 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
+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
@@ -20,7 +21,7 @@
 SYSMODS		= ioman init sysgo_dd sysgo_h0
 CLOCKS          = clock_60hz clock_50hz \
 		clock2_elim clock2_disto2 clock2_disto4 clock2_bnb \
-                clock2_harris clock2_cloud9 clock2_soft \
+                clock2_smart clock2_harris clock2_cloud9 clock2_soft \
 		clock2_messemu clock2_jvemu
 
 RBF		= rbf.mn \
@@ -82,6 +83,9 @@
 clock2_bnb: clock2.asm
 	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKBNB)
 
+clock2_smart: clock2.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKSMART)
+
 clock2_harris: clock2.asm
 	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKHARRIS)
 
--- a/level1/modules/sysgo.asm	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/modules/sysgo.asm	Fri Jul 30 23:49:50 2004 +0000
@@ -78,7 +78,7 @@
          IFNE  DEVEL
          dts
          ELSE
-         fcc   "September 1, 2004"
+         fcc   "Release Date: 08/01/2004"
          ENDC
          fcb   C$CR,C$LF
          fcc   !http://www.nitros9.org!
--- a/level1/sys/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level1/sys/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -13,7 +13,7 @@
 		mdir.hp merge.hp mfree.hp os9gen.hp \
 		padrom.hp park.hp procs.hp prompt.hp pwd.hp pxd.hp \
 	 	rename.hp save.hp setime.hp \
-		setpr.hp shell.hp sleep.hp tee.hp tmode.hp touch.hp tsmon.hp \
+		setpr.hp shell.hp sleep.hp swread.hp tee.hp tmode.hp touch.hp tsmon.hp \
 		tuneport.hp unlink.hp verify.hp xmode.hp
 HELPMSG		= helpmsg
 ALLOBJS		= $(SYSFILES) $(HELPMSG)
--- a/level2/cmds/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/cmds/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -10,7 +10,7 @@
 		format free grfdrv help ident iniz irqs link list load login \
 		makdir mdir megaread merge mfree mmap modpatch montype mpi os9gen padrom park \
 		prompt pmap proc procs pwd pxd reboot rename runb save setime \
-		shell_21 sleep smap swread tee tmode touch \
+		shell_21 sleep smap tee tmode touch \
 		tsmon tuneport unlink verify wcreate xmode
 SUBS            = gfx2 gfx inkey syscall
 
--- a/level2/coco3/ChangeLog	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/coco3/ChangeLog	Fri Jul 30 23:49:50 2004 +0000
@@ -1,6 +1,4 @@
 NitrOS-9/6309 Level 2 V03.02.03:
-- swread and swset have been added as command line utilities for SmartWatch
-  support, as the clock2 SmartWatch module does not work.
 - format has been enhanced to show more information about the disk being
   formatted.
 - dirm has been removed from the commands list.
@@ -8,6 +6,7 @@
 - tmode now uses the new xmode format for parameters.
 - disasm has a new -s option which is used to specify the start and end
   addresses to disassemble within a module.
+- An RBF bug that was introduced in V03.02.02 has been fixed.
 - A bug in the clock2_jvemu module has been fixed.
 
 NitrOS-9/6809 Level 2 V03.02.02:
--- a/level2/coco3_6309/ChangeLog	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/coco3_6309/ChangeLog	Fri Jul 30 23:49:50 2004 +0000
@@ -1,6 +1,4 @@
 NitrOS-9/6309 Level 2 V03.02.03:
-- swread and swset have been added as command line utilities for SmartWatch
-  support, as the clock2 SmartWatch module does not work.
 - format has been enhanced to show more information about the disk being
   formatted.
 - dirm has been removed from the commands list.
@@ -8,6 +6,7 @@
 - tmode now uses the new xmode format for parameters.
 - disasm has a new -s option which is used to specify the start and end
   addresses to disassemble within a module.
+- An RBF bug that was introduced in V03.02.02 has been fixed.
 - A bug in the clock2_jvemu module has been fixed.
 
 NitrOS-9/6809 Level 2 V03.02.02:
--- a/level2/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -2,7 +2,7 @@
 
 CPU		= 6809
 DISTRO		= $(CPU)L2
-RELEASE		= nos9$(CPU)l2v030202
+RELEASE		= nos9$(CPU)l2v030203
 BOOTFILE	= bootfiles/bootfile_win80
 BOOTFILE_DS80	= bootfiles/bootfile_win80_ds80
 KERNELFILE	= bootfiles/kernel_1773
--- a/level2/modules/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/modules/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -2,15 +2,16 @@
 
 vpath %.asm kernel:$(6809L1)/modules
 
-CLOCKELIM       = -aRTCElim=1 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKDISTO2     = -aRTCElim=0 -aRTCDsto2=1 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKDISTO4     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=1 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKBNB        = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=1 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKHARRIS     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=1 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKCLOUD9     = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=1 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKJVEMU      = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=1 -aRTCMESSEmu=0 -aMPIFlag=0
-CLOCKMESSEMU    = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=0 -aRTCJVEmu=0 -aRTCMESSEmu=1 -aMPIFlag=0
-CLOCKSOFT       = -aRTCElim=0 -aRTCDsto2=0 -aRTCDsto4=0 -aRTCBB=0 -aRTCHarrs=0 -aRTCCloud9=0 -aRTCSoft=1 -aRTCJVEmu=0 -aRTCMESSEmu=0 -aMPIFlag=0
+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
@@ -22,7 +23,7 @@
 SYSMODS		= ioman init sysgo_h0 sysgo_dd
 CLOCKS          = clock_60hz clock_50hz \
 		clock2_elim clock2_disto2 clock2_disto4 clock2_bnb \
-		clock2_harris clock2_cloud9 clock2_soft \
+		clock2_smart clock2_harris clock2_cloud9 clock2_soft \
 		clock2_jvemu clock2_messemu
 
 RBF		= rbf.mn \
@@ -199,6 +200,9 @@
 clock2_bnb: clock2.asm
 	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKBNB)
 
+clock2_smart: clock2.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKSMART)
+
 clock2_harris: clock2.asm
 	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKHARRIS)
 
--- a/level2/sys/makefile	Fri Jul 30 02:33:35 2004 +0000
+++ b/level2/sys/makefile	Fri Jul 30 23:49:50 2004 +0000
@@ -24,7 +24,7 @@
 		montype.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 \
+		save.hp setime.hp setpr.hp shell.hp sleep.hp smap.hp swread.hp \
 		tee.hp tmode.hp touch.hp tsmon.hp tuneport.hp \
 		unlink.hp \
 		verify.hp \