From 0956dfb7984f4a19796903b81f6becbe1b24f5d1 Mon Sep 17 00:00:00 2001 From: Tom Morton Date: Sat, 30 Mar 2024 19:36:20 +0000 Subject: [PATCH] Console8 VDP 2.7.1. Booting into different screen modes with --mode --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/main.rs | 3 +++ src/parse_args.rs | 7 +++++-- src/vdp/rust_glue.cpp | 6 ++++++ src/vdp/vdp-console8 | 2 +- src/vdp/vdp-console8.h | 4 ++-- src/vdp/vdp-quark | 2 +- src/vdp/vdp.h | 1 + src/vdp_interface.rs | 2 ++ 10 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b14870d..83b666c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ dependencies = [ [[package]] name = "agon-light-emulator-debugger" -version = "0.9.38" +version = "0.9.39" dependencies = [ "agon-cpu-emulator", "ctrlc", @@ -153,7 +153,7 @@ source = "git+https://github.com/tomm/ez80.git?rev=64558c2acda1464248193f2f10804 [[package]] name = "fab-agon-emulator" -version = "0.9.38" +version = "0.9.39" dependencies = [ "agon-cpu-emulator", "agon-light-emulator-debugger", diff --git a/Cargo.toml b/Cargo.toml index 08c4a66..241c80f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ members = ["agon-light-emulator-debugger"] [workspace.package] -version = "0.9.38" +version = "0.9.39" edition = "2021" authors = ["Tom Morton "] license = "GPL-3.0" diff --git a/src/main.rs b/src/main.rs index 1f6c9a9..f9ae465 100644 --- a/src/main.rs +++ b/src/main.rs @@ -164,6 +164,9 @@ pub fn main() -> Result<(), pico_args::Error> { let _vdp_thread = thread::Builder::new() .name("VDP".to_string()) .spawn(move || unsafe { + if let Some(scr_mode) = args.scr_mode { + (*vdp_interface.set_startup_screen_mode)(scr_mode); + } (*vdp_interface.vdp_setup)(); (*vdp_interface.vdp_loop)(); }); diff --git a/src/parse_args.rs b/src/parse_args.rs index 7aa21c9..28b5f1b 100644 --- a/src/parse_args.rs +++ b/src/parse_args.rs @@ -7,13 +7,13 @@ USAGE: OPTIONS: -d, --debugger Enable the eZ80 debugger -b, --breakpoint Set a breakpoint before starting - -z, --zero Initialize ram with zeroes instead of random values -f, --fullscreen Start in fullscreen mode -h, --help Prints help information -u, --unlimited-cpu Don't limit eZ80 CPU frequency --firmware 1.03 Use quark 1.03 firmware (default is console8) --firmware quark Use quark 1.04 firmware (default is console8) --firmware electron Use ElectronOS firmware (default is console8) + --mode Start in a specific screen mode --sdcard Sets the path of the emulated SDCard --scale Use perfect (integer) video mode scaling, up to a maximum window height of @@ -25,7 +25,8 @@ ADVANCED: --renderer hw Use GL/D3D renderer (default) --uart1-device Link ez80 uart1 to this host serial device --uart1-baud Open --uart1-device with the given baud rate - --verbose Verbose mode + --verbose Verbose mode (includes VDP debug logs) + -z, --zero Initialize ram with zeroes instead of random values "; #[derive(Debug, Copy, Clone)] @@ -52,6 +53,7 @@ pub struct AppArgs { pub fullscreen: bool, pub verbose: bool, pub zero: bool, + pub scr_mode: Option, pub mos_bin: Option, pub vdp_dll: Option, pub firmware: FirmwareVer, @@ -86,6 +88,7 @@ pub fn parse_args() -> Result { fullscreen: pargs.contains(["-f", "--fullscreen"]), verbose: pargs.contains("--verbose"), zero: pargs.contains(["-z", "--zero"]), + scr_mode: pargs.opt_value_from_str("--mode")?, perfect_scale: pargs.opt_value_from_str("--scale")?, mos_bin: pargs.opt_value_from_str("--mos")?, vdp_dll: pargs.opt_value_from_str("--vdp")?, diff --git a/src/vdp/rust_glue.cpp b/src/vdp/rust_glue.cpp index 381eaa7..d0f34b8 100644 --- a/src/vdp/rust_glue.cpp +++ b/src/vdp/rust_glue.cpp @@ -12,12 +12,18 @@ extern void delay(int ms); bool vdp_debug_logging = false; +uint32_t startup_screen_mode = 1; extern "C" void setVdpDebugLogging(bool state) { vdp_debug_logging = state; } +extern "C" void set_startup_screen_mode(uint32_t mode) +{ + startup_screen_mode = mode; +} + /* ps2scancode is the set2 'make' code */ extern "C" void sendHostKbEventToFabgl(uint16_t ps2scancode, uint8_t isDown) { diff --git a/src/vdp/vdp-console8 b/src/vdp/vdp-console8 index ed77f48..2b51448 160000 --- a/src/vdp/vdp-console8 +++ b/src/vdp/vdp-console8 @@ -1 +1 @@ -Subproject commit ed77f4853238008421fc7ff9a63797891b04736a +Subproject commit 2b51448a6d7c01cacb3c5926ebf0b26c08e455ff diff --git a/src/vdp/vdp-console8.h b/src/vdp/vdp-console8.h index d86d55a..837405a 100644 --- a/src/vdp/vdp-console8.h +++ b/src/vdp/vdp-console8.h @@ -25,8 +25,8 @@ extern fabgl::Point translate(int X, int Y); extern bool cmp_char(uint8_t *c1, uint8_t *c2, int len); extern void cursorRight(bool scrollProtect = false); extern void cursorLeft(); -extern void cursorDown(); -extern void cursorUp(); +extern void cursorDown(bool moveOnly = false); +extern void cursorUp(bool moveOnly = false); extern fabgl::Point *activeCursor; extern fabgl::Rect *activeViewport; extern void cursorHome(fabgl::Point * cursor = activeCursor, fabgl::Rect * viewport = activeViewport); diff --git a/src/vdp/vdp-quark b/src/vdp/vdp-quark index f3aaae3..883d0f1 160000 --- a/src/vdp/vdp-quark +++ b/src/vdp/vdp-quark @@ -1 +1 @@ -Subproject commit f3aaae3f7262b54e38cc0e2c105a17e0f653029f +Subproject commit 883d0f1e300cecaac1a5fe72dc9e5c44b4184167 diff --git a/src/vdp/vdp.h b/src/vdp/vdp.h index 2e3e4fe..0a2758f 100644 --- a/src/vdp/vdp.h +++ b/src/vdp/vdp.h @@ -1,4 +1,5 @@ #include +#include #include "fabgl.h" #include "devdrivers/soundgen.h" diff --git a/src/vdp_interface.rs b/src/vdp_interface.rs index 3d4b054..e4fc8f9 100644 --- a/src/vdp_interface.rs +++ b/src/vdp_interface.rs @@ -8,6 +8,7 @@ pub struct VdpInterface { 'static, unsafe extern "C" fn(outWidth: *mut u32, outHeight: *mut u32, buffer: *mut u8), >, + pub set_startup_screen_mode: libloading::Symbol<'static, unsafe extern "C" fn(m: u32)>, pub z80_send_to_vdp: libloading::Symbol<'static, unsafe extern "C" fn(b: u8)>, pub z80_recv_from_vdp: libloading::Symbol<'static, unsafe extern "C" fn(out: *mut u8) -> bool>, pub sendHostKbEventToFabgl: @@ -30,6 +31,7 @@ impl VdpInterface { copyVgaFramebuffer: lib.get(b"copyVgaFramebuffer").unwrap(), z80_send_to_vdp: lib.get(b"z80_send_to_vdp").unwrap(), z80_recv_from_vdp: lib.get(b"z80_recv_from_vdp").unwrap(), + set_startup_screen_mode: lib.get(b"set_startup_screen_mode").unwrap(), sendHostKbEventToFabgl: lib.get(b"sendHostKbEventToFabgl").unwrap(), sendHostMouseEventToFabgl: lib.get(b"sendHostMouseEventToFabgl").unwrap(), setVdpDebugLogging: lib.get(b"setVdpDebugLogging").unwrap(),