Jump to content
IGNORED

atari++ 1.80 ready for download


thorfdbg

Recommended Posts

Hi folks,

 

a new release of Atari++, after almost a year of the last release. This time it is a major release because so much changed. The major change is probably the inclusion of an Atari Basic compatible Basic dialect named "Basic++", fitting to the "++" product line of emulation software. Basic++ is quite a bit faster than Atari Basic (two to four times, depending on the program), and fixes many of the Atari Basic bugs present in all revisions of Atari Basic. Note that the emulator comes with the latest 1.03 release of Basic++, which is one additional release behind the 1.02 posted here a while ago.

 

1.03 fixes one additional Atari Basic bug,namely that the dimensionality of arrays is not checked, i.e. you could DIM a two-dimensional array, but use it as one-dimensional, and vice versa. This is no longer possible. In addition, it is again about 20% faster than the 1.02 release, of course depending on the application. It is recommended (though not required) to use Basic++ along with Os++, the Atari++ specific operating system.

 

Os++ got improved mainly in the math-pack, which got bug-fixed, and whose speed also improved. In particular, the BCD to integer conversion function, which is used a lot by Basic, has been rewritten and is now a lot faster.

 

Despite Basic++, Atari++ also includes a new profiler in its monitor, has a better tape emulation, and includes the wav2cas features, i.e. can directly decode from WAV audio recordings without having to go through an additional external binary. It can also play back onto wav files if you would want that.

 

Anyhow, here is the list of new features:

 

- Atari++ has now a built-in Basic interpreter, namely Basic++. It is a mildly extended Atari Basic dialect, which is quite a bit faster, plus
one additional command, "DIR". See the Basic++ distribution for additional modifications.

- The Basic settings have been improved, the preferences allow now up to three Basic images to be defined, typically corresponding to revisions A,B and C of the language.

- The CPU emulation fixed the cycle count for some rarely used instructions.

- Added a profiler to the monitor. PROF.S starts the profiler. PROF.L lists the profile counts collected so far, PROF.C lists the cumulative cycle counts of subroutines.

- Tape emulation has been largely extended and simplified. Entering a non-existing tape will now create an error immediately. The tape emulation also allows now WAV files, i.e. digitized real tapes, and will decode them on demand. Output to .WAV files (audio-encoding) is now also possible. This integrates the wav2cas and cas2wav programs of the same author into the emulator.

- SIO sound emulation has been extended. The SIO sound now also emulates the tape sound on input, and improves on the authenticity of the disk drive sound.

- The X11 front end improves the handling of mouse clicks. Mouse clicks that do not go into the window but into an overlapping window are now ignored.

- Audio outut can now be recorded into a SAP Record-Type R file for playback.

- Disk drive emulation has been largely improved. Several drive types are now emulated, including their serial transfer characteristics, such as disk drive speed. Note that the original 1050 drive emulation no longer takes disks that are double density or have more sectors than those of the original disk formats. To play such extended disks, select one of the more advanced drive types.

- SIO emulation has been reworked to some degree to allow the extended drive types, control the serial speed and allow for proper tape emulation.

- Binary disk images now also create a valid disk structure containing the load file as AUTORUN.SYS so it can be loaded from DOS, too.

- The math pack patch has been revised and its precision has been inproved by changing the rounding policy slighty. The floating point to ASCII conversion now also follows the convention of the original math pack.

- Detection of .BAS (Basic) files as disk images is now handled more carefully, and the emulator will no longer confuse some xfd disk images with basic files.

- The built-in monitor supports now symbolic labels. Such label information can be read from a CA65 debug file output, i.e. use --dbgfile on the ca65 command line. The debug file is then read with the new ENVI.S command of the monitor.

- The math pack in the built-in Os ROM had a bug in the BCD to ASCII conversion which could not print signed zeros and some denormalized numbers correctly. This got fixed.

- The math pack could not handle signed zeros in the BCD to integer conversion, fixed.

- The BCD to integer conversion was pretty slow. The new release replaces the algorithm completely, making it a lot faster.

As always, Atari++ can be downloaded here:

 

http://www.xl-project.com/

 

Have fun,

 

Thomas

 

  • Like 12
Link to comment
Share on other sites

Nice to see another emulator get so improved...

 

Well done..

 

EDIT:

 

Just had a play and I'd forgotten about the GUI, its clunky...

 

Before it sounds like a dig may I say that emulator wise its really nice but the interface just feels wrong, I really know that authors hate GUI's because 1. there's always someone who does not like how its done and 2. who wants to spend hours designing it but the button approach and no PC drive selection app meaning its typing and the way it is laid out just does not do it for me.

 

Feature wise I'm happy and it does what it says on the tin which is great.....Its purely the interface that puts me off....

 

I'm not knowledgable about SDL and maybe that's the interface constraint but for me personally it needs changing, its most likely just me but its a shame that it takes a really nice emulator and detracts from it..

 

Thank you for all the hard work on it, please don't take my words as a critique of the emulator, its not, its purely about the packaging you might say. The emulator itself is very good.

Edited by Mclaneinc
Link to comment
Share on other sites

cool. just wondering regarding CA65 label support... is it because Altirra uses MADS? ;)

 

Actually, I don't know what MADS is. The reason is that I'm developing under Linux with ca65 as cross-assembler, and I needed somewhat better support for debugging Basic++. Thus, using the ca65 format was simply a pragmatic and working choice. Os++ was simple enough because all the functions are short enough, but Basic++ is fairly more complex. The profiler was due to the need to find hot spots in Basic++ and to optimize it to make it faster.

 

It's actually interesting to note what made Basic++ faster and where the hotspots are. The major speed brake of Atari Basic is not even so much the math pack, but mainly the line number search function that is used to scan the program for a target line for GOTO, GOSUB, FOR-NEXT and RETURN. Basic++ became faster because FOR...NEXT pushes now addresses in addition to line numbers on the stack, thus avoiding a search at NEXT, and the same goes for RETURN. It uses also a slightly smarter strategy by not scanning the program from the first line on, but from the current line on in case the target line is below the current line. TurboBasic has a different strategy by using a 128-entry hash-list by storing the start addresses of lines, and thus quickly accessing the target line through this hash list. Unfortunately, I have no room in the ROM anymore to add the hash list.

 

The second hot-spot is the argument stack handling. This stack keeps the arguments of any arithmetic expression that requires evaluation, and Basic++ unrolls the loops here, making this a bit faster. The third hotspot is not arithmetics, but interestingly the BCD to Integer conversion function of the math pack. What I used there previously was a digit-by-digit expansion of the BCD numbers by continuosly multipliying the result by ten for each new incoming digit. The new function uses a much faster "flash" conversion from a pair of digits, i.e. to convert hex 0xXY to X*5/8 + Y, where the X*5/8 can be done very quickly, and a multiplication by 100 for each digit pair. This works much faster because most values to be converted are below 100 anyhow.

 

This all added up already gives a speed-boost comparable to Turbo Basic. It's really due to the new profiler and label support that allowed me to identify these problems.

  • Like 2
Link to comment
Share on other sites

How to run it in 64-bit Windows?

 

- Y -

 

Left click on the upper edge with the mouse (actually any part of the emulator's window will be o.k.) and keep pressing the left mouse button.

A menu bar will be displayed on top. Choose "Full Menu" from "Project" menu.

 

post-37046-0-61046100-1447022222_thumb.png

 

A new window will be displayed.. Just go for the configuration from there.

 

post-37046-0-72199000-1447022253_thumb.png

 

madi

  • Like 1
Link to comment
Share on other sites

In fact, the program doesn't even run. When I try to open the emulator´s exe file, it just keeps "loading" and never shows up anything.

 

 

 

Left click on the upper edge with the mouse (actually any part of the emulator's window will be o.k.) and keep pressing the left mouse button.

A menu bar will be displayed on top. Choose "Full Menu" from "Project" menu.

 

attachicon.gif2.png

 

A new window will be displayed.. Just go for the configuration from there.

 

attachicon.gif3.png

 

madi

Link to comment
Share on other sites

Here's my quick BASIC comparisons. I'm not sure that I have all of the emulator settings optimized. But, the Altirra vs. Atari++ results did surprise me.

Thomas, do the results look correct to you?

 

Test Program:

 

10 POKE 20,0
20 FOR I=0 TO 1000:NEXT I
30 ? PEEK(20)

 

----------------------------------------------------

Altirra 2.70-test34_x64 / NTSC / 64K XL
Atari BASIC C = 93
Altirra BASIC 1.46 = 36

 

----------------------------------------------------

Atari++ 1.80 / NTSC / 64K XL
Atari BASIC C = 126
Atari++ 1.03 = 119

Link to comment
Share on other sites

 

Left click on the upper edge with the mouse (actually any part of the emulator's window will be o.k.) and keep pressing the left mouse button.

A menu bar will be displayed on top. Choose "Full Menu" from "Project" menu.

 

attachicon.gif2.png

 

A new window will be displayed.. Just go for the configuration from there.

 

attachicon.gif3.png

 

madi

Just in case you didn't already know about the F1 key shortcut, I find pressing F1 to get to the full menu to be easier and quicker.

Link to comment
Share on other sites

Here's my quick BASIC comparisons. I'm not sure that I have all of the emulator settings optimized. But, the Altirra vs. Atari++ results did surprise me.

Thomas, do the results look correct to you?

 

Test Program:

 

10 POKE 20,0

20 FOR I=0 TO 1000:NEXT I

30 ? PEEK(20)

 

----------------------------------------------------

Altirra 2.70-test34_x64 / NTSC / 64K XL

Atari BASIC C = 93

Altirra BASIC 1.46 = 36

 

----------------------------------------------------

Atari++ 1.80 / NTSC / 64K XL

Atari BASIC C = 126

Atari++ 1.03 = 119

It would be interesting if someone could run your program on real hardware with Atari Basic C and see what an actual machine produces compared to the emulators. I'm also surprised to see 93 seconds vs 126 second between Atari++ and Altirra.

 

Bob

Link to comment
Share on other sites

It would be interesting if someone could run your program on real hardware with Atari Basic C and see what an actual machine produces compared to the emulators. I'm also surprised to see 93 seconds vs 126 second between Atari++ and Altirra.

 

Bob

 

That's probably due to differing video settings. If I'm measuring under PAL, then I get 96 for Atari Basic rev. C and 92 for Basic++ 1.03. However, for such a short program the overhead due to the line number search is negligible and hence there is not much of a difference. It becomes a lot more visible if you have a longer program.

Link to comment
Share on other sites

It would be interesting if someone could run your program on real hardware with Atari Basic C and see what an actual machine produces compared to the emulators. I'm also surprised to see 93 seconds vs 126 second between Atari++ and Altirra.

 

Bob

Ran it 4 times on my NTSC 130XE with BASIC C. 3 times got 124, one time got 123.

 

Ran it using QMEG ROM, which IIRC had the fast math routines in it. Still got 124 at each run.

Link to comment
Share on other sites

Ran it 4 times on my NTSC 130XE with BASIC C. 3 times got 124, one time got 123.

 

Ran it using QMEG ROM, which IIRC had the fast math routines in it. Still got 124 at each run.

Sorry to quote my own post. I tried in Altirra, and got 124 each time. BASIC C, XE hardware, XE OS, Windows 64 version of Altirra 2.70 test 34.

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...