50 pointsby errorcodezero7 days ago2 comments
  • lioeters4 days ago
    Fun article and project. I enjoyed reading and playing around with it.

    My first run of `make release` failed with this error.

        cc -std=c11 -Wall -Wextra -Werror -pedantic -O3 -DNDEBUG -c -o build/main.o src/main.c
        src/main.c: In function ‘main’:
        src/main.c:23:3: error: ignoring return value of ‘fread’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result]
          23 |   fread(file, file_size, 1, fp);
              |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        cc1: all warnings being treated as errors
    
    
    It might have something to do with my local setup. It was simple enough to solve, to check the return value and exit with error code.
    • errorcodezero4 days ago
      Ah oops small mistake with the C file handling. Thank you for the kind words on my project and finding the issue I'll be sure to fix it when I get the time.
      • lioeters4 days ago
        The article was really good, explaining the details of how the virtual machine works.

        I starred the Git repo, good luck with the Hack Club!

        • errorcodezero4 days ago
          Thank you for the star. It means a lot that you found the stuff I make cool.
    • johnisgood4 days ago
      Yes, to fix it: either check its return value, or add "(void)" at the end of the function, e.g. "(void)fread(...)". Since they did not add "(void)", I assume they meant to check the return value, they just simply forgot.
  • drob5184 days ago
    Fun project. You might want to build an emulator for a real 16-bit CPU like a 6502. That would allow you to run real, existing software on it. That way you don’t have to write your own code.
    • AlexeyBrin4 days ago
      6502 is an 8-bit CPU. Writing an emulator for it would be cool though.
      • vardump4 days ago
        It's interesting how arbitrarily CPU bitness is defined. Sometimes it's the register size, sometimes data bus width and sometimes the address width.

        6502 has 8 bit registers, 8 bits wide data bus, and 16 bit addresses. Only PC register is 16-bit, but 6502 does have a zero page indirect 16-bit addressing mode.

        • drob5183 days ago
          Yea, I was thinking about the address width, but I guess it’s really an 8-bit accumulator width. LOL, and I used to hack 6502 assembly language when I was a kid. As I get older, I’m starting to understand the term “senior moment.”
        • wang_li4 days ago
          Sometimes by register size, sometimes by ALU size, sometimes by data bus width. But I've never heard of a CPU bitness defined by address bus size.
          • 4 days ago
            undefined
    • pjc504 days ago
      M68k is probably the best choice for that. Not because of the architecture but because it was so widely used.
      • dmitrygr4 days ago
        68k has too many addressing modes. It is a pain to emulate properly.
    • errorcodezero4 days ago
      Thank you! I think building an emulator for a real platform is going to be next on my list. A game console might be interesting to try especially or a 16-bit cpu like you mentioned.