As was foretold, we've added advertisements to the forums! If you have questions, or if you encounter any bugs, please visit this thread: https://forums.penny-arcade.com/discussion/240191/forum-advertisement-faq-and-reports-thread/
Options

Assembly / Hardware Lab Projects

RichyRichy Registered User regular
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.

sig.gif

Posts

  • Options
    DaenrisDaenris Registered User regular
    it doesn't involve hardware but in college when doing assembly we had a project that involved disassembling and debugging a "bomb." The program needed a series of passwords that ranged from simple strings to specific patterns of keypresses (including special keys, etc). If an incorrect password was given the program sent an email to the instructors. So we had to place debug points in the assembly code and figure out the assembly so we knew what passwords to provide. It was pretty cool and was in a similar overview type course - though all software based.

  • Options
    azith28azith28 Registered User regular
    Have them use minecraft to make a CPU that simulates bus interfaces :)

    Stercus, Stercus, Stercus, Morituri Sum
  • Options
    ecco the dolphinecco the dolphin Registered User regular
    edited March 2014
    Richy wrote: »
    Hi Everybody!

    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.

    ecco the dolphin on
    Penny Arcade Developers at PADev.net.
  • Options
    RichyRichy Registered User regular
    We do a lot of the segment:offset assembly in the follow-up Operating Systems course, including exactly the VGA mode display you just mentioned one week. I guess I could move those labs to the new course, and create new labs coding paging and multitasking algorithms in the OS course. That could solve my problem... although it would create new ones, namely a lot of coupling between those two courses, which is an issue because there's a summer between them and transfer students coming in. But I could work around that with a "hey remember what we did back then" lab at the beginning of the OS course.

    sig.gif
Sign In or Register to comment.