fix: account for lateness in RTC scheduler event
This commit is contained in:
		@@ -505,8 +505,8 @@ pub const Clock = struct {
 | 
				
			|||||||
        cpu.sched.push(.RealTimeClock, 1 << 24); // Every Second
 | 
					        cpu.sched.push(.RealTimeClock, 1 << 24); // Every Second
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn updateTime(self: *This) void {
 | 
					    pub fn updateTime(self: *This, late: u64) void {
 | 
				
			||||||
        self.cpu.sched.push(.RealTimeClock, 1 << 24); // Reschedule
 | 
					        self.cpu.sched.push(.RealTimeClock, (1 << 24) -| late); // Reschedule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const now = DateTime.now();
 | 
					        const now = DateTime.now();
 | 
				
			||||||
        self.year = toBcd(u8, @intCast(u8, now.date.year - 2000));
 | 
					        self.year = toBcd(u8, @intCast(u8, now.date.year - 2000));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,7 +66,7 @@ pub const Scheduler = struct {
 | 
				
			|||||||
                    if (device.kind != .Rtc or device.ptr == null) return;
 | 
					                    if (device.kind != .Rtc or device.ptr == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), device.ptr.?));
 | 
					                    const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), device.ptr.?));
 | 
				
			||||||
                    clock.updateTime();
 | 
					                    clock.updateTime(late);
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                .FrameSequencer => cpu.bus.apu.tickFrameSequencer(late),
 | 
					                .FrameSequencer => cpu.bus.apu.tickFrameSequencer(late),
 | 
				
			||||||
                .SampleAudio => cpu.bus.apu.sampleAudio(late),
 | 
					                .SampleAudio => cpu.bus.apu.sampleAudio(late),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user