9 #define PIT_FREQ 1193182
11 class PITChannel
: public Device
16 void write_back_command(uint8_t val
);
17 void write_access(uint8_t val
);
18 void write_state_val(uint8_t val
);
21 void marshal(Marshaller
*m
, const char *name
);
27 int64_t get_next_transition_time(uint64_t current_time
);
28 void irq_timer_update(uint64_t current_time
);
29 void on_irq_timer(void);
30 int get_out1(int64_t current_time
);
31 void load_count(int val
);
32 void latch_count(void);
33 uint16_t get_count(void);
34 void update_irq(uint64_t current_time
);
36 uint32_t count
; /* can be 65536 */
37 uint16_t latched_count
;
38 uint8_t count_latched
;
39 uint8_t status_latched
;
46 uint8_t bcd
; /* not supported */
47 uint8_t gate
; /* timer start */
48 int64_t count_load_time
;
50 int64_t next_transition_time
;
54 class PIT
: public Device
57 void marshal(Marshaller
*m
, const char *name
);
59 void write(uint8_t addr
, uint8_t val
);
60 uint8_t read(uint8_t addr
);
62 OutputPin
&get_irq(void);
67 PITChannel channels
[3];