31
|
1 ********************************************************************
|
|
2 * Clock - OS-9 Level One V2 Clock module
|
|
3 *
|
|
4 * $Id: clock.asm,v 1.1.1.1 2001/02/21 23:30:52 boisy Exp $
|
|
5 *
|
|
6 * NOTE: This clock is TOTALLY VALID for ALL DATES between 1900-2155
|
|
7 *
|
|
8 * Ed. Comments Who YY/MM/DD
|
|
9 * ------------------------------------------------------------------
|
|
10 * 5 Tandy/Microware original version
|
|
11 * 6 Modified to handle leap years properly for BGP 99/05/03
|
|
12 * 1900 and 2100 A.D.
|
|
13
|
|
14 nam Clock
|
|
15 ttl OS-9 Level One V2 Clock module
|
|
16
|
|
17 ifp1
|
33
|
18 use defsfile
|
31
|
19 endc
|
|
20
|
|
21 tylg set Systm+Objct
|
|
22 atrv set ReEnt+rev
|
|
23 rev set $01
|
|
24 edition set $06
|
|
25 TimerPort set $e030
|
34
|
26 TkPerSec set 60
|
|
27 TkPerTS equ TkPerSec/10 ticks per time slice
|
|
28
|
31
|
29
|
|
30 mod eom,name,tylg,atrv,ClkEnt,size
|
|
31
|
|
32 size equ .
|
|
33
|
|
34 name fcs /Clock/
|
|
35 fcb edition
|
|
36
|
|
37 SysTbl fcb F$Time
|
|
38 fdb FTime-*-2
|
|
39 fcb $80
|
|
40
|
|
41
|
60
|
42 ClockIRQ ldx #TimerPort
|
34
|
43 lda ,x
|
|
44 bita #$10
|
60
|
45 bne L00B4
|
|
46 L00AE jsr [>D.Poll] poll ISRs
|
|
47 bcc L00AE keep polling until carry set
|
|
48 jmp [>D.AltIRQ] jump into an alternate IRQ if available
|
|
49
|
|
50 L00B4
|
34
|
51 ldb #$8f start timer
|
|
52 stb ,x
|
60
|
53
|
|
54 dec <D.Tick
|
|
55 bne L007F go around if not zero
|
|
56 ldb <D.Sec get minutes/seconds
|
|
57 * Seconds increment
|
|
58 incb increment seconds
|
|
59 cmpb #60 full minute?
|
|
60 blo L007F
|
|
61 ldb <D.TSec
|
|
62 stb <D.Tick
|
|
63 bsr FTime
|
|
64 L007F stb <D.Sec
|
|
65
|
|
66 jmp [>D.Clock]
|
31
|
67
|
|
68 ClkEnt equ *
|
34
|
69 ldd #59*256+$01 last second and last tick
|
|
70 std <D.Sec will prompt RTC read at next time slice
|
60
|
71 ldb #TkPerSec
|
|
72 stb <D.TSec set ticks per second
|
|
73 stb <D.Tick set ticks per second
|
34
|
74 ldb #TkPerTS get ticks per time slice
|
|
75 stb <D.TSlice set ticks per time slice
|
|
76 stb <D.Slice set first time slice
|
31
|
77 pshs cc
|
|
78 orcc #FIRQMask+IRQMask mask ints
|
34
|
79 leax <ClockIRQ,pcr
|
31
|
80 stx <D.IRQ
|
|
81 * install system calls
|
34
|
82 leay <SysTbl,pcr
|
31
|
83 os9 F$SSvc
|
|
84 ldx #TimerPort
|
54
|
85 ldb #$8f start timer
|
|
86 stb ,x
|
31
|
87 puls pc,cc
|
|
88
|
|
89 * F$Time system call code
|
|
90 FTime ldx R$X,u
|
|
91 ldy #TimerPort
|
|
92 ldb #$04
|
|
93 stb ,y
|
|
94 ldd 1,y
|
|
95 std ,x
|
60
|
96 std <D.Year
|
31
|
97 ldd 3,y
|
|
98 std 2,x
|
60
|
99 std <D.Day
|
31
|
100 ldd 5,y
|
|
101 std 4,x
|
60
|
102 std <D.Min
|
31
|
103 clrb
|
|
104 rts
|
|
105
|
|
106 emod
|
|
107 eom equ *
|
|
108 end
|