Giter Club home page Giter Club logo

rust64's Introduction

Hi! ๐Ÿ‘‹

I'm a programmer working in games and entertainment industry. I currently focus on creating tech that makes game development possible, such as engines and tools that simplify people's work. My primary programming languages are C, C++ and Rust.

Linkedin Badge Twitter Badge Mastodon Badge GitHub Pages Badge

rust64's People

Contributors

emoon avatar jackpot51 avatar kondrak avatar sajattack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rust64's Issues

Problem with sprites

Some programs crash due to getting out of array bounds when drawing sprites; need to investigate what causes it.

Linking fails on x86

Using nightlies of rustc 1.6.0 and cargo, I'm getting this:

Compiling rust64 v0.0.1 (file:///home/petevine/rust64-master)
error: linking with `cc` failed: exit code: 1
note: "cc" "-Wl,--as-needed" "-m32" "-L" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib" "/home/petevine/rust64-master/target/release/rust64.0.o" "-o" "/home/petevine/rust64-master/target/release/rust64" "-Wl,--gc-sections" "-pie" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/petevine/rust64-master/target/release" "-L" "/home/petevine/rust64-master/target/release/deps" "-L" "/home/petevine/rust64-master/target/release/build/minifb-2aa994e1058bdbef/out" "-L" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/home/petevine/rust64-master/target/release/deps/libsdl2-a33e4f65d83406e9.rlib" "/home/petevine/rust64-master/target/release/deps/libbitflags-d74836c21f733435.rlib" "/home/petevine/rust64-master/target/release/deps/libsdl2_sys-4d48b2804feab331.rlib" "/home/petevine/rust64-master/target/release/deps/libnum-61d250199d58c512.rlib" "/home/petevine/rust64-master/target/release/deps/librustc_serialize-dd25d8ce21e6e6df.rlib" "/home/petevine/rust64-master/target/release/deps/librand-0dfc279509c37449.rlib" "/home/petevine/rust64-master/target/release/deps/liblibc-b5b8c3df079ca7f9.rlib" "/home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib" "/home/petevine/rust64-master/target/release/deps/liblibc-6f18902dd8f75ffb.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libstd-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libcollections-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/librustc_unicode-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/librand-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liballoc-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liballoc_system-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liblibc-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libcore-71b07a99.rlib" "-l" "SDL2" "-l" "SDL2" "-l" "X11" "-l" "c" "-l" "m" "-l" "dl" "-l" "pthread" "-l" "gcc_s" "-l" "c" "-l" "m" "-l" "rt" "-l" "compiler-rt"
note: /home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `open::hd1d4ea4516f64359Iaa':
minifb.0.rs:(.text._ZN4open20hd1d4ea4516f64359IaaE+0x8a): undefined reference to `mfb_open'
/home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `update::hc9bb91620a8d30c8tba':
minifb.0.rs:(.text._ZN6update20hc9bb91620a8d30c8tbaE+0x18): undefined reference to `mfb_update'
/home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `close::h59fa405eefe9bc584ba':
minifb.0.rs:(.text._ZN5close20h59fa405eefe9bc584baE+0xe): undefined reference to `mfb_close'
collect2: error: ld returned 1 exit status

error: aborting due to previous error
Could not compile `rust64`.

Responsiveness issues in certain programs

This could be linked to Issue #4 but it's best to investigate when it's done.
Certain programs have very low responsiveness to joystick and keyboard - either because of timing problems or due to IO states being updated on VBlank only (unlikely but worth checking out).

I'd like to help emulate iec and drives

I'd like to help emulate iec and disk/tape drives but I'm not sure exactly how you had planned to do it. I've looked through cia.rs, and I see you have iec_lines as a field in there. Does this represent a data byte or clock, data, and atn combined? I also noticed you have $DD00 marked TODO but I need a bit more guidance on how you were thinking of architecting this. I'm a bit of a noob here but thought I'd see if you wanted help and could guide me in the right direction.

Rewrite CPU op execution scheme

When BA line in C64 is low, the CPU is blocked from performing a read access, however writes can still be performed. Current implementation is blocked even during writes which causes the VIC and CPU to get out of sync when doing certain cycle-based effects.
The new CPU has to break every instruction into steps instead of performing it right away and just sleeping for a fixed amount of cycles.
This is a task for when the sprites are done.

Panic on running "Daah, Those Acid Pills!"

When I run this onefiler demo from Censor Design the SID emulation code throws the following panic after a few seconds:

thread '<unnamed>' panicked at 'attempt to subtract with overflow', src/c64/sid.rs:635:25

self.voices[i].level -= self.voices[i].release_sub >> EGDR_SHIFT[ (self.voices[i].level >> 16) as usize ];

minifb no longer compatible

I guess the function signature must have changed recently. What's the last compatible version?

Compiling rust64 v0.0.1 (file:///tmp/rust64-master)
src/c64/mod.rs:52:72: 52:81 error: mismatched types:
 expected `minifb::WindowOptions`,
    found `minifb::Scale`
(expected struct `minifb::WindowOptions`,
    found enum `minifb::Scale`) [E0308]
src/c64/mod.rs:52             window: Window::new("Rust64", SCREEN_WIDTH, SCREEN_HEIGHT, Scale::X1).unwrap(),
                                                                                         ^~~~~~~~~
src/c64/mod.rs:52:72: 52:81 help: run `rustc --explain E0308` to see a detailed explanation
src/c64/mod.rs:176:29: 176:35 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
src/c64/mod.rs:176                 self.window.update(&self.vic.borrow_mut().window_buffer);
                                               ^~~~~~
src/c64/mod.rs:176:29: 176:35 help: run `rustc --explain E0061` to see a detailed explanation
src/debugger/mod.rs:37:73: 37:82 error: mismatched types:
 expected `minifb::WindowOptions`,
    found `minifb::Scale`
(expected struct `minifb::WindowOptions`,
    found enum `minifb::Scale`) [E0308]
src/debugger/mod.rs:37             debug_window: Window::new("Debug window", DEBUG_W, DEBUG_H, Scale::X2).unwrap(),
                                                                                               ^~~~~~~~~
src/debugger/mod.rs:37:73: 37:82 help: run `rustc --explain E0308` to see a detailed explanation
src/debugger/mod.rs:38:79: 38:88 error: mismatched types:
 expected `minifb::WindowOptions`,
    found `minifb::Scale`
(expected struct `minifb::WindowOptions`,
    found enum `minifb::Scale`) [E0308]
src/debugger/mod.rs:38             raster_window: Window::new("VIC", RASTER_DEBUG_W, RASTER_DEBUG_H, Scale::X1).unwrap(),
                                                                                                     ^~~~~~~~~
src/debugger/mod.rs:38:79: 38:88 help: run `rustc --explain E0308` to see a detailed explanation
src/debugger/mod.rs:103:31: 103:37 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
src/debugger/mod.rs:103             self.debug_window.update(&self.window_buffer);
                                                      ^~~~~~
src/debugger/mod.rs:103:31: 103:37 help: run `rustc --explain E0061` to see a detailed explanation
src/debugger/mod.rs:107:32: 107:38 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
src/debugger/mod.rs:107             self.raster_window.update(&self.raster_buffer);
                                                       ^~~~~~
src/debugger/mod.rs:107:32: 107:38 help: run `rustc --explain E0061` to see a detailed explanation
error: aborting due to 6 previous errors
Could not compile `rust64`.

Possible copypast issue

I found possible copypast issue in CIA::process_irq(&mut self) function (see link below).
Perhaps timer B is needed to check after timer A?

rust64/src/c64/cia.rs

Lines 479 to 504 in 3e9d295

pub fn process_irq(&mut self) {
if self.timer_a.irq_next_cycle {
if self.trigger_irq(1) {
if self.is_cia1 {
as_mut!(self.cpu_ref).set_cia_irq(true);
}
else {
as_mut!(self.cpu_ref).set_nmi(true);
}
}
self.timer_a.irq_next_cycle = false
}
if self.timer_a.irq_next_cycle {
if self.trigger_irq(2) {
if self.is_cia1 {
as_mut!(self.cpu_ref).set_cia_irq(true);
}
else {
as_mut!(self.cpu_ref).set_nmi(true);
}
}
self.timer_a.irq_next_cycle = false
}
}

attempted to leave type `c64::sid::SIDAudioDevice` uninitialized, which is invalid

$ RUST_BACKTRACE=full cargo run prgs/colors.prg
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/rust64 prgs/colors.prg`
Read rom/basic.rom: 8192 bytes
Read rom/chargen.rom: 4096 bytes
Read rom/kernal.rom: 8192 bytes
thread 'main' panicked at 'attempted to leave type `c64::sid::SIDAudioDevice` uninitialized, which is invalid', /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/mem/mod.rs:660:9
stack backtrace:
   0:     0x55cd977fbb20 - std::backtrace_rs::backtrace::libunwind::trace::h4dee703919bfd40a
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
   1:     0x55cd977fbb20 - std::backtrace_rs::backtrace::trace_unsynchronized::h457e839f1a563e20
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55cd977fbb20 - std::sys_common::backtrace::_print_fmt::h86a55fb30f8393c8
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x55cd977fbb20 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h7b3d6cac46d277e1
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:46:22
   4:     0x55cd978126ef - core::fmt::write::h127419eb46f2ecc9
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/fmt/mod.rs:1092:17
   5:     0x55cd977fa105 - std::io::Write::write_fmt::h6010cfbb4726588b
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/io/mod.rs:1578:15
   6:     0x55cd977fd66b - std::sys_common::backtrace::_print::h79b4f9652330cc9d
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:49:5
   7:     0x55cd977fd66b - std::sys_common::backtrace::print::h330bb326a76af8cf
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:36:9
   8:     0x55cd977fd66b - std::panicking::default_hook::{{closure}}::heb6a42a7d50a472e
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:208:50
   9:     0x55cd977fd133 - std::panicking::default_hook::h17e521ba6d68d6e1
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:225:9
  10:     0x55cd977fdc1d - std::panicking::rust_panic_with_hook::h70db735e3a6e70cb
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:591:17
  11:     0x55cd977fd7e7 - std::panicking::begin_panic_handler::{{closure}}::h777c71c8e5a7e25c
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:495:13
  12:     0x55cd977fbfdc - std::sys_common::backtrace::__rust_end_short_backtrace::h3e9bf30168899554
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:141:18
  13:     0x55cd977fd779 - rust_begin_unwind
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:493:5
  14:     0x55cd97774331 - core::panicking::panic_fmt::h5322a082d19786c3
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/panicking.rs:92:14
  15:     0x55cd9777427d - core::panicking::panic::haebb15b6842d6229
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/panicking.rs:50:5
  16:     0x55cd977bbd27 - core::mem::uninitialized::h24e51381cf1d7cc8
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/mem/mod.rs:660:9
  17:     0x55cd977bbd27 - sdl2::audio::AudioDevice<CB>::open_playback::hbb0609a3db1dfcec
                               at /home/fred/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.25.0/src/sdl2/audio.rs:571:39
  18:     0x55cd97797025 - sdl2::audio::<impl sdl2::sdl::AudioSubsystem>::open_playback::h6be543906219f018
                               at /home/fred/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.25.0/src/sdl2/audio.rs:74:9
  19:     0x55cd977a5200 - rust64::c64::sid::SID::new_shared::hb9fd972e7558784d
                               at /home/fred/Workspace/rust64/src/c64/sid.rs:149:27
  20:     0x55cd977aa2ad - rust64::c64::C64::new::h19d4a6aba81882f5
                               at /home/fred/Workspace/rust64/src/c64/mod.rs:55:22
  21:     0x55cd9779b713 - rust64::main::h3d420d3cccf68bfa
                               at /home/fred/Workspace/rust64/src/main.rs:40:19
  22:     0x55cd97778dab - core::ops::function::FnOnce::call_once::h296ac6feada574eb
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/ops/function.rs:227:5
  23:     0x55cd97788c9e - std::sys_common::backtrace::__rust_begin_short_backtrace::hbdf6d0329017f8d7
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:125:18
  24:     0x55cd97775e11 - std::rt::lang_start::{{closure}}::h04ebee1a1b54fc53
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:66:18
  25:     0x55cd977fe01a - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hbcc915e668c7ca11
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/ops/function.rs:259:13
  26:     0x55cd977fe01a - std::panicking::try::do_call::h6b0f430d48122ddf
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:379:40
  27:     0x55cd977fe01a - std::panicking::try::h6ba420e2e21b5afa
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:343:19
  28:     0x55cd977fe01a - std::panic::catch_unwind::h8366719d1f615eee
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panic.rs:431:14
  29:     0x55cd977fe01a - std::rt::lang_start_internal::h965c28c9ce06ee73
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:51:25
  30:     0x55cd97775df0 - std::rt::lang_start::hfee6940d3a632ed3
                               at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:65:5
  31:     0x55cd9779b97c - main
  32:     0x7fbd32a4ab25 - __libc_start_main
  33:     0x55cd9777499e - _start
  34:                0x0 - <unknown>

Update: Tried to debug this on my own. Wasn't able to, but figured out that if I used the sid::SID normally reserved for Redox OS (which I guess has no sound) then it works for me, also with no sound. I didn't need sound so I was happy with that. YMMV.

Backspace??

If Backspace is used as Inst/Del, then what do we use as Backspace?
Arrows don't seem to control cursor keys, so I'm at a loss.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.