Mercurial > hg > Members > kono > nitros9-code
changeset 220:7fed7dcadaee
Moved smartwatch commands to 3rdparty/utils/smartwatch
author | boisy |
---|---|
date | Tue, 16 Jul 2002 00:58:22 +0000 |
parents | f213b599d6e2 |
children | 5a27279ccc08 |
files | level2/cmds/makefile level2/cmds/swread.asm level2/cmds/swset.asm |
diffstat | 3 files changed, 5 insertions(+), 723 deletions(-) [+] |
line wrap: on
line diff
--- a/level2/cmds/makefile Tue Jul 16 00:54:07 2002 +0000 +++ b/level2/cmds/makefile Tue Jul 16 00:58:22 2002 +0000 @@ -6,14 +6,14 @@ deiniz del deldir dir display dump echo exbin \ free ident iniz link list load login makdir mdir \ merge mfree montype procs pwd pxd rename save \ - setime shell_21 sleep swread swset tee tmode tsmon unlink \ + setime shell_21 sleep tee tmode tsmon unlink \ verify wcreate xmode SUBS = gfx inkey ALLOBJS = $(CMDS) $(SUBS) SHELLMODS = shell_21 build copy date deiniz del dir display echo iniz \ link list load mdir merge mfree procs tmode unlink -UTILPAK1 = attr deldir free ident rename setime tmode xmode +UTILPAK1 = attr deldir ident rename setime xmode LEVEL1FILES = binex.asm attr.asm build.asm date.asm deiniz.asm del.asm deldir.asm \ dump.asm echo.asm exbin.asm free.asm ident.asm iniz.asm inkey.asm link.asm \ @@ -24,8 +24,8 @@ unlink.asm wcreate.asm # Files not compilable by os9asm: Config attr cmp dcheck dir dsave -all: $(ALLOBJS) shell utilpak1 utilpak2 $(DEPENDS) - $(CHMOD) a+rx $(ALLOBJS) shell utilpak1 utilpak2 +all: $(ALLOBJS) shell utilpak1 $(DEPENDS) + $(CHMOD) a+rx $(ALLOBJS) shell utilpak1 shell: $(SHELLMODS) $(DEPENDS) $(MERGE) $(SHELLMODS)>$@ @@ -39,19 +39,13 @@ @ls -l $@ @$(ECHO) -utilpak2: $(UTILPAK2) $(DEPENDS) - $(MERGE) $(UTILPAK2)>$@ - @$(ECHO) "*** Be sure the size of this file is less than 7681 bytes! ***" - @ls -l $@ - @$(ECHO) - $(LEVEL1FILES): ../../level1/CMDS/$@ -ln -s ../../level1/CMDS/$@ $(LEVEL2FILES): ../../level2/CMDS/$@ -ln -s ../../level2/CMDS/$@ clean: - $(RM) $(ALLOBJS) $(LEVEL1FILES) $(LEVEL2FILES) shell utilpak1 utilpak2 + $(RM) $(ALLOBJS) $(LEVEL1FILES) $(LEVEL2FILES) shell utilpak1 identify: $(IDENT_SHORT) $(ALLOBJS)
--- a/level2/cmds/swread.asm Tue Jul 16 00:54:07 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +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. - - nam SWRead - ttl Read SmartWatch clock - - ifp1 - use defsfile - endc - -cartI equ $FF22 cartridge IRQ report -multipac equ $FF7F -rom equ $FFDE -ram equ $FFDF -IEN equ %00100000 -FEN equ %00010000 -SCS equ %00000100 -ROM1 equ %00000010 -ROM0 equ %00000001 -*D.Cntury set $6A century byte - -type set prgrm+objct -revs set reent+1 -edition set 2 - - 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 -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 - -stack rmb 200 -size equ . - -message1 fcc /no clock found/ - fcb $0D -setime fcc /setime/ forced chain to setime routine - fcb $0D - -errmes fcb $0a - fcc /Swread syntax:/ - fdb $a0a - fcc /swread [n&]/ - fcb $0a - fcc / The parameter string is optional; n = 1 to 60 min/ - fcb $0a - fcc / permitting the watch to be poled in background every/ - fcb $0a - fcc / n minutes. Use decimal time values./ - fcb $0d -allert fcb $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,0 - -start clr <sleepflg - cmpd #2 - blo noparams - ldd ,x - cmpa #'? - lbeq syntax - cmpa #'- - lbeq 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 - cmpb #9 must be a number from 0-9 - lbhi syntax - - pshs b convert reg.D to hexidecimal - ldb #10 - mul - addb ,s+ - bra storeit - -onebyte suba #'0 - cmpa #9 - lbhi syntax - -storeit stb <timer - stb <sleep used to reset timer on count down - com <sleepflg - -noparams equ * - lda multipac - anda #3 retain IRQ settings - ora #$30 start at slot 4; ROM setting - sta <mpiimage - -doit pshs u - ldb #1 single block - ldx #$3E 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 - os9 f$clrblk - puls u - - 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 leas 2,s puls u - coma set cc - os9 F$exit -error ldb #e$illarg - os9 F$exit - -error2 lda #2 error path - leax message1,pcr - ldy #40 - os9 I$WritLn -* force a normal Setime as SmartWatch was not detected - lda #$11 modul type - ldb #2 size of data area - leax setime,pcr - ldy #0 parameter size - leas stack,u - leau size,u - os9 F$Chain -exit clrb - 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 - ldb multipac get current setting - pshs d save them - anda #^(IEN+FEN+ROM1+ROM0) no GIME IRQ/FIRQ; external access - orcc #$50 stop interrupts - sta $FF90 - 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 - -findclk stb multipac 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 - -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 - bra high2 -high cmpa <1 talk to clock at $C001 -high2 decb - bne nxtbit - bra nxtbyte - -gettime lda #8 8 bytes to read from clock - pshs a - ldy #rawdata -* read serial bit stream from clock -timebyte lsr <4 - rora - lsr <4 - rora - lsr <4 - rora - lsr <4 - 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 -maybe dec ,s - bne timebyte - leas 1,s yank counter - tst >clkflag did we find the clock? - bne found - ldb >mpiimage try another MPI slot - bitb #$30 did we get to slot 0? - beq found - subb #$10 next slot - stb >mpiimage save image so that we don't hunt the next time. - bra findclk - -found lda >dpsave - tfr a,dp back to program DP - sta ram go back to RAM mode - puls d - stb multipac restore to original setting - tst cartI clear CART flag incase autostart ROM pack was present in MPI - sta $FF90 restore GIME mode - puls cc restore IRQs - tst <clkflag - beq noclk - ldx #rawdata - leay D.Slice,u - 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 -* ldb #20 -* stb D.Cntury,u - sta <century - bra notyr -nintn -* ldb #19 -* stb D.Cntury,u - clr <century -*notyr ldb ,s -notyr cmpb #4 day of the week - bne notdywk - anda #7 - sta D.Daywk,u - 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 - 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 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 - stb ,-y decrease pointer and then store -nxtdata dec ,s - bne trans - tst <century - beq not20 - lda #100 - adda 1,y - sta 1,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 - - emod -pgrmend equ * - end -
--- a/level2/cmds/swset.asm Tue Jul 16 00:54:07 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ -******************************************************************** -* 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 - 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 -multipac equ $FF7F -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 multipac - 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 #4 - 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 multipac - pshs d - anda #$CC external disk rom access - orcc #$50 - sta $FF90 set for external ROM - sta rom - ldx locblk3E - ldb mpiimage get new value - clr clkflag - -findclk stb multipac 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 multipac - 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 *