Hi Everybody!
So I'm designing a 12-week course that will be one part Intel 80x86 Assembly, one part hardware (ports, buses, IO devices)(microprocessors are covered in a different course and not touched on here) and one part operating systems (staying at the overview level, they are covered in depth in another course). I've got the curriculum laid out and textbook picked. What I'm missing are lab projects. I know what I want: something that will make them practice programming in Assembly and communicate with/control the hardware to do cool stuff. This would combine the first two of the three topics of the course. Problem is, I come down with a bad case of the blank-page syndrome when I try to write down what the cool stuff could be.
I would love it if I could teach them to use something like the Arduino. Cheap hardware, simple development environment, giving them control at a low level (we can even do Assembly development on the things) as well as enough flexibility for a massive range of projects from useful to just fun. But of course I can't use the Arduino itself, since it is an Atmel CPU rather than Intel and thus has a different Assembly language. Using Intel Assembly is necessary (it's needed for the following OS course). I do not know of any Arduino-style boards that can be programmed in Intel Assembly. Do you?
Alternatively I guess I could make them control an Intel computer itself. We do have plenty of those kicking around. This would have the benefit of also forcing them to look up and read technical specs for existing hardware. Maybe if I had some kind of device they could plug into and control through the USB port, to make it do stuff (it'd be great if it was a general device, again allowing them to run wild with random applications for their projects). But again, what device? What stuff?
Keep in mind also that the students taking this course are not electrical engineers. In other words, they cannot design and build electrical circuits on boards, and I will not be giving them electronics tutorials. So the have to use basically plug-and-play devices. I'm not giving them a box of wires and resistors and capacitors and motors and telling them to build me something cool. The focus of the projects is on the programming and using existing hardware and ports, not building new hardware. That's why my first idea was to use an already-built board like the Arduino.
So that's where I'm at in my brainstorming.
I'm throwing this out here in the hopes that someone can suggest ideas that didn't come to me. If you know of a good board or device we can program in Intel Assembly. Or can think of a good project. Or you just want to throw ideas around with me, and maybe we'll come up with something by chatting.
Posts
Hi Richy!
Which flavour of Intel 80x86 assembly? Good old segment:offset 386/486-era assembly? Or moving into 32-bit protected mode Pentium-era with MMX/SSE? Modern 64-bit?
If, as I'm thinking, you're talking about beginner 386/486 era assembly, how about getting them to run DOSBox, and having them write an app that talks to the sound card that DOSBox fakes?
Port 220H and all that. Bonus points for getting it DMA accelerated, but you should be able to get something going just by hard coding delays, and manually writing values to the sound card DAC port.
They can also display text mode stuff by writing directly to ... B800:0000 or something, from memory, if they wanted. Or switch to VGA mode and write pixels to... A000:0000, if they were especially keen?
Man, it's been a while. Can't remember.