Skip to content

yohannd1/conquest-vm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CONQuest

(yeah, I'm not sure what to name this yet...)

This is a 32-bit fantasy computer, mostly inspired by Uxn.

Doing this for fun.

Docs

See the Standard

To-Do List

  • Initial API
  • Implement pointer instructions
  • Implement arithmetic instructions
  • Simplify assembler and interpreter codes (use macros to avoid repetition)
  • Assembler : implement labels and jumps (maybe just a macro to set the PC to the specified address... but that might cause an unwanted increase of the program counter at the end of the loop)
    • How to track labels and references to jump both backwards and forward?
      • Maybe keep a Dict<String, Variant<Label, Vector<Addr>>
      • If we found a jump and the label isn't in the dict, create an entry and set the value to the Vector
      • If it's in the dict, then check if it's a vector (and add the instruction address) or a label (directly insert the label's address)
      • If found a label:
        • if it's in the dict as a Label, error (two labels with the same name)
        • if it's in the dict as a Vector, replace with the Label address and, for each value in the vector, replace with the label's address
        • if it's not in the dict, just add the Label entry
      • At the end of it all, if there's any label defs with no address in the list, error out with "use of undefined label"
  • Assembler : change syntax
    • Sure, I like the funny whitespace-insensitive thing, but... I think it hurts readability. It doesn't need this (if it were a forth it would, but it isn't.)
  • Implement device I/O
  • Implement common processor stuff
    • Timed interrupt (funky way to do multithreading, perhaps? - set up an interrupt to run every n cycles - a multiple of 32 i think, so i can fit it in an uint32)
    • Search more about common types of interrupts
    • Which clock? set modes for 5, 10 and 20MHz I think
  • Implement relative jumps (taking an i8 or i16, I believe!)
  • Relative jump optimizations
  • Graphics (using SDL)
    • Default rate: 60hz
    • Related interrupt
  • Audio (using SDL)
    • Should I put in a dedicated sound chip? and should it already exist (e.g. OPL3)?

About

32-bit fantasy computer in C89

Resources

Stars

Watchers

Forks