floooh / yakc Goto Github PK
View Code? Open in Web Editor NEWYet another KC emulator
License: MIT License
Yet another KC emulator
License: MIT License
All the ROM dumps take quite a bit of space, consider loading them on demand?
...the streaming of text files as input has been broken with the input rewrite (see Quickload examples in the Acorn Atom example)
...has some nice improvements:
Repro: hang around in the KC85/4 emulation for several minutes, than switch to Z1013, this can freeze the emulator for several seconds. Is there something wrong with the min/max-cycle count computation, so that the z1013 runs a lot of cycles in the first frame to 'catch up'? Something not reset on poweron?
...
Reminder for more investigation: I just managed to freeze the browser version by debugging the z1013 system rom: set breakpoint at F000, reboot, step from there, at some point hit the break checkbox to continue execution, and at that point the browser froze. Most likely some infinite loop triggered.
At least in the web version, running in Chrome, the KC85/4 emu is quite freeze happy (try a Hello World BASIC program with nested loop)
Ok, here's the reason why this was broken, then worked and then was broken again:
It's the cassette read trap here:
Line 203 in 7c62e32
Problem is: cannot simply set and clear the trap from inside the CPU callback... this will not be noticed by the CPU since the CPU struct is overwritten... need to implement a more robust solution since the same problem can also happen on other systems (one solution would be a separate 'bool z80_check_trap(int trap_id)' callback which would only be called for verification when the 16-bit address matches.
This depends on the Z80 interrupt stuff.
Allow several layers of prioritized memory mappings, where lower priority mapping can fill holes in the memory layout.
This is necessary for the 64KB expansion modules, the 64 KB are mapped continuously from a start address and are accessible through the bank windows that are not mapped by higher-priority memory banks.
For proper interrupts from the PIO and CTC, some sort of daisy chain management should be implemented which takes care of interrupt priorities etc...
The memory map window needs to be fixed for the KC85/4 memory banks, it would also be nice to directly click on a memory bank and see/edit its content in a memory editor window.
Not sure yet how to reproduce, it seems to have to do with quickly pressing the same key.
Just got a freeze after changing levels, the main loop would get stuck waiting for the value in 5F9. This is written to by the CTC2 interrupt and seems to be the pause for moving the player, which probably wasn't triggered anymore. 2 recent changes come to mind:
...
This should probably be hacked in the same way the entire keyboard input is.
There are several issues with keyboard input:
I think a clean rewrite of the keyboard input code would make sense.
.
First, > ./fips gen
works well.
Then > ./fips make yakcapp
give errors:
> ./fips make yakcapp === dependency: 'oryol': dir '/home/takis/tmp/oryol' exists === dependency: 'fips-unittestpp': dir '/home/takis/tmp/fips-unittestpp' exists === dependency: 'fips-remotery': dir '/home/takis/tmp/fips-remotery' exists === dependency: 'fips-glm': dir '/home/takis/tmp/fips-glm' exists === dependency: 'fips-glfw': dir '/home/takis/tmp/fips-glfw' exists === dependency: 'gliml': dir '/home/takis/tmp/gliml' exists === dependency: 'fips-zlib': dir '/home/takis/tmp/fips-zlib' exists === dependency: 'fips-vld': dir '/home/takis/tmp/fips-vld' exists === dependency: 'fips-libcurl': dir '/home/takis/tmp/fips-libcurl' exists === dependency: 'fips-soloud': dir '/home/takis/tmp/fips-soloud' exists === dependency: 'oryol-imgui': dir '/home/takis/tmp/oryol-imgui' exists === dependency: 'fips-imgui': dir '/home/takis/tmp/fips-imgui' exists === building: linux-make-debug make -j3 yakcapp Scanning dependencies of target glfw3 Scanning dependencies of target Core Scanning dependencies of target ALL_GENERATE [ 1%] Building CXX object oryol_Core/CMakeFiles/Core.dir/App.cc.o [ 1%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/context.c.o Traceback (most recent call last): File "/home/takis/tmp/yakc-master/.fips-gen.py", line 56, in <module> processFile(attrs) File "/home/takis/tmp/yakc-master/.fips-gen.py", line 47, in processFile module.generate(input, out_src, out_hdr, args) File "/home/takis/tmp/oryol/fips-generators/Shader.py", line 1870, in generate shaderLibrary.validateShadersGLSL() File "/home/takis/tmp/oryol/fips-generators/Shader.py", line 1567, in validateShadersGLSL glslcompiler.validate(srcLines, 'vs', slVersion) File "/home/takis/tmp/oryol/fips-generators/util/glslcompiler.py", line 102, in validate output = callValidator(cmd) File "/home/takis/tmp/oryol/fips-generators/util/glslcompiler.py", line 38, in callValidator child = subprocess.Popen(cmd, stdout=subprocess.PIPE) File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child raise child_exception OSError: [Errno 8] Exec format error make[3]: *** [oryol-imgui_IMUI/CMakeFiles/ALL_GENERATE] Error 1 make[2]: *** [oryol-imgui_IMUI/CMakeFiles/ALL_GENERATE.dir/all] Error 2 make[2]: *** Waiting for unfinished jobs.... [ 2%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/init.c.o [ 2%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/input.c.o [ 3%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/monitor.c.o [ 3%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/vulkan.c.o [ 3%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Args.cc.o [ 4%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/window.c.o [ 4%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/x11_init.c.o [ 5%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/x11_monitor.c.o [ 6%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Core.cc.o [ 6%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/x11_window.c.o [ 6%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/xkb_unicode.c.o [ 6%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Log.cc.o [ 7%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/linux_joystick.c.o [ 7%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Logger.cc.o [ 7%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/posix_time.c.o [ 8%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/posix_tls.c.o [ 9%] [ 9%] Building CXX object oryol_Core/CMakeFiles/Core.dir/StackTrace.cc.o Building CXX object oryol_Core/CMakeFiles/Core.dir/RunLoop.cc.o [ 9%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/glx_context.c.o [ 10%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Memory/Memory.cc.o [ 11%] Building C object fips-glfw_glfw3/CMakeFiles/glfw3.dir/glfw/src/egl_context.c.o [ 11%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/String.cc.o Linking C static library libglfw3.a [ 11%] Built target glfw3 [ 12%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/StringAtom.cc.o [ 12%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/StringBuilder.cc.o [ 13%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/StringConverter.cc.o [ 13%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/WideString.cc.o [ 13%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/stringAtomBuffer.cc.o [ 14%] Building CXX object oryol_Core/CMakeFiles/Core.dir/String/stringAtomTable.cc.o [ 14%] Building C object oryol_Core/CMakeFiles/Core.dir/String/ConvertUTF.c.o [ 15%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Threading/ThreadLocalData.cc.o [ 15%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Time/Clock.cc.o [ 16%] Building CXX object oryol_Core/CMakeFiles/Core.dir/Trace.cc.o Linking CXX static library libCore.a [ 16%] Built target Core make[1]: *** [src/yakcapp/CMakeFiles/yakcapp.dir/rule] Error 2 make: *** [yakcapp] Error 2 [ERROR] Failed to build config 'linux-make-debug' of project 'yakc-master'
Visible memory-banks are not displayed in bright-green, but all in dark green.
For the emscripten version this should use a JS filedialog, for the native versions this should use a command line parameter.
...e.g. on browsers without WebGL the emulator seems to be frozen (even though the UI works) because the audio cycle count isn't advanced, this will cause the CPU to stop because it thinks it is running to far ahead of audio!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.