Clean up code

This commit is contained in:
pjht 2024-01-24 10:50:35 -06:00
parent 7ed3f92738
commit 448850bce1
Signed by: pjht
GPG Key ID: CA239FC6934E6F3A
4 changed files with 34 additions and 32 deletions

View File

@ -352,7 +352,7 @@ impl I8080 {
self.regs[dst] = self.regs[src]; self.regs[dst] = self.regs[src];
} }
Opcode::Sphl => { Opcode::Sphl => {
self.sp = ((self.regs.h as u16) << 8) | (self.regs.l as u16); self.sp = (u16::from(self.regs.h) << 8) | u16::from(self.regs.l);
} }
Opcode::MviM => (), Opcode::MviM => (),
Opcode::Mvi(_) => (), Opcode::Mvi(_) => (),
@ -410,8 +410,8 @@ impl I8080 {
Opcode::Inx(dst) => self.set_pair(dst, self.get_pair(dst) + 1), Opcode::Inx(dst) => self.set_pair(dst, self.get_pair(dst) + 1),
Opcode::Dcx(dst) => self.set_pair(dst, self.get_pair(dst) + 2), Opcode::Dcx(dst) => self.set_pair(dst, self.get_pair(dst) + 2),
Opcode::Dad(src) => { Opcode::Dad(src) => {
let a = self.get_pair(RegisterPair::HL) as u32; let a = u32::from(self.get_pair(RegisterPair::HL));
let b = self.get_pair(src) as u32; let b = u32::from(self.get_pair(src));
let res = a + b; let res = a + b;
self.carry = res > 0xffff; self.carry = res > 0xffff;
self.set_pair(RegisterPair::HL, res as u16); self.set_pair(RegisterPair::HL, res as u16);
@ -462,14 +462,14 @@ impl I8080 {
}, },
Opcode::Ral => { Opcode::Ral => {
let high_bit = (self.regs.a & 0x80) > 0; let high_bit = (self.regs.a & 0x80) > 0;
self.regs.a = self.regs.a << 1; self.regs.a <<= 1;
self.regs.a |= self.carry as u8; self.regs.a |= u8::from(self.carry);
self.carry = high_bit; self.carry = high_bit;
}, },
Opcode::Rar => { Opcode::Rar => {
let low_bit = (self.regs.a & 0x1) > 0; let low_bit = (self.regs.a & 0x1) > 0;
self.regs.a = self.regs.a >> 1; self.regs.a >>= 1;
self.regs.a |= (self.carry as u8) << 7; self.regs.a |= u8::from(self.carry) << 7;
self.carry = low_bit; self.carry = low_bit;
}, },
Opcode::Cma => { Opcode::Cma => {
@ -812,7 +812,7 @@ impl I8080 {
} }
fn add_4bit(a: u4, b: u4, cy: bool) -> (bool, u4) { fn add_4bit(a: u4, b: u4, cy: bool) -> (bool, u4) {
let res: u5 = u5::from(a) + u5::from(b) + u5::new(cy as u8); let res: u5 = u5::from(a) + u5::from(b) + u5::new(u8::from(cy));
( (
(res >> 4) > u5::new(0), (res >> 4) > u5::new(0),
(res & u5::new(0xF)).try_into().unwrap(), (res & u5::new(0xF)).try_into().unwrap(),
@ -872,15 +872,15 @@ impl I8080 {
fn get_pair(&self, pair: RegisterPair) -> u16 { fn get_pair(&self, pair: RegisterPair) -> u16 {
match pair { match pair {
RegisterPair::BC => ((self.regs.b as u16) << 8) | (self.regs.c as u16), RegisterPair::BC => (u16::from(self.regs.b) << 8) | u16::from(self.regs.c),
RegisterPair::DE => ((self.regs.d as u16) << 8) | (self.regs.e as u16), RegisterPair::DE => (u16::from(self.regs.d) << 8) | u16::from(self.regs.e),
RegisterPair::HL => ((self.regs.h as u16) << 8) | (self.regs.l as u16), RegisterPair::HL => (u16::from(self.regs.h) << 8) | u16::from(self.regs.l),
RegisterPair::SP => self.sp, RegisterPair::SP => self.sp,
} }
} }
fn get_wz(&self) -> u16 { fn get_wz(&self) -> u16 {
((self.w as u16) << 8) | (self.z as u16) (u16::from(self.w) << 8) | u16::from(self.z)
} }
fn set_pair(&mut self, pair: RegisterPair, val: u16) { fn set_pair(&mut self, pair: RegisterPair, val: u16) {
@ -907,11 +907,11 @@ impl I8080 {
} }
fn get_flags(&self) -> u8 { fn get_flags(&self) -> u8 {
0b10 | self.carry as u8 0b10 | u8::from(self.carry)
| (self.parity as u8) << 2 | u8::from(self.parity) << 2
| (self.aux_carry as u8) << 4 | u8::from(self.aux_carry) << 4
| (self.zero as u8) << 6 | u8::from(self.zero) << 6
| (self.sign as u8) << 7 | u8::from(self.sign) << 7
} }
fn set_flags(&mut self, flags: u8) { fn set_flags(&mut self, flags: u8) {

View File

@ -1,6 +1,6 @@
use super::opcode::{ use super::opcode::{
Condition, Condition,
Opcode::{self, *}, Opcode::{self, Aci, Adc, AdcM, Add, AddM, Adi, Ana, AnaM, Ani, Call, Ccc, Cma, Cmc, Cmp, CmpM, Cpi, Daa, Dad, Dcr, DcrM, Dcx, Di, Ei, Hlt, In, Inr, InrM, Inx, Jcc, Jmp, Lda, Ldax, Lhld, Lxi, Mov, MovMR, MovRM, Mvi, MviM, Nop, Ora, OraM, Ori, Out, Pchl, Pop, PopPsw, Push, PushPsw, Ral, Rar, Rcc, Ret, Rlc, Rrc, Rst, Sbb, SbbM, Sbi, Shld, Sphl, Sta, Stax, Stc, Sub, SubM, Sui, Xchg, Xra, XraM, Xri, Xthl},
Register, RegisterPair, Register, RegisterPair,
}; };
pub(super) static OPCODE_TABLE: [Opcode; 256] = [ pub(super) static OPCODE_TABLE: [Opcode; 256] = [

View File

@ -11,7 +11,7 @@ use std::{
use cpu::{MemCycle, Status, I8080}; use cpu::{MemCycle, Status, I8080};
use device_query::{DeviceState, Keycode}; use device_query::{DeviceState, Keycode};
use eframe::egui::{self, menu, Button, Pos2, Rect, TextureHandle, TextureOptions, Ui}; use eframe::{egui::{self, menu, Button, Pos2, Rect, TextureHandle, TextureOptions, Ui}, NativeOptions};
use egui_modal::Modal; use egui_modal::Modal;
use log::{debug, trace, warn}; use log::{debug, trace, warn};
use parking_lot::Mutex; use parking_lot::Mutex;
@ -57,10 +57,10 @@ fn main() -> Result<(), eframe::Error> {
}; };
debug!(target: "altair_emu::fan_thread", "Fan startup length: {}s. Fan shutdown length: {}s", fan_startup.length(), fan_shutdown.length()); debug!(target: "altair_emu::fan_thread", "Fan startup length: {}s. Fan shutdown length: {}s", fan_startup.length(), fan_shutdown.length());
if fan_startup.length() != fan_shutdown.length() { if fan_startup.length() != fan_shutdown.length() {
warn!(target: "altair_emu::fan_thread", "Fan startup sound and shutdown sounds do not have the same length! ({}s and {}s, respectively.) This may cause audio glitches.", fan_startup.length(), fan_shutdown.length()) warn!(target: "altair_emu::fan_thread", "Fan startup sound and shutdown sounds do not have the same length! ({}s and {}s, respectively.) This may cause audio glitches.", fan_startup.length(), fan_shutdown.length());
} }
let mut fan_shutdown_start: Option<(Instant, Duration)> = None; let mut fan_shutdown_start: Option<(Instant, Duration)> = None;
for msg in rx.iter() { for msg in &rx {
if msg { if msg {
trace!(target: "altair_emu::fan_thread", "Start fan"); trace!(target: "altair_emu::fan_thread", "Start fan");
let fan_startup_start = if let Some(fan_shutdown_start) = fan_shutdown_start.take() let fan_startup_start = if let Some(fan_shutdown_start) = fan_shutdown_start.take()
@ -87,6 +87,7 @@ fn main() -> Result<(), eframe::Error> {
fan_shutdown.length() - fan_shutdown_elapsed, fan_shutdown.length() - fan_shutdown_elapsed,
) )
.unwrap(); .unwrap();
drop(sl);
trace!(target: "altair_emu::fan_thread", "Fan startup playing at offset {}s", fan_shutdown.length() - fan_shutdown_elapsed); trace!(target: "altair_emu::fan_thread", "Fan startup playing at offset {}s", fan_shutdown.length() - fan_shutdown_elapsed);
fan_startup_start fan_startup_start
} }
@ -125,6 +126,7 @@ fn main() -> Result<(), eframe::Error> {
fan_startup.length() - fan_startup_elapsed, fan_startup.length() - fan_startup_elapsed,
) )
.unwrap(); .unwrap();
drop(sl);
trace!(target: "altair_emu::fan_thread", "Fan shutdown playing at offset {}s", fan_startup.length() - fan_startup_elapsed); trace!(target: "altair_emu::fan_thread", "Fan shutdown playing at offset {}s", fan_startup.length() - fan_startup_elapsed);
} }
continue; continue;
@ -132,6 +134,7 @@ fn main() -> Result<(), eframe::Error> {
let mut sl = sl.lock(); let mut sl = sl.lock();
let handle = sl.play(&fan_loop); let handle = sl.play(&fan_loop);
sl.set_looping(handle, true); sl.set_looping(handle, true);
drop(sl);
trace!(target: "altair_emu::fan_thread", "Fan loop started, start done"); trace!(target: "altair_emu::fan_thread", "Fan loop started, start done");
} else { } else {
trace!(target: "altair_emu::fan_thread", "Stop fan"); trace!(target: "altair_emu::fan_thread", "Stop fan");
@ -152,7 +155,7 @@ fn main() -> Result<(), eframe::Error> {
.unwrap(); .unwrap();
head_step head_step
}; };
for msg in rx.iter() { for msg in &rx {
match msg { match msg {
AudioMessage::PlaySwitchClick => { AudioMessage::PlaySwitchClick => {
sl.lock().play(&head_step); sl.lock().play(&head_step);
@ -162,7 +165,7 @@ fn main() -> Result<(), eframe::Error> {
}); });
eframe::run_native( eframe::run_native(
"Altair 8800 Emulator", "Altair 8800 Emulator",
Default::default(), NativeOptions::default(),
Box::new(|cc| Box::new(AltairEmulator::new(cc, main_audio_tx, fan_audio_tx))), Box::new(|cc| Box::new(AltairEmulator::new(cc, main_audio_tx, fan_audio_tx))),
) )
} }
@ -330,8 +333,8 @@ impl eframe::App for AltairEmulator {
.add_enabled(self.option_window.is_none(), Button::new("Options")) .add_enabled(self.option_window.is_none(), Button::new("Options"))
.clicked() .clicked()
{ {
self.option_window = Some(OptionWindow::new(&ctx, self.options.clone())); self.option_window = Some(OptionWindow::new(ctx, self.options));
ui.close_menu() ui.close_menu();
} }
if ui.button("Load binary file").clicked() { if ui.button("Load binary file").clicked() {
let ihex_exts = ["hex", "mcs", "int", "ihex", "ihe", "ihx"]; let ihex_exts = ["hex", "mcs", "int", "ihex", "ihe", "ihx"];
@ -371,8 +374,8 @@ impl eframe::App for AltairEmulator {
LedSource::Protect => 0x0, LedSource::Protect => 0x0,
LedSource::Iff => 0x0, LedSource::Iff => 0x0,
LedSource::Run => 0x0, LedSource::Run => 0x0,
LedSource::CpuStatus => self.fp_status.bits() as u16, LedSource::CpuStatus => u16::from(self.fp_status.bits()),
LedSource::Data => self.fp_data as u16, LedSource::Data => u16::from(self.fp_data),
LedSource::Address => self.fp_address, LedSource::Address => self.fp_address,
}; };
let led_on = (led_data & led.mask) > 0; let led_on = (led_data & led.mask) > 0;
@ -717,7 +720,7 @@ impl eframe::App for AltairEmulator {
}); });
let old_fan_enabled = self.options.fan_enabled; let old_fan_enabled = self.options.fan_enabled;
if let Some(option_window) = self.option_window.as_mut() { if let Some(option_window) = self.option_window.as_mut() {
if option_window.draw(&ctx, &mut self.options) { if option_window.draw(ctx, &mut self.options) {
self.option_window = None; self.option_window = None;
} }
} }
@ -767,10 +770,10 @@ impl OptionWindow {
} }
modal.buttons(ui, |ui| { modal.buttons(ui, |ui| {
if ui.button("Apply").clicked() { if ui.button("Apply").clicked() {
*options = self.options.clone(); *options = self.options;
} }
if modal.button(ui, "OK").clicked() { if modal.button(ui, "OK").clicked() {
*options = self.options.clone(); *options = self.options;
} }
modal.caution_button(ui, "Cancel"); modal.caution_button(ui, "Cancel");
}); });

View File

@ -15,8 +15,7 @@ pub struct RamCard {
impl Card for RamCard { impl Card for RamCard {
fn new(settings: ron::Value) -> CardEnum { fn new(settings: ron::Value) -> CardEnum {
let settings: RamCardSettings = settings.into_rust().unwrap(); let settings: RamCardSettings = settings.into_rust().unwrap();
let mut ram = Vec::with_capacity(settings.size as usize); let ram = vec![0; settings.size as usize];
ram.resize(settings.size as usize, 0);
CardEnum::RamCard(Self { CardEnum::RamCard(Self {
ram, ram,
start_addr: settings.start_addr, start_addr: settings.start_addr,