changeset 1724:f389c6bca482

New clock2_*.asm files split from single clock2.asm for more source clarity
author boisy
date Fri, 20 Aug 2004 11:11:58 +0000
parents 00d6e3a47987
children 93328dc6e3f4
files level1/modules/clock2_disto2.asm level1/modules/clock2_disto4.asm level1/modules/clock2_ds1315.asm level1/modules/clock2_elim.asm level1/modules/clock2_harris.asm level1/modules/clock2_jvemu.asm level1/modules/clock2_messemu.asm level1/modules/clock2_smart.asm level1/modules/clock2_soft.asm level1/modules/makefile
diffstat 10 files changed, 1427 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_disto2.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,137 @@
+********************************************************************
+* Clock2 - Disto 2-N-1 RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Disto 2-N-1 RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $FF50      Base address of clock
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+         IFNE  MPIFlag   
+SlotSlct fcb   MPI.Slot-1 Slot constant for MPI select code
+         ENDC            
+
+JmpTable                 
+         rts			RTC Init
+         nop
+         nop
+         bra   GetTime		RTC Get Time
+         nop             
+         bra   SetTime   	RTC Set Time
+
+GetTime  pshs  a,cc       Save old interrupt status and mask IRQs
+         bsr   RTCPre    
+
+         bsr   GetVal     Get Year
+         bsr   GetVal     Get Month
+         bsr   GetVal     Get Day
+         decb             ldb #5
+         stb   2,x       
+         decb            
+         lda   ,x        
+         anda  #3        
+         bsr   GetVal1    Get Hour
+         bsr   GetVal     Get Minute
+         bsr   GetVal     Get Second
+
+RTCPost  clr   >$FFD9     2 MHz  (Really should check $A0 first)
+         puls  cc,b      
+
+         IFNE  MPIFlag   
+         stb   >MPI.Slct  Restore saved "currently" selected MPak slot
+         ENDC            
+
+         clrb            
+         rts             
+
+RTCPre   orcc  #IntMasks 
+
+         IFNE  MPIFlag   
+         ldb   >MPI.Slct  Save currently selected MPak slot on stack
+         stb   3,s       
+         andb  #$F0      
+         orb   >SlotSlct,pcr Get slot to select
+         stb   >MPI.Slct  Select MPak slot for clock
+         ENDC            
+
+         ldy   #D.Time   
+         ldx   M$Mem,pcr 
+         clr   1,x       
+         ldb   #12       
+         clr   >$FFD8     1 MHz
+         rts             
+
+GetVal   stb   2,x       
+         decb            
+         lda   ,x         read tens digit from clock
+         anda  #$0f      
+GetVal1  pshs  b          save b
+         ldb   #10       
+         mul              multiply by 10 to get value
+         stb   ,y         save 10s value
+         puls  b          set up clock for ones digit
+         stb   2,x       
+         decb            
+         lda   ,x         read ones digit from clock
+         anda  #$0f      
+         adda  ,y         add ones + tens
+         sta   ,y+        store clock value into time packet
+         rts             
+
+
+SetTime  pshs  a,cc      
+         lbsr  RTCPre     Initialize
+
+         bsr   SetVal     Set Year
+         bsr   SetVal     Set Month
+         bsr   SetVal     Set Day
+         ldd   #$0805     $08 in A, $05 in B
+         bsr   SetVal1    Set Hour   (OR value in A ($08) with hour)
+         bsr   SetVal     Set Minute
+         bsr   SetVal     Set Second
+
+         lbra  RTCPost    Clean up + return
+
+SetVal   clra            
+SetVal1  stb   2,x        Set Clock address
+         decb            
+         pshs  b         
+         ldb   ,y+        Get current value
+DvLoop   subb  #10        Get Tens digit in A, ones digit in B
+         bcs   DvDone    
+         inca            
+         bra   DvLoop    
+DvDone   addb  #10       
+         sta   ,x         Store tens digit
+         tfr   b,a       
+         puls  b          Get back original clock address
+         stb   2,x       
+         decb            
+         sta   ,x         Store ones digit
+         rts             
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_disto4.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,152 @@
+********************************************************************
+* Clock2 - Disto 4-N-1 RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Disto 4-N-1 RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $FF50      Base address of clock
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+         IFNE  MPIFlag   
+SlotSlct fcb   MPI.Slot-1 Slot constant for MPI select code
+         ENDC            
+
+JmpTable                 
+         lbra  Init      
+         bra   GetTime   
+         nop             
+         lbra  SetTime   
+
+GetTime  equ   *
+         IFNE  MPIFlag   
+         pshs  cc         Save old interrupt status and mask IRQs
+         orcc  #IntMasks 
+         ldb   >MPI.Slct  Save currently selected MPak slot on stack
+         pshs  b         
+         andb  #$F0      
+         orb   >SlotSlct,pcr Select MPak slot for clock
+         stb   >MPI.Slct 
+         ENDC            
+
+         ldx   M$Mem,pcr 
+         ldy   #D.Time    Start with seconds
+
+         ldb   #11       
+         bsr   GetVal     Get Year
+         bsr   GetVal     Get Month
+         bsr   GetVal     Get Day
+         lda   #3         Mask tens digit of hour to remove AM/PM bit
+         bsr   GetVal1    Get Hour
+         bsr   GetVal     Get Minute
+         bsr   GetVal     Get Second
+
+         IFNE  MPIFlag   
+         puls  b          Restore saved "currently" selected MPak slot
+         stb   >MPI.Slct 
+         puls  cc,pc      Restore previous IRQ status
+         ELSE            
+         rts              No MPI, don't need to mess with slot, CC
+         ENDC            
+
+GetVal   lda   #$0f       Mask to apply to tens digit
+GetVal1  stb   1,x       
+         decb            
+         anda  ,x         read ones digit from clock
+         pshs  b          save b
+         ldb   #10       
+         mul              multiply by 10 to get value
+         stb   ,y         Add to ones digit
+         puls  b         
+         stb   1,x       
+         decb            
+         lda   ,x         read tens digit from clock and mask it
+         anda  #$0f      
+         adda  ,y        
+         sta   ,y+       
+         rts             
+
+
+
+SetTime  pshs  cc        
+         orcc  #IntMasks 
+
+         IFNE  MPIFlag   
+         ldb   >MPI.Slct  Save currently selected MPak slot
+         pshs  b         
+         andb  #$F0      
+         orb   >SlotSlct,pcr Get slot to select
+         stb   >MPI.Slct  Select MPak slot for clock
+         ENDC            
+
+         ldy   #D.Time+6 
+         ldx   M$Mem,pcr 
+         clrb            
+         bsr   SetVal     Set Second
+         bsr   SetVal     Set Minute
+         bsr   SetVal     Set Hour
+         bsr   SetVal     Set Day
+         bsr   SetVal     Set Month
+         bsr   SetVal     Set Year
+
+         IFNE  MPIFlag   
+         puls  b          Restore old MPAK slot
+         stb   >MPI.Slct 
+         ENDC            
+
+         puls  cc        
+         clrb             No error
+         rts             
+
+SetVal   clr   ,-s        Create variable for tens digit
+         lda   ,-y        Get current value
+DvLoop   suba  #10        Get Tens digit on stack, ones digit in A
+         bcs   DvDone    
+         inc   ,s        
+         bra   DvLoop    
+DvDone   adda  #10       
+         stb   1,x        Set Clock address
+         incb            
+         sta   ,x         Store ones digit
+         stb   1,x       
+         incb            
+         puls  a         
+         sta   ,x         Store tens digit
+         rts             
+
+
+Init     
+* Disto 4-N-1 RTC specific initialization
+         ldx   M$Mem,pcr 
+         ldd   #$010F     Set mode for RTC chip
+         stb   1,x       
+         sta   ,x        
+         ldd   #$0504    
+         sta   ,x        
+         stb   ,x        
+         rts
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_ds1315.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,146 @@
+********************************************************************
+* Clock2 - Dallas Semiconductor DS1315 RTC Driver
+*
+* $Id$
+*
+* The Burke & Burke HD Controller as well as Cloud-9's products
+* use the DS1315.
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2
+         ttl   Dallas Semiconductor DS1315 RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+         IFNE  BNB
+RTC.Base equ   $FF5C      In SCS* Decode
+         ELSE            
+RTC.Base equ   $FF7C      Fully decoded RTC
+         ENDC            
+RTC.Zero equ   -4         Send zero bit by writing this offset
+RTC.One  equ   -3         Send one bit by writing this offset
+RTC.Read equ   0          Read data from this offset
+
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+         IFNE  MPIFlag   
+SlotSlct fcb   MPI.Slot-1 Slot constant for MPI select code
+         ENDC            
+
+JmpTable                 
+         rts
+         nop             
+         nop             
+         bra   GetTime   
+         nop             
+
+SetTime  pshs  u,y,cc    
+         leay  SendBCD,pcr Send bytes of clock
+         bra   TfrTime   
+
+GetTime  pshs  u,y,cc    
+         leay  ReadBCD,pcr Read bytes of clock
+
+TfrTime  orcc  #IntMasks  turn off interrupts
+         ldu   M$Mem,pcr  Get base address
+
+         IFNE  MPIFlag   
+         ldb   >MPI.Slct  Select slot
+         pshs  b         
+         andb  #$F0      
+         orb   SlotSlct,pcr
+         stb   >MPI.Slct 
+         ENDC            
+
+         lbsr  SendMsg    Initialize clock
+         ldx   #D.Sec    
+         ldb   #8         Tfr 8 bytes
+
+tfrloop  jsr   ,y         Tfr 1 byte
+
+         bitb  #$03      
+         beq   skipstuf   Skip over day-of-week, etc.
+         leax  -1,x      
+skipstuf decb            
+         bne   tfrloop   
+
+         IFNE  MPIFlag   
+         puls  b         
+         stb   >MPI.Slct  restore MPAK slot
+         ENDC            
+
+         puls  u,y,cc,pc 
+
+ClkMsg   fcb   $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C
+* Enable clock with message $C53AA35CC53AA35C
+SendMsg  lda   RTC.Read,u Send Initialization message to clock
+         leax  <ClkMsg,pcr
+         ldb   #8        
+msgloop  lda   ,x+       
+         bsr   SendByte  
+         decb            
+         bne   msgloop   
+         rts             
+
+SendBCD  pshs  b          Send byte to clock, first converting to BCD
+         bitb  #$03      
+         bne   BCDskip    Send zero for day-of-week, etc.
+         lda   #0        
+         bra   SndBCDGo  
+BCDskip  lda   ,x        
+SndBCDGo tfr   a,b       
+         bra   binenter  
+binloop  adda  #6        
+binenter subb  #10       
+         bhs   binloop   
+         puls  b         
+SendByte coma             Send one byte to clock
+         rora            
+         bcc   sendone   
+sendzero tst   RTC.Zero,u
+         lsra            
+         bcc   sendone   
+         bne   sendzero  
+         rts             
+sendone  tst   RTC.One,u 
+         lsra            
+         bcc   sendone   
+         bne   sendzero  
+         rts             
+
+ReadBCD  pshs  b         
+         ldb   #$80       High bit will rotate out after we read 8 bits
+readbit  lda   RTC.Read,u Read a bit
+         lsra            
+         rorb             Shift it into B
+         bcc   readbit    Stop when marker bit appears
+         tfr   b,a       
+         bra   BCDEnter   Convert BCD number to Binary
+BCDLoop  subb  #6         by subtracting 6 for each $10
+BCDEnter suba  #$10      
+         bhs   BCDLoop   
+         stb   ,x        
+         puls  b,pc      
+
+
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_elim.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,217 @@
+********************************************************************
+* Clock2 - Eliminator RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Eliminator RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Sped equ   $20        32.768 KHz, rate=0
+RTC.Strt equ   $06        binary, 24 Hour, DST disabled
+RTC.Stop equ   $86        bit 7 set stops clock to allow setting time
+RTC.Base equ   $FF72      I don't know base for this chip.
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+JmpTable                 
+         lbra  Init      
+         bra   GetTime   
+         nop             
+         lbra  SetTime   
+
+
+GetTime  ldx   M$Mem,pcr  get RTC base address from fake memory requirement
+         ldb   #$0A       UIP status register address
+         stb   ,x         generate address strobe
+         lda   1,x        get UIP status
+         bpl   NoUIP      Update In Progress, go shift next RTC read
+         lda   #TkPerSec/2 set up next RTC read attempt in 1/2 second
+         sta   <D.Tick    save tick
+         bra   UpdTExit   and return
+
+NoUIP    decb             year register address
+         stb   ,x         generate address strobe
+         lda   1,x        get year
+         sta   <D.Year   
+         decb             month register address
+         stb   ,x        
+         lda   1,x       
+         sta   <D.Month  
+         decb             day of month register address
+         stb   ,x        
+         lda   1,x       
+         sta   <D.Day    
+         ldb   #4         hour register address
+         stb   ,x        
+         lda   1,x       
+         sta   <D.Hour   
+         ldb   #2         minute register address
+         stb   ,x        
+         lda   1,x       
+         sta   <D.Min    
+         clrb             second register address
+         stb   ,x        
+         lda   1,x       
+SaveSec  sta   <D.Sec    
+UpdTExit rts             
+
+
+
+SetTime  pshs  cc         save interrupt status
+         orcc  #IntMasks  disable IRQs
+         ldx   M$Mem,pcr  get RTC base address from fake memory requirement
+         ldy   #D.Time    point [Y] to time variables in DP
+         ldd   #$0B*256+RTC.Stop
+         bsr   UpdatCk0   stop clock before setting it
+         ldb   #RTC.Sped 
+         bsr   UpdatCk0   set crystal speed, output rate
+         bsr   UpdatClk   go set year
+         bsr   UpdatClk   go set month
+         bsr   UpdatClk   go set day of month
+         bsr   UpdatCk0   go set day of week (value doesn't matter)
+         bsr   UpdatCk0   go set hours alarm (value doesn't matter)
+         bsr   UpdatClk   go set hour
+         bsr   UpdatCk0   go set minutes alarm (value doesn't matter)
+         bsr   UpdatClk   go set minute
+         bsr   UpdatCk0   go set seconds alarm (value doesn't matter)
+         bsr   UpdatClk   go set second
+         ldd   #$0B*256+RTC.Strt
+         bsr   UpdatCk0   go start clock
+         puls  cc         Recover IRQ status
+         clrb            
+         rts             
+
+UpdatClk ldb   ,y+        get data from D.Time variables in DP
+UpdatCk0 std   ,x         generate address strobe, save data
+         deca             set [A] to next register down
+         rts             
+
+         IFGT  Level-1
+* OS-9 Level Two code only (for now)
+NewSvc   fcb   F$NVRAM    Eliminator adds one new service call
+         fdb   F.NVRAM-*-2
+         fcb   $80        end of service call installation table
+
+*------------------------------------------------------------
+* read/write RTC Non Volatile RAM (NVRAM)
+*
+* INPUT:  [U] = pointer to caller's register stack
+*         R$A = access mode (1 = read, 2 = write, other = error)
+*         R$B = byte count (1 through 50 here, but in other implementations
+*               may be 1 through 256 where 0 implies 256)
+*         R$X = address of buffer in user map
+*         R$Y = start address in NVRAM
+*
+* OUTPUT:  RTC NVRAM read/written
+*
+* ERROR OUTPUT:  [CC] = Carry set
+*                [B] = error code
+F.NVRAM  tfr   u,y        copy caller's register stack pointer
+         ldd   #$0100     ask for one page
+         os9   F$SRqMem  
+         bcs   NVR.Exit   go report error...
+         pshs  y,u        save caller's stack and data buffer pointers
+         ldx   R$Y,y      get NVRAM start address
+         cmpx  #50        too high?
+         bhs   Arg.Err    yes, go return error...
+         ldb   R$B,y      get NVRAM byte count
+         beq   Arg.Err   
+         abx              check end address
+         cmpx  #50        too high?
+         bhi   Arg.Err    yes, go return error...
+         lda   R$A,y      get direction flag
+         cmpa  #WRITE.    put caller's data into NVRAM?
+         bne   ChkRead    no, go check if read...
+         clra             [D]=byte count
+         pshs  d          save it...
+         ldx   <D.Proc    get caller's process descriptor address
+         lda   P$Task,x   caller is source task
+         ldb   <D.SysTsk  system is destination task
+         ldx   R$X,y      get caller's source pointer
+         puls  y          recover byte count
+         os9   F$Move     go MOVE data
+         bcs   NVR.Err   
+         ldy   ,s         get caller's register stack pointer from stack
+         lda   R$Y+1,y    get NVRAM start address
+         adda  #$0E       add offset to first RTC NVRAM address
+         ldb   R$B,y      get byte count
+         ldx   M$Mem,pcr  get clock base address from fake memory requirement
+         pshs  cc,b       save IRQ enable status and byte counter
+         orcc  #IntMasks  disable IRQs
+WrNVR.Lp ldb   ,u+        get caller's data
+         std   ,x         generate RTC address strobe and save data to NVRAM
+         inca             next NVRAM address
+         dec   1,s        done yet?
+         bne   WrNVR.Lp   no, go save another byte
+         puls  cc,b       recover IRQ enable status and clean up stack
+NVR.RtM  puls  y,u        recover register stack & data buffer pointers
+         ldd   #$0100     return one page
+         os9   F$SRtMem  
+NVR.Exit rts             
+
+Arg.Err  ldb   #E$IllArg  Illegal Argument error
+         bra   NVR.Err   
+
+ChkRead  cmpa  #READ.     return NVRAM data to caller?
+         bne   Arg.Err    illegal access mode, go return error...
+         lda   R$Y+1,y    get NVRAM start address
+         adda  #$0E       add offset to first RTC NVRAM address
+         ldx   M$Mem,pcr  get clock base address from fake memory requirement
+         pshs  cc,b       save IRQ enable status and byte counter
+         orcc  #IntMasks  disable IRQs
+RdNVR.Lp sta   ,x         generate RTC address strobe
+         ldb   1,x        get NVRAM data
+         stb   ,u+        save it to buffer
+         inca             next NVRAM address
+         dec   1,s        done yet?
+         bne   RdNVR.Lp   no, go get another byte
+         puls  cc,a       recover IRQ enable status, clean up stack ([A]=0)
+         ldb   R$B,y      [D]=byte count
+         pshs  d          save it...
+         ldx   <D.Proc    get caller's process descriptor address
+         ldb   P$Task,x   caller is source task
+         lda   <D.SysTsk  system is destination task
+         ldu   R$X,y      get caller's source pointer
+         puls  y          recover byte count
+         ldx   2,s        get data buffer (source) pointer
+         os9   F$Move     go MOVE data
+         bcc   NVR.RtM   
+NVR.Err  puls  y,u        recover caller's stack and data pointers       
+         pshs  b          save error code
+         ldd   #$0100     return one page
+         os9   F$SRtMem  
+         comb             set       Carry for error
+         puls  b,pc       recover error code, return...
+         ENDC
+
+
+Init     equ   *   
+         IFGT  Level-1
+* Eliminator will install specific system calls
+         leay  NewSvc,pcr insert syscalls
+         os9   F$SSvc    
+         ENDC
+         rts
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_harris.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,101 @@
+********************************************************************
+* Clock2 - Harris RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Harris RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $FF60      Base address for clock
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+         IFNE  MPIFlag   
+SlotSlct fcb   MPI.Slot-1 Slot constant for MPI select code
+         ENDC            
+
+JmpTable                 
+         rts
+         nop             
+         nop             
+         bra   GetTime   
+         nop             
+         lbra  SetTime   
+
+
+GetTime  pshs  cc        
+         orcc  #IntMasks  Disable interrupts
+
+         ldu   M$Mem,pcr  Get base address
+         ldy   #D.Time    Pointer to time in system map
+
+         lda   #%00001100 Init command register (Normal,Int. Disabled,
+         sta   $11,u      Run,24-hour mode, 32kHz)
+
+         lda   ,u         Read base address to set-up clock regs for read
+         lda   6,u        Get year
+         sta   ,y+       
+         lda   4,u        Get month
+         sta   ,y+       
+         lda   5,u        Get day
+         sta   ,y+       
+         lda   1,u        Get hour
+         sta   ,y+       
+         lda   2,u        Get minute
+         sta   ,y+       
+         lda   3,u        Get second
+         sta   ,y+       
+
+         puls  cc,pc      Re-enable interrupts
+
+
+SetTime  pshs  cc        
+         orcc  #IntMasks  Disable interrupts
+
+         ldu   M$Mem,pcr  Get base address
+         ldy   #D.Time    Pointer to time in system map
+
+         lda   #%00000100 Init command register (Normal,Int. Disabled,
+         sta   $11,u      STOP clock,24-hour mode, 32kHz)
+
+         lda   ,y+        Get year
+         sta   6,u       
+         lda   ,y+        Get month
+         sta   4,u       
+         lda   ,y+        Get day
+         sta   5,u       
+         lda   ,y+        Get hour
+         sta   1,u       
+         lda   ,y+        Get minute
+         sta   2,u       
+         lda   ,y         Get second
+         sta   3,u       
+
+         lda   #%00001100 Init command register (Normal,Int. Disabled,
+         sta   $11,u      START clock,24-hour mode, 32kHz)
+
+         puls  cc,pc      Re-enable interrupts
+
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_jvemu.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,70 @@
+********************************************************************
+* Clock2 - Jeff Vavasour CoCo 3 Emulator RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*          2004/07/13  Robert Gault
+* Added Vavasour/Collyer emulator & MESS (Disto) versions and relocated
+* 'GetTime equ'   statement so it is not within a chip heading.
+*
+*          2004/07/31  Rodney Hamilton
+* Improved RTCJVEmu code, conditionalized RTC type comments.
+*
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2
+         ttl   Jeff Vavasour CoCo 3 Emulator RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $FFC0
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+JmpTable                 
+         rts
+         nop             
+         nop             
+         bra   GetTime   
+         nop             
+         rts
+
+GetTime  ldx   #RTC.Base
+         ldd   ,x	get year (CCYY)
+         suba  #20
+         bmi   yr1	19xx, OK as is
+yr0      addb  #100	20xx adjustment
+         deca		also check for
+         bpl   yr0	21xx (optional)
+yr1      stb   <D.Year	set year (~YY)
+         ldd   2,x	get date
+         std   <D.Month	set date (MMDD)
+         IFNE  Level-1
+         ldd   4,x	get time (wwhh)
+         sta   <D.Daywk	set day of week
+         ELSE
+         ldb   5,x	get hour (hh)
+         ENDC
+         stb   <D.Hour	set hour (hh)
+         ldd   6,x	get time (mmss)
+         std   <D.Min	set time (mmss)
+         rts
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_messemu.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,99 @@
+********************************************************************
+* Clock2 - MESS Emulator RTC Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*          2004/07/13  Robert Gault
+* Added Vavasour/Collyer emulator & MESS (Disto) versions and relocated
+* 'GetTime equ'   statement so it is not within a chip heading.
+*
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2
+         ttl   MESS Emulator RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $FF50
+
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+JmpTable                 
+         rts
+         nop             
+         nop             
+         bra   GetTime   
+         nop             
+         rts
+
+
+* MESS time update in Disto mode (ignores MPI)
+*   Assumes that PC clock is in AM/PM mode!!!
+GetTime  ldx   #RTC.Base
+         ldy   #D.Time
+         ldb   #12           counter for data
+         stb   1,x
+         lda   ,x
+         anda  #7
+         IFNE  Level-1
+         sta   <D.Daywk
+         ENDC
+         decb
+         bsr   getval
+         lda   -1,y
+         cmpa  #70          if >xx70 then its 19xx
+         bhi   not20
+         adda  #100
+         sta   -1,y
+not20    bsr   getval       month
+         bsr   getval       day
+         lda   #7           AM/PM mask
+         stb   1,x
+         anda  ,x
+         bitb  #4
+         pshs  cc
+         anda  #3
+         bsr   getval1
+         puls  cc
+         beq   AM
+         lda   #12         convert to 24hr time as it is PM
+         adda  -1,y
+         sta   -1,y
+AM       bsr   getval      minute
+* and now fall through into get second
+getval   lda   #$0f
+         stb   1,x
+         anda  ,x
+getval1  decb
+         pshs  b
+         ldb   #10
+         mul
+         stb   ,y
+         puls  b
+         stb   1,x
+         decb
+         lda   ,x
+         anda  #$0f
+         adda  ,y
+         sta   ,y+
+         rts
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_smart.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,422 @@
+********************************************************************
+* Clock2 - Dallas Semiconductor 1216 RTC Driver
+*
+* $Id$
+*
+* Dallas Semiconductor DS1216 SmartWatch
+*
+* Wakeup sequence $C5 3A A3 5C C5 3A A3 5C
+*
+* Time byte sequence in Binary Coded Decimal
+*
+* byte	bit 7     6     5     4     3     2     1      0
+* 0        |       0.1 sec MSB       |        0.1 sec LSB     |
+* 1        |  0  |   10 sec          |        seconds         |
+* 2        |  0  |   10 min          |        minutes         |	
+* 3        |12/24|  0   | AM/PM | HR |        Hour            |
+*                       |  10 HR     |        Hour            |
+*        0=12, 1=24       0=AM, 1=PM
+* 4        | 0   |  0   |  OSC |RESET|  0  |  Weekday         |
+* 5        | 0   |  0   |  10  Date  |        Date            |
+* 6        | 0   |  0   |   0  |10 Month|     Month           |
+* 7        |        10 Year          |        Year            |
+*
+* OSC = 1;  turns off clock to save battery. RESET not used in Coco circuit.
+*
+* When inserted in external ROM socket, the clock is addressed at:
+* $C000     bit = 0
+* $C001     bit = 1
+* $C004     read byte to wakeup then send wakeup sequence to bit toggles.
+*           Then either read or send time.
+*
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*          2004/07/28  Robert Gault
+* Complete rewrite of SmartWatch segment which would never have worked.
+* See previous versions for old code if desired. Routine now will search
+* through all MPI slots to find clock and accept either AM/PM or military
+* time. User notified if clock not found or data memory not available.
+*
+* Initialization routine contains code that bypasses OS-9 system calls to
+* acquire needed low RAM that can't become ROM. This type of code is not
+* recommended in most cases but nothing else was usable.
+*          2004/07/31  Robert Gault
+* Added a settime routine and changed "no clock found" routine. If the
+* clock is not found, the D.Time entries are cleared but no message is sent.
+* Date -t will never get passed one minute.
+*          2004/07/31  Rodney Hamilton
+* Improved RTCJVEmu code, conditionalized RTC type comments.
+*          2004/08/2   Robert Gault
+* Alphabetized all clock listings so things can be found much more easily.
+* Placed list of clock types at beginning of source for record keeping.
+*
+*   1      2004/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Dallas Semiconductor 1216 RTC Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+RTC.Base equ   $C000      clock mapped to $C000-$DFFF; $FFA6 MMU slot
+RTC.Zero equ   0          Send zero bit
+RTC.One  equ   1          Send ones bit
+RTC.Read equ   4
+*D.SWPage                 on system DP; Refer to os9defs.
+D.RTCSlt equ   0          on SmartWatch ?data? page
+D.RTCFlg equ   1          on SW page
+D.RTCMod equ   2
+D.Temp   equ   3          on SW page, holds "clock" data
+D.Start  equ   4          on SW page, code starts here
+
+
+         mod   eom,name,tylg,atrv,JmpTable,RTC.Base
+
+name     fcs   "Clock2"
+         fcb   edition
+
+         IFNE  MPIFlag   
+SlotSlct fcb   MPI.Slot-1 Slot constant for MPI select code
+         ENDC            
+
+JmpTable                 
+         lbra  Init      
+         bra   GetTime   
+         nop             
+         lbra  SetTime   
+
+GetTime  pshs  cc,d,x,y,u
+         orcc  #$50
+         lda   D.SWPage
+         clrb
+         tfr   d,u         point to working space
+         lda   $FF7F
+         pshs  a
+         lda   D.RTCSlt,u  info for MPI slot
+         sta   $FF7F
+         clr   D.RTCMod,u  set for read time
+         jsr   D.Start,u   jsr to it
+         lbra  exit
+
+
+
+* This set time routine forces military time. It can't turn off clock but can
+* be used as a timer if time set to 0:0:0  hr:min:sec
+SetTime  pshs  cc,d,x,y,u
+         orcc  #$50
+         lda   D.SWPage
+         clrb
+         tfr   d,u         point to working space
+         lda   $FF7F
+         pshs  a
+         lda   D.RTCSlt,u  info for MPI slot
+         sta   $FF7F
+         lda   #-1
+         sta   D.RTCMod,u  indicate set time rather than read
+         IFGT  Level-1
+         ldx   #D.Slice
+         ELSE
+         ldx   #D.TSec
+         ENDC
+         tfr   u,y                          get location of safe region
+         leay  >D.Start+alrtend-reloc,y     point to end of wakeup code
+         lda   ,-x                          get D.Time data and store it
+         ldb   #4                           convert tenths sec, sec, min, hours
+         bsr   binbcd                       to binary coded decimal
+         IFGT  Level-1
+         lda   D.Daywk
+         ELSE
+         clra
+         ENDC
+         sta  ,y+                           set day of week if present
+         lda  ,x
+         ldb  #3                            convert day of month, month, year
+         bsr  binbcd                        to BCD
+         jsr   >D.Start,u                   send data to clock
+         lbra  exit
+         
+binbcd   pshs b
+bcd3     clrb
+bcd1     cmpa #10
+         bcs  bcd2
+         addd #$f610      decrease bin regA by 10 add bcd $10 to regB
+         bra  bcd1
+bcd2     pshs a
+         addb ,s+         add in remainder; BCD = binary when less than 10
+         stb  ,y+         place in message to clock
+         lda  ,-x         get next byte of D.Time
+         dec  ,s          decrease counter
+         bne  bcd3
+         puls b,pc
+
+* This becomes D.Start
+reloc    equ   *
+         IFGT  Level-1
+         lda   D.HINIT
+         anda  #$CC
+         sta   $FF90
+         ENDC
+         ldb   $FFA6       choose to use normal location
+         pshs  b
+         ldb   #$3E
+         stb   $FFA6       reset MMU for clock
+         sta   $FFDE
+         ldd   #RTC.Base
+         tfr   a,dp        DP now points to clock
+         tst   D.RTCMod,u  are we reading the clock or setting it?
+         beq   findclk     go if reading
+         lbsr  wakeup      we are setting a found clock
+         lbra  found
+findclk  lda   #-1
+         sta   alrtend,pcr
+         lbsr  wakeup      wakeup the clock
+         ldx   #D.Sec      one incoming byte dropped
+         lda   #8          bytes to get
+         pshs  a
+L0050    ldb   #8          bits to get
+L0052    lsr   <RTC.Read   get a bit
+         rora
+         decb  
+         bne   L0052
+         tst   D.RTCFlg,u
+         bne   maybe
+         cmpa  D.Temp,u
+         beq   maybe       clock might look like ROM
+         inc   D.RTCFlg,u  found the clock
+maybe    sta   ,x          transfer it to time
+         lda   ,s          check loop counter
+         cmpa  #8
+         beq   L006F       skip if 0.1 sec
+         cmpa  #4
+         bne   L006B       skip if not day of week
+         IFGT  Level-1
+         lda   ,x          move to correct location
+         anda  #7
+         sta   D.Daywk
+         ENDC
+         bra   L006F
+L006B    cmpa  #5          hour byte
+         bne   wd
+         lda   ,x
+         bita  #%10000000  12/24hr
+         beq   wd
+         bita  #%00100000  AM/PM
+         pshs  cc
+         anda  #%00011111  keep only time
+         puls  cc
+         bne   pm
+         cmpa  #$12        these are BCD tests
+         bne   am
+         clr   ,x          12AM=0hr military
+         bra   wd
+pm       cmpa  #$12        12PM=12hr military
+         beq   wd
+         adda  #$12        1-11PM add 12 for military
+am       sta   ,x
+wd       leax  -1,x        update time slot
+         bsr   L0087       convert from BCD to binary
+L006F    dec   ,s
+         bne   L0050       get the next byte from clock
+         lda   1,x         get year
+         cmpa  #50         half assed test for century
+         bhs   c19
+         adda  #100        make it 20th
+c19      sta   1,x
+         leas  1,s
+         tst   D.RTCFlg,u
+         bne   found
+         ldb   D.RTCSlt,u
+         bitb  #$30
+         beq   found
+         subb  #$10        not found so move to next slot
+         stb   D.RTCSlt,u
+         stb   $FF7F
+         lbra  findclk
+found    clra              system DP is always 0
+         tfr   a,dp
+         IFGT  Level-1
+         lda   D.HINIT     reset system before rts
+         sta   $FF90
+         ENDC
+         sta   $FFDF
+         puls  a
+         sta   $FFA6
+         rts               go back to normal code location
+         
+* Convert BCD to binary
+L0087    lda   1,x
+         clrb  
+L008A    cmpa  #$10        BCD 10
+         bcs   L0094
+         addd  #$F00A      decrease BCD by $10 and add binary 10
+         bra   L008A
+L0094    pshs  a
+         addb  ,s+
+         stb   1,x
+term     rts   
+
+wakeup   lda   <RTC.Read   clear the clock for input
+* When getting time data, bit0 is rotated into a full byte. This
+* means the result is $00 or $FF for ROM. Any other value used for a test
+* will give a false positive for the clock.
+         clrb
+         bita  #1
+         beq   w1
+         comb
+w1       stb   D.Temp,u
+         leax  alert,pcr   point to message
+nxtbyte  ldb   #8          8 bytes to send
+         lda   ,x+
+         cmpa  #-1         changed from 0 to -1 to accommodate settime
+         beq   term
+nxtbit   lsra              bits sent to clock by toggling
+         bcs   high        Zero and One
+         cmpa  <RTC.Zero   faster than tst
+         bra   nxtbit2
+high     cmpa  <RTC.One
+nxtbit2  decb  
+         bne   nxtbit
+         bra   nxtbyte
+
+* SmartWatch wakeup sequence
+alert    fcb   $c5,$3a,$a3,$5c,$c5,$3a,$a3,$5c
+* The next 8 bytes become time data when setting the clock. Terminator is
+* now $FF instead of $00 to permit $00 as data.
+alrtend  fcb   $FF
+alrtime  rmb   7
+         fcb   $FF
+
+exit     equ   *
+         puls  a
+         sta   $FF7F       restore MPI
+         tst   D.RTCFlg,u  was clock found?
+         beq   noclock
+         puls  cc,d,x,y,u,pc
+
+
+Init     equ   *   
+         clr   <D.SWPage        safe location for Read
+         pshs  d,x,y,u
+         IFGT  Level-1
+         ldx   <D.SysMem        get memory map
+         ldy   <D.SysDAT        get MMU map
+         ldb   #$20             first 20 pages always in use
+         abx                    point to page
+A1       tst  ,x+
+         beq   A2               found free page so go
+         incb                   update page counter
+         bpl   A1               still in RAM only, then go
+A4       lda   #2               can't find RAM only memory
+         leax  mem_mes,pcr
+         ldy   #40
+         os9   I$WritLn
+         puls  d,x,y,u,pc
+A2       pshs  b                save page #
+         andb  #%11100000       modulo MMU blocks
+         lsrb                   convert to DAT byte value
+         lsrb                   page# * $100 / $2000 = MMU #
+         lsrb                   $2000/$100=$20 at 2 bytes per MMU
+         lsrb                   then page#/$10 gives answer
+         ldd   b,y              get the MMU value
+         cmpd  #$333E           is DAT unused
+         pshs  cc               save answer
+         inc   1,s              update page # for a used page
+         puls  cc,b             get back answer and page #
+         beq   A1               if unused keep going
+         lda   #RAMinUse
+         sta   ,-x              flag the memory in use
+         ELSE
+         ldx   <$20        D.FMBM     free memory bit map
+         ldy   <$22        top of memory bit map
+         ldb   #-1         preset counter
+A1       lda   ,x+         get bits
+         incb              update $800 counter
+         pshs  y           test for end of map
+         cmpx  ,s+
+         bhi   A4          send error message
+         clr   -1,s        preset bit counter
+A2       inc   ,s
+         lsra              read left to right
+         bcs   A2
+         lda   ,s+
+         deca              convert to number of shifts
+         cmpa  #8          overflow value
+         beq   A1          get more map on ov
+         pshs  a           save the number of shifts
+         lda   #8          bytes*8
+         mul
+         addb  ,s          add modulo $800
+         cmpb  #$7E        need RAM not ROM for clock data
+         bhs   A4
+         lda   #%10000000  need to create mask to map the
+A5       lsra              unused bit, so reverse the process
+         dec   ,s          decrease shift counter
+         bne   A5
+         leas  1,s         yank counter
+         ora   -1,x        mark bit used and
+         sta   -1,x        tell the system
+         bra   A3          
+A4       leas  1,s            yank bit info
+         lda   #2             error path #
+         leax  mem_mes,pcr    good memory not found
+         ldy   #200
+         os9   I$WritLn
+         puls  d,x,y,u,pc
+A3       equ   *
+         ENDC
+         stb   <D.SWPage      keep the info for Read
+         tfr   b,a
+         clrb
+         tfr   d,x            regX now points to SW data page
+         ldb   $FF7F          get MPI values
+         andb  #3             keep IRQ info
+         orb   #$30           force slot #4 to start search
+         stb   D.RTCSlt,x     save the info
+         clr   D.RTCFlg,x     set to no clock found
+         clr   D.RTCMod,x     set to read time
+         leax  D.Start,x      safe location for moved code
+         IFNE  H6309
+         leay  reloc,pcr
+         ldw   #exit-reloc
+         tfm   y+,x+
+         ELSE
+         leau  reloc,pcr       relocation routine to move code
+         ldy   #exit-reloc     to a RAM only location
+B3       lda   ,u+
+         sta   ,x+
+         leay -1,y
+         bne   B3
+         ENDC
+         puls  d,x,y,u,pc
+
+noclock  equ   *
+         ldd   #7          seven time bytes to clear
+         ldx   #D.Time
+         IFGT  Level-1
+         sta   D.Daywk
+         ENDC
+nc       sta   ,x+
+         decb
+         bne   nc
+         puls  cc,d,x,y,u,pc
+
+mem_mes  fcc   /There is no system memory for/
+         fcb   $0a
+         fcc   /the SmartWatch. Please reduce/
+         fcb   $0a
+         fcc   /os9boot size or use soft clock./
+         fcb   $0d
+
+         emod            
+eom      equ   *         
+         end             
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/clock2_soft.asm	Fri Aug 20 11:11:58 2004 +0000
@@ -0,0 +1,79 @@
+********************************************************************
+* Clock2 - Software Clock Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      2003/08/18  Boisy G. Pitre
+* Separated clock2 modules for source clarity.
+
+         nam   Clock2    
+         ttl   Software Clock Driver
+
+         ifp1            
+         use   defsfile  
+         endc            
+
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+
+RTC.Base equ   0          Have to have one defined.
+
+         mod   len,name,Sbrtn+Objct,ReEnt+0,JmpTable,RTC.Base
+
+name     fcs   "Clock2"  
+         fcb   edition
+
+JmpTable                 
+         rts
+         nop             
+         nop             
+         bra   GetTime   
+         nop             
+         rts
+
+GetTime  lda   <D.Min     grab current minute
+         inca             minute+1
+         cmpa  #60        End of hour?
+         blo   UpdMin     no, Set start of minute
+         ldd   <D.Day     get day, hour
+         incb             hour+1
+         cmpb  #24        End of Day?
+         blo   UpdHour    ..no
+         inca             day+1
+         leax  <months-1,pcr point to months table with offset-1: Jan = +1
+         ldb   <D.Month   this month
+         cmpa  b,x        end of month?
+         bls   UpdDay     ..no, update the day
+         cmpb  #2         yes, is it Feb?
+         bne   NoLeap     ..no, ok
+         ldb   <D.Year    else get year
+         andb  #$03       check for leap year: good until 2099
+         cmpd  #$1D00     29th on leap year?
+         beq   UpdDay     ..yes, skip it
+NoLeap   ldd   <D.Year    else month+1
+         incb             month+1
+         cmpb  #13        end of year?
+         blo   UpdMonth   ..no
+         inca             year+1
+         ldb   #$01       set month to jan
+UpdMonth std   <D.Year    save year, month
+         lda   #$01       day=1st
+UpdDay   clrb             hour=midnite
+UpdHour  std   <D.Day     save day,hour
+         clra             minute=00
+UpdMin   clrb             seconds=00
+         std   <D.Min     save min,secs
+UpdTExit rts             
+
+months   fcb   31,28,31,30,31,30,31,31,30,31,30,31 Days in each month
+
+         emod            
+len      equ   *         
+         end             
+
--- a/level1/modules/makefile	Fri Aug 20 11:10:57 2004 +0000
+++ b/level1/modules/makefile	Fri Aug 20 11:11:58 2004 +0000
@@ -71,36 +71,11 @@
 clock_50hz: clock.asm
 	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aPwrLnFrq=50
 
-clock2_elim: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKELIM)
-
-clock2_disto2: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKDISTO2)
-
-clock2_disto4: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKDISTO4)
-
-clock2_bnb: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKBNB)
-
-clock2_smart: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKSMART)
+clock2_bnb: clock2_ds1315.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aBNB=1
 
-clock2_harris: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKHARRIS)
-
-clock2_cloud9: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKCLOUD9)  
-
-clock2_jvemu: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKJVEMU)  
-
-clock2_messemu: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKMESSEMU)  
-
-clock2_soft: clock2.asm
-	$(AS) $(AFLAGS) $(ASOUT)$@ $< $(CLOCKSOFT)
-
+clock2_cloud9: clock2_ds1315.asm
+	$(AS) $(AFLAGS) $(ASOUT)$@ $< -aCLOUD9=1
 
 # Floppy descriptors
 SSDD35		= -aCyls=35 -aSides=1 -aSectTrk=18 -aSectTrk0=18 \