Implement an RTC, bump version to 0.4.0

This commit is contained in:
Ry 2022-09-09 16:16:09 -07:00
parent cea9b12661
commit 9970a04cc9
4 changed files with 62 additions and 3 deletions

30
Cargo.lock generated
View File

@ -349,6 +349,20 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "chrono"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6127248204b9aba09a362f6c930ef6a78f2c1b2215f8a7b398c06e1083f17af0"
dependencies = [
"js-sys",
"num-integer",
"num-traits",
"time 0.1.44",
"wasm-bindgen",
"winapi",
]
[[package]] [[package]]
name = "clang-sys" name = "clang-sys"
version = "1.3.1" version = "1.3.1"
@ -852,9 +866,10 @@ dependencies = [
[[package]] [[package]]
name = "fox32" name = "fox32"
version = "0.3.1" version = "0.4.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"chrono",
"image", "image",
"log", "log",
"pixels", "pixels",
@ -2557,6 +2572,17 @@ dependencies = [
"weezl", "weezl",
] ]
[[package]]
name = "time"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
dependencies = [
"libc",
"wasi",
"winapi",
]
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.13" version = "0.3.13"
@ -2665,7 +2691,7 @@ dependencies = [
"git2", "git2",
"rustversion", "rustversion",
"thiserror", "thiserror",
"time", "time 0.3.13",
] ]
[[package]] [[package]]

View File

@ -1,11 +1,12 @@
[package] [package]
name = "fox32" name = "fox32"
version = "0.3.1" version = "0.4.0"
authors = ["ry"] authors = ["ry"]
edition = "2021" edition = "2021"
build = "build.rs" build = "build.rs"
[dependencies] [dependencies]
chrono = "0.4"
image = "0.24" image = "0.24"
log = "0.4" log = "0.4"
pixels = "0.9.0" pixels = "0.9.0"

View File

@ -2,6 +2,7 @@
use crate::{Memory, AudioChannel, DiskController, Keyboard, Mouse, Overlay}; use crate::{Memory, AudioChannel, DiskController, Keyboard, Mouse, Overlay};
use chrono::prelude::*;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::io::{Write, stdout}; use std::io::{Write, stdout};
@ -19,6 +20,8 @@ pub struct Bus {
pub mouse: Arc<Mutex<Mouse>>, pub mouse: Arc<Mutex<Mouse>>,
pub overlays: Arc<Mutex<Vec<Overlay>>>, pub overlays: Arc<Mutex<Vec<Overlay>>>,
pub startup_time: i64,
} }
impl Bus { impl Bus {
@ -109,6 +112,33 @@ impl Bus {
_ => panic!("invalid audio channel"), _ => panic!("invalid audio channel"),
} }
} }
0x80000700..=0x80000706 => { // RTC port
let setting = (port & 0x000000FF) as u8;
match setting {
0 => { // year
Local::now().year() as u32
},
1 => { // month
Local::now().month()
},
2 => { // day
Local::now().day()
},
3 => { // hour
Local::now().hour()
},
4 => { // minute
Local::now().minute()
},
5 => { // second
Local::now().second()
},
6 => { // milliseconds elapsed since startup
(Local::now().timestamp_millis() - self.startup_time) as u32
},
_ => panic!("invalid RTC port"),
}
}
0x80001000..=0x80002003 => { // disk controller port 0x80001000..=0x80002003 => { // disk controller port
let id = port as u8; let id = port as u8;
let operation = (port & 0x0000F000) >> 8; let operation = (port & 0x0000F000) >> 8;

View File

@ -22,6 +22,7 @@ use std::process::exit;
use std::env; use std::env;
use std::fs::{File, read}; use std::fs::{File, read};
use chrono::prelude::*;
use image; use image;
use log::error; use log::error;
use pixels::{Pixels, SurfaceTexture}; use pixels::{Pixels, SurfaceTexture};
@ -97,6 +98,7 @@ fn main() {
keyboard: keyboard.clone(), keyboard: keyboard.clone(),
mouse: mouse.clone(), mouse: mouse.clone(),
overlays: display.overlays.clone(), overlays: display.overlays.clone(),
startup_time: Local::now().timestamp_millis(),
}; };
if args.len() > 1 { if args.len() > 1 {