Mercurial > hg > Members > kono > os9 > sbc09
comparison src/os9/level2/clock.asm @ 57:2088fd998865
sbc09 directry clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Jul 2018 16:07:12 +0900 |
parents | os9/level2/clock.asm@8d151f303bee |
children |
comparison
equal
deleted
inserted
replaced
56:4fa2bdb0c457 | 57:2088fd998865 |
---|---|
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 | |
18 use defsfile | |
19 endc | |
20 | |
21 usefirq equ 0 | |
22 | |
23 tylg set Systm+Objct | |
24 atrv set ReEnt+rev | |
25 rev set $01 | |
26 edition set $06 | |
27 TimerPort set $ffb0 | |
28 | |
29 mod eom,name,tylg,atrv,ClkEnt,size | |
30 | |
31 size equ . | |
32 | |
33 name fcs /Clock/ | |
34 fcb edition | |
35 | |
36 SysTbl fcb F$Time | |
37 fdb FTime-*-2 | |
38 fcb F$STime | |
39 fdb FSTime-*-2 | |
40 fcb $80 | |
41 | |
42 | |
43 ifeq usefirq-1 | |
44 ClockFIRQ | |
45 leas -1,s | |
46 pshs d,dp,x,y | |
47 lda 8,s | |
48 ora #$80 Entire flag | |
49 pshs a | |
50 stu 8,s | |
51 jmp [$FFF8] | |
52 endc | |
53 ClockIRQ | |
54 ldx #TimerPort | |
55 lda ,x | |
56 bita #$10 | |
57 beq L00AE | |
58 L00AE leax ClockIRQ1,pcr | |
59 stx <D.SvcIRQ | |
60 jmp [D.XIRQ] Chain through Kernel to continue IRQ handling | |
61 ClockIRQ1 | |
62 inc <D.Sec go up one second | |
63 lda <D.Sec grab current second | |
64 cmpa #60 End of minute? | |
65 blo VIRQend No, skip time update and alarm check | |
66 clr <D.Sec Reset second count to zero | |
67 VIRQend | |
68 ldx #TimerPort | |
69 lda #$8f | |
70 sta >TimerPort | |
71 jmp [>D.Clock] | |
72 | |
73 TkPerTS equ 2 | |
74 | |
75 ClkEnt equ * | |
76 pshs cc | |
77 orcc #FIRQMask+IRQMask mask ints | |
78 leax >ClockIRQ,pcr | |
79 stx <D.IRQ | |
80 ifeq usefirq-1 | |
81 leax >ClockFIRQ,pcr | |
82 stx $FFF6 must be a RAM | |
83 endc | |
84 * install system calls | |
85 leay >SysTbl,pcr | |
86 os9 F$SSvc | |
87 ldd #59*256+TkPerTS last second and time slice in minute | |
88 std <D.Sec Will prompt RTC read at next time slice | |
89 stb <D.TSlice set ticks per time slice | |
90 stb <D.Slice set first time slice | |
91 lda #TkPerSec Reset to start of second | |
92 sta <D.Tick | |
93 | |
94 ldx #TimerPort | |
95 ldb #$8f start timer | |
96 stb ,x | |
97 puls pc,cc | |
98 | |
99 * F$Time system call code | |
100 FTime ldx #TimerPort | |
101 ldb #$04 | |
102 stb ,x | |
103 leax 1,x Address of system time packet | |
104 RetTime ldy <D.Proc Get pointer to current proc descriptor | |
105 ldb P$Task,y Process Task number | |
106 lda <D.SysTsk From System Task | |
107 ldu R$X,u | |
108 STime.Mv ldy #6 Move 6 bytes | |
109 FMove os9 F$Move | |
110 rts | |
111 | |
112 FSTime clrb | |
113 rts | |
114 | |
115 emod | |
116 eom equ * | |
117 end |