4 GB CompactFlash card-image for Amiga

March 25th, 2015

This tutorial is showing you how to create a fully partioned Amiga CF-card in about 10 minutes from scratch. The process will involve using a Windows-based disk image tool and writing a prepared image-file directly to the CF-card. The resulting card contains four empty Amiga partitions that have been set to the correct MaxTransfer of 0x1fe00 and formatted with PFS3 AIO. The resulting card is known to work in WinUAE and on real Amigas.

Introduction:

So when you are digging out the miggy, like I did during the past festive season, you might feel the desire to put in a CompactFlash (CF) as a hard-drive, at least if you have an internal IDE-connector that is. CF to IDE adapters come cheap and in different sizes, and so do the cards. There are many guides available on how to set it all up correctly, applying different tricks of the trade here and there. The only problem is that it all might get a bit fiddly, which is why I wrote this post.

I have spent several evening checking cards of different sizes and in different configurations of file-systems and partition sizes. To make life a little easier, I documented the process and took an image of the resulting setup that worked best for me using a Windows-based freeware tool.

I am sharing the image-file in this post under the intent that it might be useful, but without warranty of any kind. Following my instructions should not be complicated, but basically use your brain and do everything at your own risk.

Prerequisites:

  • A Windows machine with an attached or built-in CF-reader
  • 4 GB CF-Card (ideally SanDisk which is what I used)
  • HDD Raw Copy Tool from HDDGuru
  • The prepared image-file

How to create an Amiga-compatible 4 GB CF-card (the card’s original content will be overwritten, naturally):

  • Insert your 4 GB CF-card into the PC
  • Start HDD Raw Copy Tool
  • Follow the instructions laid out in the gallery below (basically: select SOURCE from unzipped image-file, select TARGET to your CF-card, hit START, wait ~10 minutes)
  • Also in the gallery: how to mount the newly prepared CF-card in WinUAE

Final notes:

  1. The described process works flawlessly for me on a current Win7 64 Bit machine. Actually, I just redid it before writing this tutorial to make sure the given information is as correct as possible.
  2. The resulting CF-card works under emulation in WinUAE with 68000 or higher CPUs, as well as on my real A1200.
    1. All drives are formatted with PFS3 AIO, which should work on any Amiga.
    2. MaxTransfer 0x1fe00 has been set on all partitions.
  3. The card is partioned into four drives:
    1. OS1 (~250 MB, put your main OS here)
    2. OS2 (~250 MB, put your alternative or recovery OS here, switch from boot-menu when needed)
    3. Work (~500 MB, put your programs here)
    4. Big (~3000 MB, put your data and games here)
  4. I found SanDisk 4 GB cards to be painless and they are what I have used (tested with “SanDisk Ultra” and “SanDisk Extreme III”, image and process works on both).
    1. Cards might have a few sectors more or less, which was not a problem when I tried it, but your mileage might vary.
    2. You don’t have to buy the faster cards, as the Amiga’s IDE-controller is the bottleneck anyway

The setup of the card is partially based on the excellent German tutorial by Kai Scherrer. His description of how to use the Windows-based diskpart was especially helpful to me.

For me, setting up a CF-card for Amiga-use is now quick and easy and I hope you can agree. Enjoy!

 

Developing Prototype 1 for Amiga on PC using a mixture of C and 68k assembly

May 7th, 2011

This text summarizes the tools and workflows that we used during the development of our Amiga demo Prototype 1, which was released at Breakpoint 2010.

Introduction

The development of Prototype 1 implicated programmers with different backgrounds ranging from high-level C/C++ engine coding to low-level Motorola 68k assembly coding. Hence we decided to devise a tool-chain that supported mixing C and assembly, which didn’t break backward compatibility, and which worked under WinUAE. C should be used for higher development speed of the 3D engine and some effects, while assembly should be used for time-critical parts like texture-mapping inner-loops, chunky to planar conversion, and also some effects.

Mixing C and assembly requires the use of a linker. While this might seem commonplace for the C coder, it is not necessarilly so for the Amiga assembly coder, who might be used to assemblers that directly generate executeable code and which are not useable for generating the required linkable object code. ASM-One and its derivates are popular examples of such assemblers, and I personally like them a lot. But while I previously used ASM-One as my main assembler IDE, it only played a secondary role in this development process. ASM-One has only been used for two tasks: for porting Optima’s effects to the WickedOS demo system, and for fine-tuning the pure assembly effects due to its short turn-around times. Those effects where later assembled to executable code using Devpac and called in the demo via a plug-in interface that is part of the demo system. WickedOS has also been used for handling hardware-hitting screenmodes, vertical blanc interrupts, and for providing timing facilities.

A look at the tools

The look for an alternative assembler provided two main options, vasm and Devpac, while Maxon ASM, PhxAss, and Optimizing Macro Assembler were briefly considered and then excluded for various reasons.

  • Devpac is apparantly the best and most professional assembler on Amiga IMHO. I actually always made sure that my demo-system was compatible with Devpac, but I just never used its linkable code option.
  • vasm is the assembler in the vbcc package, where it compiles the C compiler output into linkable object code. vasm supersedes PhxAss and provides a Devpac compatibility mode.

Unfortunately some of our code didn’t assemble with vasm and so we were forced to use Devpac. As Devpac is an Amiga application this meant that the tool-chain had to run under AmigaOS, i.e. in the emulator, which increased overall turn-around times.

As a compiler we used vbcc, which looked promising, seemed to be optimizing well, and had been recommended to me by Kalms at the previous Breakpoint. Using vbcc meant that we were going to programm in C99 instead of C++, which also matched Hellfire’s intent of avoiding the overhead of C++ object handling for performance reasons.

Linking was done via vlink, which is also part of the vbcc package. vlink effortlessly linked object files generated by vasm and Devpac, and so it was a clear choice.

Finally, an Amiga version of GNU Make was used to generate the executable-file of the demo.

Development workflow

Development was done on a PC, the real Amiga was only used for testing. This was for productivity reasons, as it meant that we could use modern IDE’s on big monitors, and powerful CPU’s to decrease the significant compile-times. If I remember it correctly, the demo would have taken about 20 minutes to build from scratch on the Amiga 4060 shown below.

We set up identical tool-chains on both development machines with WinUAE, vbcc, and the source folder being at the same locations. WinUAE mounted the source folder from the PC filesystem. This meant that we could use proper text-editors and version management tools for developing the Amiga sources. Using this basis we we then worked from two sides:

  • Hellfire programmed the 3D engine and some effects in Visual Studio on a PC, not even using WinUAE most of the time. To facilitate this workflow he wrote display-functions that were plug-in compatible to WickedOS, so they would later link without problems.
  • I took care of the build process in WinUAE and made sure that everything worked together as a demo.  This was mostly done in Ultraedit, with frequent builds in WinUAE. But when integrating Optima’s sources I also came to use ASM-One again :)

Discussion

The resulting control-flow in the program simply begins with startup-code from C (startup.o) calling the main() function. After some initialisation the system is disabled by calling an assembly function that contains the INITWOS macro from WickedOS. This function also installs the interrupt handlers, starts the music, and then jumps to the mainDemo() function which calls all effects one after another. Upon leaving mainDemo() the system is restored and control returns to main(), which just exits the program. While this seems straight forward in retrospect, I initially considered inverting the mechanism and calling all C-code via the run-time plug-in mechanism I devised for the demo system a long time ago. I am glad that we didn’t do it that way as it probably would have brought us all sorts of trouble.

Our tool-chain can still be much improved. First and foremost we will have to make the AmigaOS-based build process completely optional to decrease the important turn-around time. Although the build process worked nicely, it was just too slow, even in a JIT-enabled WinUAE on a fast PC. Two steps are required for us to completely switch to cross-compilation:

  1. make all our hand-crafted code compatible with vasm
  2. have same versions of vbcc/vasm/vlink on PC and Amiga.

Both steps are relatively small, but they were low on our list and were just skipped. The former should be facilitated by exploring vbcc’s Devpacs-compatibility mode a bit further. The latter could be a bit fiddly, as Frank Wille, the maintainer of vbcc/vasm/vlink for Amiga, is not maintaing a Windows installation for himself. Therefore Amiga and PC versions tend to be a bit out of sync. Maybe recent efforts such as Kusma’s “amiga-dev” could help in maintaining identical PC and Amiga versions of the tool chain?

Regarding the age-old argument that Amiga demos should be coded in pure assembly for performance reasons, I can only describe this as obsolete for various reasons when targetting “high-end” Amigas with 68060 CPU. First, the implied theoretical advantage of higher machine performance is outweigh be the improved programmers performance when coding in a language like C, which helps optimizing on a higher level by testing different ideas and implementations. And seeing Hellfire crank out the 3D engine and its related tools in no time was surely an experience that supported this position. Second, we released another demo, which would probably not have happened otherwise. Moreover, most of the chart-topping demos in recent years on Amiga (on PC anyways) were build with the help of C-compilers (TBL, Ephidrena, Elude, …). Third, those compilers are really good, e.g. I spent an evening to convert one of the more complex texture mappers (that used more variables than available registers) to hand-crafted assembly just to arrive at the conclusion that I didn’t gain any speed! This can also be seen in support of Michael Abrash statement that “the best optimizer is between your ears” (chapter 1 in his “Graphics programming” book), meaning that you shouldn’t revert to using assembly language, or any other particular technique, as the only way of optimizing, but rather optimize your overall design. Taking this even further, I recently found a nice article by Niklaus Wirth – the father of Pascal and many other languages – who reported that for implementing their first Pascal system using assembly was “considered dishonorable”. This was in 1969, so I reckon it is time to catch-up.

What remains to be done for the next demo are general code optimisations, and maybe also getting the profiler vprof to work with our system. Furthermore we might also want to reassess our initial decision against C++.

Conclusion

Not diminishing the fun I had hacking on my Amiga back in the day, I am glad that we didn’t do a 100% assembly demo this time. By making our system work with a fair mix of C and 68k assembly, we harnessed the potentials of the different coders, and came to present a demo in-time (*cough*) for the last Breakpoint, which was the main point anyway.

Acknowledgements

A big thank you to our artists Muffler and JCS, for their awesome work on the audio-visual side! Big thanks also to Hellfire and Optima for writing all the effects – in the end I only had to put things together.

Thanks to Loaderror and Kalms for sharing their ADPCM players with us, and esp. to Kalms for premium support when the deadline approached. Many thanks also to Phoenix (Frank Wille) for his great tools and friendly support. And to Wayne and Britelite for testing the final version when our hardware was broken.

Links

Please feel free to leave a comment. For ranting about the demo itself, please go to Pouet or Amiga Demoscene Archive (if available). And for watching either run it from the executable, or refer to the capture on YouTube: Haujobb – Prototype 1 [Amiga]

DCD1 – Amiga Demo CD

April 5th, 2011

In 1997 a friend of mine (Dr.Dreyer) and me (Noname) worked on a demo cd project for AGA Amigas with 68030 CPU, because that was what we and many others had at that time. Our goal was to include all our favourite demos and not allow any crap on the CD. Our vision was to have every demo working from CD without worrying about unpacking, setting assigns, fiddling with commandline tools, etc.. We also intended to provide it with a review of every included demo, as my friend was working on his demo guide back then, pack it all up with a nice GUI, and then provide it via the then common distribution channels at a similar price than the Meeting Pearls series.

Although the CD was never finished for different reasons, the compilation of demos was actually pretty complete. The disc lacks the intended graphical user interface, but comes with command-line support that allows running each demo by changing to its directory and running a single command (“j”, or”rs” for reboot-starting). This would trigger a script that prepares the system as required (e.g. set specific assigns, switch to PAL modes for some demos, kill AGA on others) and then run the demo.

Get the CD-image here (multi-file ZIP archive): dcd1amiga.zip, dcd1amiga.z01, dcd1amiga.z02, dcd1amiga.z03, dcd1amiga.z04

The ZIP contains:

  • an NRG file for burning with Nero
  • an ADF file for use with WinUAE

The ADF contains an important update (total rewrite) of the tools. Please consider using these tools and disregard the tools that are contained on the CD. Everything was geared towards A1230 with Fast-Ram. I personally had a Blizzard 1230-II 50 MHz, but it should work on other configs as well.

This 1997 project is provided here in the hope that someone will actually enjoy it.

Building Equip2 DLL from the CVS

February 12th, 2010

Equip2 is a dataspace implementation that provides flexible access to programming language objects across a variety of platforms and programming languages. It is especially well suited as a higher level datastore for distributed applications.  Equip2 provides template-based data queries into the datastore and an integrated state/event model with change notification.

Equip2 is available on Sourceforge. There is a full paper from UbiComp 2007 entitled “Addressing Mobile Phone Diversity in Ubicomp Experience Development” that describes the reasoning behind the design of Equip2. Overall, Equip2 is really well documented, but even for a developer the available information can sometimes be a bit terse. This post is meant to supplement the existing installation guide and C++ build information.

Equip2 has been used in many of the ubicomp experiences that were developed at the MRL since about 2005. However, its learning curve is quite steep and it can actually be quite scary. This is especially true when getting in touch with its elaborate Java-Bytecode to C++ Sourcecode transcoding in the build process for the first time. Here are some notes from August 2007 that summarise my  experience with the build process.

[.. after CVS checkout and following the installation guide / C++ build information..]

Problems / actions:
cl.exe was not found
This is part of Visual Studio. Running the cl.exe from the vc7/bin folder didn’t work (mspdb71.dll not fount, etc.).
The solution is to take the VC command prompt from Start>Programs>Microsoft Visual Studio .NET 2003>Visual Studio .NET Tools>Visual Studio .NET 2003 Command Prompt
(as mentioned in equip2/doc/EQUIP2_CPP_Programming.html)

WTK was not installed and not mentioned in the build docs
Download and install the WTK 2.3, 2.5.1, or newer from Sun’s webpage

>> now it was possible to build /javatrans according to http://equip.sourceforge.net/javatrans/docs/Javatrans_introduction.html#Building_and_testing
“ant jar”, “cd targets/win32”, “buildlib-win32.bat”, “buildexample-win32.bat”

buildlog4j-win32.bat cannot find “java_lang_Object.h”
The file exists three times at the following locations below /equip2:

  • build.cpp/log4j.src.cpp/dependencies/java_lang_Object.h
  • build.cpp/src.cpp/dependencies/java_lang_Object.h
  • build.cpp/test.src.cpp/dependencies/java_lang_Object.h

The file also exists where it should be included from according the the batchfile at /javatrans/src.cpp/include

The cl.exe commandline sets the includedir in respect to %javatranshome% which is not set in the commandline-environment
(and also not mentioned in env.bat).
Solution:
‘set javatranshome=”D:\CVS-Dumas\Equator\javatrans\”‘
‘buildlog4j-win32.bat’
Will lead to the next problem, because javatranshome must be set to D:\CVS-Dumas\Equator\javatrans\
so:
‘set javatranshome=D:\CVS-Dumas\Equator\javatrans\’
‘buildlog4j-win32.bat’
works!

– ‘buildequip2-win32.bat’ now builds at first try

– ‘buildequip2test-win32.bat’ now works

Hope this helped someone.

Recommencement of the Blog

February 12th, 2010

Almost two years passed since my last post to this blog in April 2008 – oh boy! But the time has been quite exciting as I got married, completed my PhD, and took a new job back in Germany.

Anyway, I am still working in the same area of interest and can thus continue on this blog project. I’ll try to post a bit more frequent in the future.

Installing Turbogears meets IMDb from scratch

April 28th, 2008

I have given my “Turbogears meets IMDb” webprogramming and scripting lecture again and produced a little video for it. You can see me getting the project to run on a vanilla machine (Python 2.5 and easy_install already installed) in less than two minutes.

The video also shows a quick walk-through of the browser-based user interface, incl.:

  1. selecting a movie from existing collection and show movie info together with own notes
  2. search for a movie with fuzzy search-terms
  3. annotate and store a movie to collection

Note: the video is encoded as Flash and plays fine in IE7 but seems to have problems playing on my Firefox. So try IE if it doesn’t seem to play on your machine.

Faces of Medieninformatik

November 27th, 2007

My former course of study “Medieninformatik” (Media Informatics) at Hochschule Harz just celebrated its 10 years jubilee on the 10th of November 2007. I had been invited to give a talk about Pervasive Gaming and it was a great pleasure to come back to the place where my academic career started and to see so many familiar faces.

Later in the evening they were running the MINFF-Award which is a kind of demo competition with strong audience feedback. Eberhard Hoegerle, our former professor, asked if we had anything to enter the competition and that there would still be more than an hour left until the deadline. So we took the challenge and created a realtime demo, based on an unreleased OpenGL routine of mine. We just made it into the competition in time and it was great fun!

You can view the final video version of this demo called “Faces” in a variety of formats:

  • DVD Image (240 MB, best quality, just burn with Nero)
  • MPEG2 file (232 MB, best quality)
  • MPEG1 file (39 MB, low quality, easy to play everywhere)
  • YouTube (online, lowest quality, easiest to play right now)

Enjoy!

PS: Photos of the event can be found at Mapeland and at Christian Schulze’s webpage. There is also a press release for those who can read German.

Heartlands (‘Ere be Dragons) won the Nokia Ubimedia MindTrek Award 2007

October 24th, 2007

We (the artist from Active Ingredient, Capra and me from MRL) recently went to Tampere / Finland to collect the “Nokia Ubimedia MindTrek Award 2007” for the heartrate-based game Heartlands (previously known as ‘Ere be Dragons).

The judges said “Heartlands (‘Ere Be Dragons) lets us discover a world on top of reality at the rhythm of our heartbeat. While running through nature or urban areas Heartlands augments our senses to perceive our body in an ingenious way. Controlling the game means controlling ourselves and thus our health. Art and technology are very rarely found to be bound to reality this tight, making an ordinary activity like running an exciting and highly motivating task by means of ubiquitous media.

MindTrek turned out to be a very nice conference. Unfortunately I had to work in my hotel room most of the time in order get another project going (see next post). I still managed to get out for a few hours and visited the Moominvalley museum, which brought back lots of childhood memories. You should go there if you ever visit Tampere.

Read a press release or two if you are interested in more details about the award.

Read a recent review of the game on Pocket Gamer and listen to an interview with artist Rachel Jacobs on BBC Radio Nottingham talking about the project. Also make sure to visit the project website and the AI blog.

TurboGears meets IMDb

May 3rd, 2007

I recently gave two guest-lectures at Nottingham University on web-programming using TurboGears. The first lecture was a general introduction to Model-View-Controller web-programming using TurboGears. The second lecture was more practical: I wanted to present a full mini-application and show the students how it was built. And I also wanted the application to be at least remotely usable and interesting – therefore I choosed to write a little movie collection web application as I thought everybody enjoys movies.

IMDb
The idea was to utilize movie summaries from the Internet Movie Database (IMDb). As you might know the IMDb is a very popular online database which covers about a million movies and more than two million people. It is one of the oldest collaborative online efforts (according to Wikipedia it launched 17.10.1990 and originated from the Usenet list rec.arts.movies of the late 1980’s) which has been acquired by Amazon in 1998.

IMDb data
What you might not know is that this supposingly closed source of information always had a free interface which you are allowed to use for private reasons. This interface consists of zipped text-files which can be downloaded from FTP servers. In the mid-nineties there was a very good programm for the Commodore Amiga computers called “Movie MUI” which used those files to built a local copy of the IMDb database and then allowed you to browse the data with a very nice graphical user interface. More recently, a Python module called IMDbPy became available. Since TurboGears is written in Python, it seemed obvious to try out IMDbPY from within TurboGears.

Required Funtionality
The idea was to be able to browse movies (using IMDb data), store your favourites and possibly annotate them. Therefore the webapp should provide the following functionality:

  • Search (fuzzy, showing matching titles)
  • Browse movie details
  • Store movie to favourites (and remove as well)
  • Add/edit notes

Webapp – Main screen
View larger

You can see a list of movies that I have compiled using the application itself. From this screen you can search the movie database or pick a movie from the collection to bring up the details, including your annotations.

Webapp – Search results
View larger

The above screenshot shows a search for “Silicon Valley Story”, which is the main part of the German title of a great 1999 TV movie originally called “Pirates of Silicon Valley”. The two interesting features to note here are:

  • You have a fuzzy search, also returning similar titles
  • You can search for non-english titles

Webapp – Movie details
View larger

This is the movie details screen. It is noteworthy that the search for the German title (which is still in the search box) has correctly led us to the movie “Pirates of Silicon Valley”. From here the user can go back to his search list, go to the main menu, store the movie to his collection or refine the searchterm.

Webapp – Store movie, edit note
View larger

You can add a note when storing the movie. Note that the movie will be stored under its original title with year of release, which is the IMDb naming convention.

Webapp – Movie in collection
View larger

The movie has been added to the collection and the custom note is display at the bottom.

Note on IMDbPY

I generated the local copy of the IMDb database on a 1.7 GHz Centrino laptop with 512 MB Ram, running a modified imdbpy2sql.py (from the IMDbPY package) with Psyco and outputting to SQLite with option autoCommit=False (?autoCommit=&). This was a very lengthy process which obviously has to be optimized in the future. It took over 11 hours to generate the indexed database on my laptop. The resulting file was just under 2 GB in size.

Here are the last lines of output from imdbpy2sql.py (look at the time spent between lines 2 and 3!):

”’[..] TOTAL TIME TO INSERT DATA: 46 minutes, 34 seconds
building database indexes (this may take a while)
# TIME createIndexes() : 646 min, 17 sec.
DONE! (in 692 minutes, 52 seconds)
”’

Summary
This was my first TurboGears project. The web application works as expected and I really enjoyed the development process. Feel free to contact me (via email or via the Xing profile provided in the sidebar) if you are interested in the sources.

First offspring of Lovecity

February 26th, 2007

26.02.2007, 12:20:
Venture, Tongue and View just created the first offspring of Lovecity. Their name is Silly. Welcome new citizen!