Dr. Kees Leune

Welcome to the academic home page of Dr. Kees Leune. Everything here is related to my affiliation with Adelphi University as associate professor and chair of the computer science department. Use the navbar on the side to find main content.

Test Programs for my 8-bit computer

In my previous post, I announced that build of Ben Eater’s 8-bit Computer is done. That means it is now time to put it through its paces!

My goal is to develop a sequence of programs that will test every opcode that is available to us in the basic instruction set.

The total instruction set includes:

  • LDI x: Load the value x directly into the A-register

  • LDA x: Load the value specified at address x into the A-Register

  • STA x: Store the value in the A-register into memory location x

  • HLT: Stops program execution

  • OUT: Prints the value in the A-register to the display

  • ADD x: Adds the value stored in memory location x to the value in the A-Register and store the result in the A-register.

  • SUB x: Subtracts the value tored in memory location x from the value in the A-Register and store the result in the A-register.

  • JMP x: Continue program execution at address x.

  • JZ x: Continue program execution at address x if the Zero-bit is set in the flags.

  • JC x: Continue program execution at address x if the Carry-bit is set in the flags.

Program 1

0:  LDA [14]
1:  ADD [15]
2:  OUT
3:  HLT
14: #28 
15: #14

This program test: LDA, ADD, OUT, and HLT. If you enter the program and get the value 42 printed on the display when you run it, those instructions work. This is the program that Ben uses in his videos.

Program 2

0: LDI #1   ;   0101 0001
1: OUT      ;   1110 0001
2: ADD [15] ;   0010 1111
3: JMP 1    ;   0110 0001
15: 0000 0001

Start counting at 1 and increment the counter each time the program loops.

This program adds tests for LDI and JMP. If your program starts counting at 1, shows the value on the display, and then continues to the next number, the instructions work.

Program 3

0: LDI #15   ;  0101 1111
1: OUT      ;   1110 0001
2: SUB [15] ;   0011 1111
3: JZ 0     ;   1000 0000
4: JMP 1    ;   0110 0001
15: 0000 0001

Start counting at 15 and count down to 0. When the counter reaches 0, start back at 15. After each counter update, show the result on the display.

This program adds tests for SUB and JZ. The expected behavior is that you’ll see the counter count down from 15 to 0 (inclusive) and then restart at

Program 4

0: LDI #10  ; 0101 1010
1: STA #15  ; 0100 1111
2: LDI #5   ; 0101 0101
3: LDA #15  ; 0001 1111
4: OUT      ; 1110 1111
5: HLT      ; 1111 1111

I couldn’t really come up with a fancy one, so I kept it simple. This programs loads the value 10 into the A-register, and the stores it at memory address 15. It then changes the A-register to 5, followed by retrieving address 15 and storing it into the A-register. Lastly, the program ends.

This program adds tests for STA. If the display shows the number 5, there is a problem. If it shows the number 10, we’re all good to go.

UPDATE: I forgot to check for JC. To be continued!

It is alive!

It is alive!

The 8-bit computer works! Well– in any case: some parts of it do.

The program that Ben uses in his videos works! It outputs 42 (as it should)

0:  LDA [14]
1:  ADD [15]
2:  OUT
3:  HLT
14: #28 
15: #14

That means that the commands: LDA, ADD, OUT, HLT are implemented correctly!

In addition to my previous lessons-learned, here are some more insights:

  1. Build using the schematics. Using the videos is fine as reference, but they should not lead.

  2. Redraw the schematics if you make changes to the circuits. For example, you want to do this if you switch out components. I used KiCad.

  3. Don’t be afraid to mark up schematics. I marked them quite a bit. Sometimes with ‘L’ and ‘R’ to denote components (left or right), or with arrows to denote direction of data flow. It helps understand what’s actually going on, which is necessary to troubleshoot.

    For example:

    A-register schematic marked up

    Control logic schematic marked up

  4. Pull all unused inputs high or low so that the corresponding output is high. I used 10k resistors.

  5. Pull all outputs on the microcode EEPROMs high or low. Active low control signals get pulled high; active high control signals get pulled low. I used 10k resistors.

  6. Add current-limiting resistors to all LEDs. I forgot the program counter ones, which caused their 74LS245 to not behave nicely. This does mean that you’ll have to move stuff around on the board; there simply isn’t enough space to put LEDs with the current-limiting resistors to keep them where Ben has them in his videos.

    8-Bit computer board as of January 3, 2026

  7. Don’t skip any wires ;) It took quite a bit of troubleshooting to realize that I never connected the 74LS283s in the ALU to the A-register. Oops.

  8. When you get to the stage that you have all of the boards in use, hot-glue them to a piece of 1/8” plywood. That allows you to move your project without worrying that things are going to shift. I made mine to be the height of the computer, but gave myself about 10” in either side (left, right) so I can move my pliers, multimeter, etc. with the project.

What’s next?

Write code to test all the instructions! I’ll post updates about that too.

8-Bit Computer

I have decided to build Ben Eater’s 8-bit Computer during Winter break. The initial wiring is done. Of course, that didn’t go without issues.

  1. I ran out of wire. That’s my own fault; I changed the layout of the board and made some miscuts. I had other colored wire laying around, but that was not single-core. You’ll see some of the green stuff in the bottom-left (see below). Since it is not solid core, it also doesn’t hold shape as well.

  2. I fried a ton of LEDs in the process. So, despite reading Helpful Tips and Recommendations for Ben Eater’s 8-Bit Computer Project and not using current-limiting resistors everywhere, I went ahead and did that.

    This also solved the problem of low voltages, causing inputs not to reach TTL levels.

    LEDs were easy to get on Amazon.

  3. I must have also killed some other components along the way. I know of at least one 74LS245 and one 74LS04. Amazon to the rescue again for a set of various components and for a bunch of new inverters.

  4. The DIP switches just didn’t want to stay in the board, so I ended up having to solder some header pins to them. That fixed the issue completely.

  5. One of my memory chips was bad. Reddit to the rescue. Thanks to The8BitEnthusiast on the r/beneater subreddit, I found an updated schema using a newer memory chip in the r/beneater Subreddit.

Right now, I’m troubleshooting. It seems that the 47LS173 in the instruction register is getting all the correct input voltages, but doesn’t actually output the bus signal to the output pins.

When I remove the chip from the board and test it in isolation, it does work, however.

Build screenshot 2025-12-2

Revising my homework policy

ChatGPT, Gemini, CoPilot, etc. are all excellent tools to support learning. However, as these technologies are starting to become more easily available, we’re right back to the discussion about whether or not math teachers should allow calculators in the classroom.

Of course these tools are here to stay.

Yes, their environmental impact is huge. Yes, in a real way, they displace learning. Yes, their owners are sometimes using questionable data sets to train the models. Yes, we are handing control of our learning (and thinking) to a very small group of for-profit companies. But, in the end, it doesn’t matter. People will use the tools that are made available to them.

For the past few years, we’ve seen these tools becoming more and more powerful.

And, for the same amount of time, we’re seeing students use them to replace learning. And that should be cause for concern. IBM figured out a long time ago that computers cannot be held accountable, and, therefore, should not be empower to autonomously make decisions. That is true for learning as well. It only takes a few generations for human knowledge to be lost, and AI is rapidly sending us in that direction. Are we really moving to a future where AI is too advanced for human oversight? Some thing we’re already there.

What does that mean for me, as an instructor?

I have three types of students:

  1. Students who are very motivated to learn, and who are willing and able to put effort towards doing so. They will benefit from AI tools hugely. Using the tool as a sparring budy rather than as a substitute will enable to them go far beyond students that had to learn “just” from textbooks and lectures. This portion is typically about 25% of the overall population. As course levels go up, this fraction increases.

  2. Student’s who don’t care about learning and just want to check a box. In the U.S. system of higher private education, they’ll make it through with minimal effort. Their transcripts often contain lots of withdrawn courses and low grades (Ds and Cs), with an occasional higher grade, but they’ll earn their degree. AI won’t make it better for them, but it also won’t make it worse. This portion is generally about 20% of the overall population. As course levels go up, this fraction decreases.

  3. The group in the middle. Those who probably want to learn and are able and willing to put some effort to that. This is the group that can go either way. If they choose to use AI to support learning, they’ll benefit from it. If they choose AI to replace learing, they’ll go straight in with group 2. This is typically 50%–60% of the class size and it is pretty stable.

Observing this has led me to an important realization: “A professor’s job is to encourage and support learning.”

The emphasis is on “support learning.” I cannot learn the materials for the students so they don’t have to. I also cannot force students to learn. Learning is much like therapy. It only works when you are open to it.

At best, I can force students to hand in homework. However, while most will do that, a good portion will not do the work themselves. Instead, they’ll turn to ChatGPT and friends to do the work for them, tweak it a bit, and hand that in.

That sounds adversarial, and that is not my intention. It is just the experience of seeing the reality of the world. Academics would consider that an integrity violation, but that seems to be an outdated concept. Sometimes that lack of effort is a motivation issue; sometimes it is an economic issues, and sometimes it is a social issue. Many students work full-time to survive, or have significant family obligations. Learning takes a lot of time, and that isn’t always readily available!

As an instructor, I am expected to provide detailed and timely feedback on all work handed in by students. In reality, I often end up grading homework generated by AI sources. Again: that’s not true for all students! There is a core of motivated strong students whose goal is to learn and who are able and willing to put effort towards reaching that goal.

Effective this semester, I made a few changes:

  1. I expect each student to hand in an annotated outline of the topics we discussed in class. These outlines must be annotated with references to external sources, like a textbook. Each week’s content must fit on two pages. These notes can be brought to quizzes and exams. Notes are grades pass/fail/missing. Since they are primarily meant as student’s learning aides, I’ll provide feedback when asked. Otherwise, the only thing that’s assessed is effort. The quality of the notes will become evident during exams and quizzes.

  2. I will administer short quizzes every other week, or every third week. They’ll factor into the grade, but they’re really meant for students to understand to what extent they meet my expectations of learning. A typical quiz consists of 3–5 multiple choice questions to test knowledge (or quality of notes) and two or three short-answer questions to test understanding and application of concepts.

  3. There will be a written final exam or a proctored coding activity in a controlled environment when appropriate.

  4. There will be NO OTHER REQUIRED HOMEWORK. However, I will provide weekly exercises that are fully optional to complete. If students to hand in their solutions, I’ll provide them with timely feedback. If they don’t, that’s fine too. For the exercises, I encourage people to use any tool to support their learning. AI is included in that.

I justify this approach in a few ways:

  • It enables students take ownership of their learning. Those who choose to maximize their learning will have the benefit of my expertise and experience.

  • It reduces stress and anxiety associated with unnecessary deadlines. This is true for students, but also for me.

  • It reduces the time that I spend on grading AI-generated homework, allowing me to maximize my time with students who really want to learn.

In the end, I’m going to be curious to see what the results are, and how they compare to previous years. We’re now about three-quarters through the semester, and I feel pretty good about them. The amount of “stupid” work for me has been drastically reduced, and the outcomes seem to be pretty similar to previous years.

ECCWS2025

I’m currently visiting the German National Research Centre for Artificial Intelligence Research (DFKI) in beautiful Kaiserslautern, Germany. I am here to participate in the 24th European Conference on Cyber Warfare and Security. The conference is in full swing, and I am presenting “Supporting Cyber Intelligence Analysts With Enterprise Security Modeling”, which was developed together with Sung Kim and Chris Benson.

Although it is still early in the conference, I have noticed that sovereignty is a recurring theme. A tremendous amount of effort is being channeled into mimizing reliance of the European nation-states on non-EU entities. And it seems to be yielding results! Most of the research that is presented here is relevant, captivating, and advanced.

So much, in fact, that it may actually be that the EU is ahead of the USA when it comes to securing its digital footprint. Whether it is discussions about resilient computing, measuring the effectiveness of the use of CTI, or a view at what’s next after CVSS, the work presented here is spot-on.

Oh; and that’s just before lunch!