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