Jump to content
IGNORED

Altirra 2.90 released


phaeron

Recommended Posts

I just copied the existing AST Turbo compatible mode and swapped the proceed line for the interrupt line, so there's an inversion occurring (high signal = pulled active low). Would be nice to see recording of actual tape so we could see the natural polarity. Otherwise... I wonder if it would be possible to auto-sense....

Link to comment
Share on other sites

I managed to get a real recording. It is the Othello game (cassette boot file with RTT loader followed by RTT record). The irony of it is that you don't need a RTT upgrade in your XC12 to record files in Rambit Turbo Tape (RTT), just to read them.

 

But back to the technical aspects.

 

I got the recording as follows:

1. Loaded RAMBIT 1.4 monitor

2. Loaded OTHELLO game (standard cassette boot file) to the computer (Rambit L command)

3. Recorded the game with Rambit S command.

4. Digitized the recording with my tape deck, sound card, and Audacity.

 

The most recent version of Altirra doesn't read the file. If i invert the polarity in Audacity and try again, then Altirra reads the file successfully.

 

The question is if we can conclude anything from that, because there are still some loose ends.

 

1. I have to check if my combination of tape deck and sound card is inverting polarity or not.

2. I don't know if the RTT circuit in XC-12 inverts the polarity (don't have any). So on tape, there can be LO-HIGH, but the RTT circuit might feed the computer with HIGH-LOW.

 

I think better approach would be analysis of the RTT monitor code and the loader code.

 

Just one final question related to PIA.

I now understand that if there is an edge on the SIO PIN 13, then PIA will indicate an interrupt occurred. The indication stays until I read PORTB. The question is what edge. HI-LO transition or LO-HI transition, or both?

I feel so lame...

Link to comment
Share on other sites

Since version 2.99-test6 debug console is using bold font. I guess this is not intentional. I fixed this by adding CFM_BOLD flag to the cf.dwMask member (in ATConsoleWindow::OnFontsUpdated function). But there might be a better way: send WM_SETFONT with g_monoFont and then EM_SETCHARFORMAT to change just the size.

 

I am using 32-it Windows XP at 96 DPI and I wasn't able to test the above fix in any other settings but it should work.

Link to comment
Share on other sites

One issue and one question...

Running v2.90 Release under Windows 7, 64-Bit.

Been having a problem with the "Warp Speed" mode for quite a few versions of Altirra before and including 2.90.

If I leave Warp Speed on long enough via enabling in the menu or toggle back and forth using the <F1> key (I think usually after holding it down for some time), Warp Speed will not turn off. It shows as unchecked in the menu but everything is still flying on screen. No amount of selecting, unselecting, or hitting <F1> will fix the problem, and (IIRC) rebooting does nothing to help either; the emulator must be closed and restarted. I haven't noticed anything consistent about it happening. I can most often use it without any problems, but, given enough use over time, it always shows up.

 

The question is regarding Warp Speed mode too. When turned on, I'm hitting about 28% processor usage in windowed mode and 45% processor usage in full-screen mode. I'm wondering, is it possible (or planned in the future) to get Altirra to hog up my CPU more? I hate having all that latent power go unused, especially at times when I really need it. Is it possible to increase the application/thread priority to a higher level via an option?

 

Thanks,

MF

Edited by MrFish
  • Like 1
Link to comment
Share on other sites

One issue and one question...

 

Running v2.90 Release under Windows 7, 64-Bit.

 

If I leave Warp Speed on long enough via enabling in the menu or toggle back and forth using the <F1> key (I think usually after holding it down for some time), Warp Speed will not turn off. It shows as unchecked in the menu but everything is still flying on screen.

.

.

Thanks,

MF

Same here Win10 x64 and winXP 32.

Link to comment
Share on other sites

http://www.virtualdub.org/beta/Altirra-2.99-test10.zip
http://www.virtualdub.org/beta/Altirra-2.99-test10-src.zip

  • .pia command now shows edge detection polarities.
  • .basic_dumpline command now accepts extended memory addresses.
  • Fixed bold console font on XP. (RichEdit is a mess with high DPI).
  • Added option for inverting turbo tape input signal. Does nothing for non-turbo as FSK decoding is mostly invariant to phase.
  • Fixed a crash in the expand archives command if empty directories were present.

Couldn't reproduce the stuck warp setting. Would be interested in knowing ballpark time to reproduce (minutes, hours) and whether changing any of the settings in the speed settings dialog can unstick it.

I now understand that if there is an edge on the SIO PIN 13, then PIA will indicate an interrupt occurred. The indication stays until I read PORTB. The question is what edge. HI-LO transition or LO-HI transition, or both?


Either is possible -- the edge direction is selected by bit 1 of PACTL/PBCTL. 0 selects a negative transition, while 1 selects a positive transition. Only the selected polarity of transition triggers an interrupt and the opposite edge direction is ignored.

 

The question is regarding Warp Speed mode too. When turned on, I'm hitting about 28% processor usage in windowed mode and 45% processor usage in full-screen mode. I'm wondering, is it possible (or planned in the future) to get Altirra to hog up my CPU more? I hate having all that latent power go unused, especially at times when I really need it. Is it possible to increase the application/thread priority to a higher level via an option?

 

It's a common misconception that raising priority can speed up a program. This only works if the program can't get all of the CPU time it wants because of some other program. Otherwise, the program will get all of its requested CPU time and raising the priority does nothing. A higher priority just gives the program first dibs; it means nothing if there is no additional CPU time available or the program can't use any more CPU time. It's also dangerous on Windows because if the program can go wide it can hog the CPU at high priority and paralyze the system.

 

You didn't say how you were measuring CPU time. Altirra can largely only use a single CPU core due to tight synchronization requirements and the built-in CPU meter that shows up in windowed mode when FPS is enabled reflects this -- it always shows % of a single CPU core no matter how many you have. On the other hand, other monitoring programs including Task Manager show percentage of all CPU cores. If you have a quad-core, a single-threaded program running flat out will only show 25%. This makes sense for overall system monitoring, less so for a single program since most programs can't go that wide.

 

In normal circumstances, Altirra will be able to completely floor a single CPU core when running in warp mode. If it can't, then that is usually due to blocking in the video driver. In warp mode, the emulator will drop frames down to a minimum of one out of every 15 frames, to ensure that you can see something during warp. Some display configurations may cause warp to speed gated due to the emulator being unable to skip vsync lock. This should not normally occur for D3D9/11, but if you're running DirectDraw or OpenGL, or under WINE, then all bets are off.

 

 

  • Like 9
Link to comment
Share on other sites

Does Altirra have the ability to access a serial port be it real or virtual?

 

I've been tinkering with a NodeMCU dev board connected to my 800XL's SIO port which gives me a serial to telnet link (wirelessly). It works great. I have a couple extra boards and thought it might be nice to put one to use with Altirra. Perhaps I'm looking in the wrong place but I haven't found an option in Altirra. I've tried looking under System --> Devices --> R-verter, 850, and ATR8000. There I find a virtual modem for access to telnet but not serial port access.

 

-SteveS

Link to comment
Share on other sites

Couldn't reproduce the stuck warp setting. Would be interested in knowing ballpark time to reproduce (minutes, hours) and whether changing any of the settings in the speed settings dialog can unstick it.

 

Unfortunately, I can't reproduce the stuck warp setting when I want to. It happens when it happens. I know that it typically occurs when I am repeatedly turning it on and off and/or leaving it on for an extended period (or holding it down in the case of using <F1>) and when I'm booting repeatedly in conjunction with using it. I'll try and watch more closely what I'm doing if I can, and see if speed settings changes can affect it when it happens. I'm usually quite focussed on what I'm doing at the time, so I'm not paying close attention to how I'm handling warping.

 

 

It's a common misconception that raising priority can speed up a program. This only works if the program can't get all of the CPU time it wants because of some other program. Otherwise, the program will get all of its requested CPU time and raising the priority does nothing. A higher priority just gives the program first dibs; it means nothing if there is no additional CPU time available or the program can't use any more CPU time. It's also dangerous on Windows because if the program can go wide it can hog the CPU at high priority and paralyze the system.

 

You didn't say how you were measuring CPU time. Altirra can largely only use a single CPU core due to tight synchronization requirements and the built-in CPU meter that shows up in windowed mode when FPS is enabled reflects this -- it always shows % of a single CPU core no matter how many you have. On the other hand, other monitoring programs including Task Manager show percentage of all CPU cores. If you have a quad-core, a single-threaded program running flat out will only show 25%. This makes sense for overall system monitoring, less so for a single program since most programs can't go that wide.

 

In normal circumstances, Altirra will be able to completely floor a single CPU core when running in warp mode. If it can't, then that is usually due to blocking in the video driver. In warp mode, the emulator will drop frames down to a minimum of one out of every 15 frames, to ensure that you can see something during warp. Some display configurations may cause warp to speed gated due to the emulator being unable to skip vsync lock. This should not normally occur for D3D9/11, but if you're running DirectDraw or OpenGL, or under WINE, then all bets are off.

 

I'll drop my misconception then, but I got it from game apps I've used in the past that had a "CPU Priority" setting that allowed for "Normal", "High", and "Maximum" options that were supposed to increase program performance (per program notes/help documentation).

 

I was measuring CPU usage with Task Manager. I was going to ask about multiple core usage, but I figured you'd answer that question anyway, which you did.

 

Based on what you said about VSync Lock, I was able to increase overall (system) performance usage in both windowed and full-screen mode to 53% (compared to the 28% and 45% I was getting before, repectively) in Task Manager by turning VSync Lock off. Given that I'm running a dual core machine, and that Altirra mainly only uses a single core (as you mention above), this brings me up to where I'd expect things to be.

Edited by MrFish
Link to comment
Share on other sites

Is there any reference for the Altirra debugger commands except for the output of ".help"?

 

I am trying to understand what I can do with expressions, especially if I can use BX to set a breakpoint that catches whenever a specific instruction (SEI) is executed.

bx "db(pc)=$78"

says it requires an "anchor" and

bx "pc<$FFFF AND db(pc)=$78" 

seems to be to unspecific as well.

 

Does that mean a breakpoint always needs to be "tied" to a specific address OR read/write address?

 

Thanks!

 

Link to comment
Share on other sites

Either is possible -- the edge direction is selected by bit 1 of PACTL/PBCTL. 0 selects a negative transition, while 1 selects a positive transition. Only the selected polarity of transition triggers an interrupt and the opposite edge direction is ignored.

 

 

Thank you. It will make my analysis of the RTT loader much easier.

Yes, the datasheet indicates that after all. It's just memory maps of the Atari that settle with the "This bit is always zero" description.

 

Link to comment
Share on other sites

Does that mean a breakpoint always needs to be "tied" to a specific address OR read/write address?

Yes.

 

The breakpoint system is based on three types of breakpoints: PC breakpoints, memory access breakpoints, and memory range access breakpoints. On top of that, extra conditional expressions can be added to those breakpoints. That means that when you set a breakpoint on "pc=$4000 and db($10)=0", a PC breakpoint is set at $4000 and the condition "db($10) = 0" is attached to it. You still need one of the three supported types of breakpoints to start with; otherwise, there is nothing to attach the expression to.

 

The SEI breakpoint can be approximated by setting up a memory access breakpoint over the entire 64K address space:

bx "read>=0 and read<=$ffff and address=pc and db(pc)=$78"

However, this is slow and also stops after the instruction has already begun, whereas true PC breakpoints stop before the instruction.

  • Like 2
Link to comment
Share on other sites

Thanks! If you ever run out of features to implement, instruction based breakpoints would be useful for reverse engineering ;-) (Being able to copy or save stuff from the console/disassembly windows as well.)

 

 

I'd like to take the opportunity to thank you for your great work. The reference manual alone is mindblowingly detailed and it is hard to believe what details you measured/explored!

 

 

 

Gesendet von iPhone mit Tapatalk

  • Like 6
Link to comment
Share on other sites

Any possibility of having MytekControls' XEL-CF adapter implemented as an internal device (basically same register set as SIDE2 but without card eject flag and hardware signature)? Card reset register is also different:

IDE_DATA	equ $D1E0
IDE_ERR		equ $D1E1
IDE_SCNT	equ $D1E2
IDE_SNUM	equ $D1E3
IDE_CYLL	equ $D1E4
IDE_CYLH	equ $D1E5
IDE_HEAD	equ $D1E6
IDE_STAT	equ $D1E7
IDE_RST		equ $D1C0		; card reset register

Reason: XEL-CF conceivably supports master/slave disks and it would be useful to emulate a dual card setup using SIDE addressing.

  • Like 5
Link to comment
Share on other sites

I'm having a problem pasting text from WordPad in Windows 7 (64-Bit) into Altirra v2.90.

 

If I paste unformatted text from WordPad, everthing is fine. But if I paste text that originally has any formatting, I get garbage text at the end in Altirra (some of them control codes, which cause editor actions).

 

The garbage text often contains font names and formatting styles (bold, italic, etc.), so apparently formatting data from the clipboard.

 

Pasting the same text from WordPad into other Windows apps is working fine.

 

post-6369-0-55106300-1507139088_thumb.png

 

post-6369-0-18274600-1507139100_thumb.png

 

post-6369-0-32957400-1507139110_thumb.png

 

 

Link to comment
Share on other sites

If you paste into Notepad does it lose the formatting data or keep it?

 

What about pasting in to Memopad and then Altirra...

 

I'd imagine its a bit awkward to get altirra to process what is proper data compared to what is application formatting data?

 

Then again, Avery probably eats these problems for breakfast :)

Link to comment
Share on other sites

Odd little bug at my end, if I try to create a portable version of the 32bit from scratch ie no previous ini then if you choose PAL and authentic after choosing the roms it will cause a crash, pick NTSC and no crash, 64 bit version does not crash either way...

Link to comment
Share on other sites

http://www.virtualdub.org/beta/Altirra-2.99-test11.zip

http://www.virtualdub.org/beta/Altirra-2.99-test11-src.zip

 

  • PCLink now uses creation timestamps and has an option to also set the creation timestamps from emulation time.
  • Added XEL-CF emulation support. (Untested.)
  • The ~ (list targets) debugger command now shows coprocessor types and speeds.
  • Fixed wrong history timestamps and broken breakpoint ranges for Percom drive coprocessor.
  • Frame PC is now updated when breakpoints are hit in coprocessors.
  • Added support for per-instruction breakpoints.
  • Fixed PAL high artifacting crash in 32-bit.
  • Fixed garbage text paste from WordPad.
  • Added support for mixed FM/MFM sectors on disks and ATX images with MFM tracks.

 

  • Like 15
Link to comment
Share on other sites

  • Added XEL-CF emulation support. (Untested.)

Thanks Avery. I'm having some problems getting a master disk to work with the XEL-CF emulation, and the device manager won't let me add a slave drive. I issued the .map command in the debugger and D500-D5FF shows [XEL-CF registers]. In the source, xelcf.cpp shows the correct decoding (D1E0-E7 for IDE registers, D1C0-C7 for reset). Maybe the mapping offers some clues anyway. No idea about the slave drive: it allowed me to go through the motions of adding a second disk, but it didn't show up in the list subsequently although the VHD was then shown as "in use" by the OS.

 

Hope that helps. I really appreciate your adding this. :)

Link to comment
Share on other sites

Thanks Avery. I'm having some problems getting a master disk to work with the XEL-CF emulation, and the device manager won't let me add a slave drive. I issued the .map command in the debugger and D500-D5FF shows [XEL-CF registers]. In the source, xelcf.cpp shows the correct decoding (D1E0-E7 for IDE registers, D1C0-C7 for reset). Maybe the mapping offers some clues anyway. No idea about the slave drive: it allowed me to go through the motions of adding a second disk, but it didn't show up in the list subsequently although the VHD was then shown as "in use" by the OS.

 

Hope that helps. I really appreciate your adding this. :)

 

Try this:

 

http://www.virtualdub.org/beta/Altirra-2.99-test12.zip

http://www.virtualdub.org/beta/Altirra-2.99-test12-src.zip

 

Also fixed the serial number being reported by IDE devices -- it changes again and doesn't have nulls in the string.

  • Like 7
Link to comment
Share on other sites

 

Try this:

 

http://www.virtualdub.org/beta/Altirra-2.99-test12.zip

http://www.virtualdub.org/beta/Altirra-2.99-test12-src.zip

 

Also fixed the serial number being reported by IDE devices -- it changes again and doesn't have nulls in the string.

 

Awesome - thanks Avery. Works a treat once I fixed the bugs it exposed in the PBI driver:

 

post-21964-0-39461700-1507371633.png

 

Thanks again for that: immensely helpful. :)

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...