OpenCores
URL https://opencores.org/ocsvn/s80186/s80186/trunk

Subversion Repositories s80186

[/] [s80186/] [trunk/] [bios/] [timer.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jamieiles
// Copyright Jamie Iles, 2017
2
//
3
// This file is part of s80x86.
4
//
5
// s80x86 is free software: you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation, either version 3 of the License, or
8
// (at your option) any later version.
9
//
10
// s80x86 is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
// GNU General Public License for more details.
14
//
15
// You should have received a copy of the GNU General Public License
16
// along with s80x86.  If not, see <http://www.gnu.org/licenses/>.
17
 
18
#include "bios.h"
19
#include "bda.h"
20
#include "io.h"
21
#include "serial.h"
22
#include "timer.h"
23
 
24
#define TIMER_PORT 0x40
25
 
26
static void timer_services(struct callregs *regs)
27
{
28
    switch (regs->ax.h) {
29
    case 0x0:
30
        regs->dx.x = bda_read(timer_counter_low);
31
        regs->cx.x = bda_read(timer_counter_high);
32
        regs->ax.l = 0;
33
        regs->flags &= ~CF;
34
        break;
35
    case 0x1:
36
        bda_write(timer_counter_low, regs->dx.x);
37
        bda_write(timer_counter_high, regs->cx.x);
38
        regs->flags &= ~CF;
39
        break;
40
    case 0x2:
41
        regs->cx.h = BIOS_BUILD_HOUR;
42
        regs->cx.l = BIOS_BUILD_MINUTE;
43
        regs->dx.h = BIOS_BUILD_SECOND;
44
        regs->flags &= ~CF;
45
        break;
46
    case 0x4:
47
        regs->cx.x = BIOS_BUILD_YEAR;
48
        regs->dx.h = BIOS_BUILD_MONTH;
49
        regs->dx.l = BIOS_BUILD_DAY;
50
        regs->flags &= ~CF;
51
        break;
52
    default: regs->flags |= CF;
53
    }
54
}
55
VECTOR(0x1a, timer_services);
56
 
57
void init_timer(void)
58
{
59
    irq_enable(0);
60
    outb(TIMER_PORT + 0x3, 0x34);
61
    outb(TIMER_PORT + 0x0, 0x00);
62
    outb(TIMER_PORT + 0x0, 0x00);
63
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.