view 3rdparty/utils/smartwatch/getclk.asm @ 3210:6353bb024571

Created makefile and defsfile for NoCan RAMMER module driver and descriptor Updated rammer.asm in the NoCan driver folder to build the NoCan version of the Driver Updated r0.asm file to create the 6MB version of the descriptor. The makefile creates a disk image with two sets of the required drivers for the 6309 and 6809's in their respective module folders. /NITROS9/6309_L2/MODULES/RBF for the 6309 files and /NITROS9/6809_L2/MODULES/RBF for the 6809 files. This will make it easier for doing a dsave from this disk image into a normal distro disk image so people have these drivers ready for when new memory upgrades allow compatible usage of the NoCan registers.
author David Ladd <drencor-xeen@users.sourceforge.net>
date Wed, 20 Dec 2017 15:15:49 -0600
parents b8c7b7fbf3c9
children
line wrap: on
line source

         nam   getclk
         ttl   program module       

* Disassembled 98/06/01 09:08:21 by Disasm v1.5 (C) 1988 by RML

         ifp1
         use   defsfile
         endc

* MPI slot selection code
* $33 = Slot 4
* $22 = Slot 3
* $11 = Slot 2
* $00 = Slot 1
MPISlot  equ   $33

tylg     set   Prgrm+Objct
atrv     set   ReEnt+rev
rev      set   $02

         mod   eom,name,tylg,atrv,start,size

SWSubr   rmb   202
ROMAddr  rmb   2
Blk0Addr rmb   2
u00CE    rmb   1
TmpSecs  rmb   1
NumSecs  rmb   1
TimePckt rmb   6
         rmb   200

size     equ   .

name     fcs   /getclk/
         fcb   $02

start    equ   *
         clr   <u00CE
         cmpd  #$0002
         bcs   L003F
         com   <u00CE
         ldd   ,x
         cmpb  #$0D
         beq   ProcParm
         subd  #$2F30
L0027    suba  #$01
         beq   L0037
         addb  #$0A
         bra   L0027

* process parameter
ProcParm suba  #$30
         cmpa  #$09
         bcc   L0093
         tfr   a,b
L0037    cmpb  #$3C
         bcc   L0093
         stb   <TmpSecs
         stb   <NumSecs

L003F    leax  ,u
         leay  >L0098,pcr
         ldb   #$88
L0047    lda   ,y+
         sta   ,x+
         decb
         bne   L0047
L004E    pshs  u
         ldx   #$003E                  X holds ROM block
         incb                          set B to 1
         os9   F$MapBlk                map into our addr space
         leax  ,u                      set X to address of ROM block
         stx   <ROMAddr                save X
         ldx   #$0000                  get block zero (OS-9 globs, etc)
         os9   F$MapBlk                map into our address space
         leax  ,u                      point X to U
         stx   <Blk0Addr               save X
         puls  u
         jsr   <SWSubr
         pshs  u
         ldb   #1
         ldu   <ROMAddr
         os9   F$ClrBlk                clear this block from our space
         ldu   <Blk0Addr
         os9   F$ClrBlk                clear this block from our space
         puls  u
         os9   F$STime
         bcs   L0095
         clrb
         tst   <u00CE
         beq   L0095
L0083    ldx   #$0DD0
         os9   F$Sleep
         dec   <TmpSecs
         bne   L0083
         lda   <NumSecs
         sta   <TmpSecs
         bra   L004E
L0093    ldb   #E$IllArg
L0095    os9   F$Exit

* Exit:
*   X  = address of time packet with time from SW
L0098    pshs  cc
         orcc  #FIRQMask+IRQMask
         lda   $FF7F
         ldb   >D.HINIT,x              get GIME INT0 value in OS-9 globs
         ldx   <ROMAddr                point X to rom block address
         pshs  b,a                     save GIME INT0 value/MPI slot
         lda   #MPISlot                get slot where SW is
         sta   $FF7F                   select it
         andb  #$FC                    16x16 ROM
         stb   >$FF90                  save it in HW
         leay  >L0117,pcr
         sta   >$FFDE                  put CC3 in ROM mode
         lda   $04,x                   read ROM block (trigger SW?)
L00BA    ldb   #$08
         lda   ,y+
         beq   L00CD
L00C0    lsra
         bcs   L00C6
         tst   ,x
         fcb   $8C
L00C6    fdb   $6D01
         decb
         beq   L00BA
         bra   L00C0
L00CD    lda   #$08
L00CF    ldb   #$08
         pshs  b,a
L00D3    ldb   4,x
         lsrb
         rora
         dec   1,s                     dec count (B) on stack
         bne   L00D3
         bsr   L0107
         stb   1,s
         puls  a
         deca
         bne   L00CF
         sta   >$FFDF                  put in ALL RAM Mode
         leax  >TimePckt,u
         ldd   ,s                      get year/Month
         std   ,x                      save year/month
         lda   2,s                     get day
         sta   2,x                     save day
         ldd   4,s                     get hour/min
         std   3,x                     save hour/min
         lda   6,s                     get seconds
         sta   5,x                     save seconds
         leas  8,s                     clean stack
         puls  b,a                     get GIME INT0, org MPI slot
         sta   >$FF7F                  restore org MPI slot
         stb   >$FF90                  restore org GIME INT0
         puls  pc,cc

L0107    clrb
L0108    cmpa  #$10
         bcs   L0112
         suba  #$10
         addb  #$0A
         bra   L0108
L0112    pshs  a
         addb  ,s+
         rts

L0117    fcb   $C5,$3A,$A3,$5C
         fcb   $C5,$3A,$A3,$5C
         fcb   $00

         emod
eom      equ   *
         end