Mercurial > hg > Members > kono > os9 > sbc09
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/os9/level2/clock.asm Mon Jul 23 16:07:12 2018 +0900 @@ -0,0 +1,117 @@ +******************************************************************** +* Clock - OS-9 Level One V2 Clock module +* +* $Id: clock.asm,v 1.1.1.1 2001/02/21 23:30:52 boisy Exp $ +* +* NOTE: This clock is TOTALLY VALID for ALL DATES between 1900-2155 +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ +* 5 Tandy/Microware original version +* 6 Modified to handle leap years properly for BGP 99/05/03 +* 1900 and 2100 A.D. + + nam Clock + ttl OS-9 Level One V2 Clock module + + ifp1 + use defsfile + endc + +usefirq equ 0 + +tylg set Systm+Objct +atrv set ReEnt+rev +rev set $01 +edition set $06 +TimerPort set $ffb0 + + mod eom,name,tylg,atrv,ClkEnt,size + +size equ . + +name fcs /Clock/ + fcb edition + +SysTbl fcb F$Time + fdb FTime-*-2 + fcb F$STime + fdb FSTime-*-2 + fcb $80 + + + ifeq usefirq-1 +ClockFIRQ + leas -1,s + pshs d,dp,x,y + lda 8,s + ora #$80 Entire flag + pshs a + stu 8,s + jmp [$FFF8] + endc +ClockIRQ + ldx #TimerPort + lda ,x + bita #$10 + beq L00AE +L00AE leax ClockIRQ1,pcr + stx <D.SvcIRQ + jmp [D.XIRQ] Chain through Kernel to continue IRQ handling +ClockIRQ1 + inc <D.Sec go up one second + lda <D.Sec grab current second + cmpa #60 End of minute? + blo VIRQend No, skip time update and alarm check + clr <D.Sec Reset second count to zero +VIRQend + ldx #TimerPort + lda #$8f + sta >TimerPort + jmp [>D.Clock] + +TkPerTS equ 2 + +ClkEnt equ * + pshs cc + orcc #FIRQMask+IRQMask mask ints + leax >ClockIRQ,pcr + stx <D.IRQ + ifeq usefirq-1 + leax >ClockFIRQ,pcr + stx $FFF6 must be a RAM + endc +* install system calls + leay >SysTbl,pcr + os9 F$SSvc + ldd #59*256+TkPerTS last second and time slice in minute + std <D.Sec Will prompt RTC read at next time slice + stb <D.TSlice set ticks per time slice + stb <D.Slice set first time slice + lda #TkPerSec Reset to start of second + sta <D.Tick + + ldx #TimerPort + ldb #$8f start timer + stb ,x + puls pc,cc + +* F$Time system call code +FTime ldx #TimerPort + ldb #$04 + stb ,x + leax 1,x Address of system time packet +RetTime ldy <D.Proc Get pointer to current proc descriptor + ldb P$Task,y Process Task number + lda <D.SysTsk From System Task + ldu R$X,u +STime.Mv ldy #6 Move 6 bytes +FMove os9 F$Move + rts + +FSTime clrb + rts + + emod +eom equ * + end