ahha, it wasn't just me who couldn't find the escape key then !
How about a menu option to select 40/80 column as they key is missing?
Great work again
The 40/80 key in earlier versions of the emulator was mapped to F11 but is now mapped to F7 in the latest version I just uploaded to my website. I plan on adding icons to the bottom emulator panel to represent the status of the CAPS LOCK and 40/80 keys, I just need to find/create some nice icons. The complete list of keyboard mapping is as follows:-
The following keymappings override the values in the keyboard configuration editor for the C128 F9 = F1/F2 F10= F3/F4 F11= F5/F6 F12=F7/F8
Other changes are:- PC CAPS LOCK = C128 SHIFT LOCK For emulated NUMPAD Joystick Num Lock needs to be OFF. C128 NUMPAD keys works with Num Lock ON.
*Update There is an option to enable/disable extra c128 keys via settings==>setup==>Extended Keyboard keys in the latest downloadable version of the emulator. Default is enable extended keyboard keys in C128/CPM modes only.
The C128 Direction keys are mapped to PC cursor keys, and CRSR U/D and CRSR L/R mapped to PC NUMPAD / and * when Extended Keyboard keys enabled.
I would ask for improved debugging capabilities mainly at this point.
A help command in the debugger that displays all commands.
I want to feed a symbol list at boot to get addresses replaced by symbol names when disassembling using addresses from 0 to $1FFFF.
The debugger needs to handle RAM from $00000 to $1ffff. It seems to have broken support for this with 'd 10000' and 'm 10000' for instance.
I want to feed breakpoints using a file at boot. Could be same as the symbol list, like VICE.
I would like memory breakpoints as well: read, write or both.
I need to see both 40 and 80 column screens at the same time.
I'm going to start work on improving the Machine debugging features. As a starting point I will be implementing most of the commands in the same format as VICE uses for consistency between the emulators.
The complete list of commands in the current emulator which I haven't really publicly announced are in the following list. I created most of these for my own use for debugging the emulator so they are likely to change but someone might find them useful for now. If anyone has any requests or suggestions on specific commands or functionality, taking note I will be using the commands VICE uses as a template, this is the time to ask. I plan on improving the UI, and will also allow feeding of breakpoints, labels, etc at boot.
*arguments are in hexadecimal
a <address> [<instruction>[:<instruction>]*
Assemble instruction to address. Only can assemble 6502 instructions at this stage. No arguments lists all the current cpu's available main instruction set. (Z80 or 6502)
Toggle breakpoint at address. no argument lists current breakpoints. Breakpoints can also be toggled by right clicking the disassembled code in the left debugging window.
Change working directory
Clear machine monitor screen
View files and folders in current directory
Disassemble instructions from address. If no argument disassemble from last address
Memory dump from address. If no argument dump from last address
l <filename> <address>
Load file to address. If address is not included emulator will use first 2 bytes of file contents as the load address. Address range can be from 0-1ffff
s <filename> <start address><end address>
Save memory range to file. Address range can be from 0-1ffff
set PC address and exit monitor
set PC to address but stay in monitor
execute xxxx machine cycles at current cpu speed and disassemble to machine monitor. WARNING don't use number too high (anything above ffff) because emulator will debug that many cycles which can be slow and there is no way to cancel operation once started. I will fix this in a future release.
execute xxxx cpu instructions WARNING don't use number too high (anything above ffff) because emulator will debug that many instructions which can be slow and there is no way to cancel operation once started. I will fix this in a future release. NOTE: I just noticed this command is broken and will only execute 1 complete instruction regardless of argument. I have found the bug and will have this fixed in the next release.
switch device. 0=computer, 1= device 8. I will likely changed this command to the same name (device) and format as VICE uses.
print name of current cpu
clear main display to color. If no argument, color will be black
How do I load an option rom? I see there are some tick boxes for it but I can't tick them or browse for a file.
You can select a Function Rom using Load External Rom or Load Internal Rom under the File menu. Once you load one of them, the appropriate tick box in the chip set settings becomes active so you can select/unselect that ROM mapped into memory. I've done minimal testing on this functionality but the roms I've had access to seem to work as expected.
While I'm talking about ROMS, I plan on adding an option for the user to select their own Kernal ROMS for the computer and drives as well. In the mean time users can customise ROMS used by the emulator by using a program like WinRAR to open the JAR file and change the ROMS manually. They are under the assets folder. Ensure you keep the name of the ROM you replace the same size and name otherwise the emulator won't start up.
Please note when loading PRG files, the C128 emulator doesn't properly set the BASIC pointers after loading yet so some programs might fail. The majority I have tried work OK without the need to update the BASIC pointers though. If anyone knows off the top of their head which memory locations should be updated after loading a PRG file, that would be useful for me to complete PRG support for the C128. I do have all documentation to be able to figure it out myself but I just haven't got around to it yet.
After loading a file, the KERNAL will set $AC/AD (172/173) to the start of address of the file *IF* it has not been over-ridden by the caller. If the caller is BASIC (which is implied by the context), then the start address will be set to a value of either $1C01 or $4001 (depending on bitmap allocation).
After loading a file, the KERNAL will set $AE/AF (174/175) to the "end address plus 1" of the file. So if the file fills RAM from $1C01 to $1CFF, the KERNAL will set a value of $2000.
After BASIC loads a file (via DLOAD, LOAD, or RUN), it will copy the KERNAL value at $AE/AF to the "End of Text" (TxtEnd) variable at $1210/1211 (4624/4625). So it will *also* have a value +1 past the last byte loaded.
I hope that helps (if you haven't figured it out already). And more importantly, thanks for publishing this ambitious project for all of us to consume! (All I can say is "wow")
Hi,yet yet I tried your C-128 emulator on a Linux with JAVA version 1.8.0_131. I've got a "AZERTY" keyboard.
The emulation is very slow, and there is a noise. On the keyboard, the number keys don't work, thus, I can't get the " symbol.
Hope this help you ;-)
Thanks for your feedback.
What are the specs of the computer you are running Linux on? I've been more focused on accuracy at this stage so the emulator does require a reasonably fast computer to run at full speed. What average cycles/second does the emulator report for you in the title bar? The noise is possibly a result of the host computer not being fast enough to run the emulator at full speed. I've noticed spasmodic static noise when I test the emulator on my Raspberry Pi 3 which I know is nowhere near fast enough to run c128 at full speed. I've also noticed a small clicking noise when the c128 emulator resets on my laptop and desktop that I use for testing but I think that happens on my real c128 as well when I reset it. I've used a VMWare instance of Ubuntu 17.04 with JAVA version 1.8.0_131. to test the emulators running on Linux and it runs at 100% under all loads for me. I'd be interested in other peoples setup and the performance of the emulator on them with and without limit speed. I plan on adding optimisations without sacrificing accuracy of the emulator in the future.
Have you tried the development version of the new UI available here ==> www.z64k.com/resources/Z64KNewUI.jar ? I've been rewriting the UI from the ground up with many improvements, especially with the rendering that uses a separate thread from the core of the emulator. I've still got a few things I need to implement and finalise, including host computer sound options and improved multi-monitor support. The new UI will be replacing all the current emulators as a first release once it has all their features implemented.
In C128 mode, the number pad acts as joystick and num keypad depending if NUM LOCK is enabled or not. I haven't got access to an AZERTY keyboard so can't really test myself. Once I finally release the new UI version of the emulator I will be calling on the community to assist with internationalization. One of the biggest challenges of writing this emulator has been supporting the various keyboards and languages everyone uses.
The last few months have been busier than normal socially and at work for me so I've had little time to focus on this project but I'm hoping to have more time over the next few months to work on it. Thanks to everyone so far who have contributed to it's development by testing and offering suggestions to improve it.