Mercurial > hg > Members > kono > os9 > sbc09
changeset 54:fc10b7ae23d0
clock level2 worked
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 22 Jul 2018 19:41:06 +0900 |
parents | fe88cea67ef0 |
children | 8d151f303bee |
files | io.c os9/level1/clock.asm os9/level2/clock.asm |
diffstat | 3 files changed, 27 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/io.c Sun Jul 22 17:55:06 2018 +0900 +++ b/io.c Sun Jul 22 19:41:06 2018 +0900 @@ -405,9 +405,9 @@ fcntl(0, F_SETFL, tflags | O_NDELAY); /* Make input from stdin non-blocking */ signal(SIGALRM, timehandler); timercontrol.it_interval.tv_sec = 0; - timercontrol.it_interval.tv_usec = 200000; + timercontrol.it_interval.tv_usec = 2000000; timercontrol.it_value.tv_sec = 0; - timercontrol.it_value.tv_usec = 200000; + timercontrol.it_value.tv_usec = 2000000; if (timer) setitimer(ITIMER_REAL, &timercontrol, NULL); }
--- a/os9/level1/clock.asm Sun Jul 22 17:55:06 2018 +0900 +++ b/os9/level1/clock.asm Sun Jul 22 19:41:06 2018 +0900 @@ -48,7 +48,8 @@ ldb #$8f start timer stb ,x L00B4 - jmp [>D.SvcIRQ] + jsr [>D.SvcIRQ] + rti ClkEnt equ * ldd #59*256+$01 last second and last tick @@ -66,8 +67,8 @@ leay <SysTbl,pcr os9 F$SSvc ldx #TimerPort -* ldb #$8f start timer -* stb ,x + ldb #$8f start timer + stb ,x puls pc,cc * F$Time system call code
--- a/os9/level2/clock.asm Sun Jul 22 17:55:06 2018 +0900 +++ b/os9/level2/clock.asm Sun Jul 22 19:41:06 2018 +0900 @@ -42,12 +42,22 @@ 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 -L00AE jsr [>D.Poll] - bcc L00AE -L00B4 jsr [>D.AltIRQ] - rti + jmp [>D.Clock] + +TkPerTS equ 2 ClkEnt equ * pshs cc @@ -57,6 +67,13 @@ * 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