Resources

About this page

This page contains a significant amount of resources that will be useful to you throughout your CS270 journey.
You are highly advised to come here when solving assignments or recitations: many answers are actually contained within the linked resources.

Working Remotely

It is possible to work the CS 270 materials and complete the assignments remotely. You may elect to install the software on your own machine and work directly from there, or remotely connect to the CS department machines.

If you wish to use the CS department machines remotely: There are two ways to use CS department machines remotely.

SNA provides a complete guide to connect to department machines remotely.

  • Using SSH: this method gives you a direct access to a shell on a department machine, allowing you to run commands directly from there. This method does not require a significant bandwidth, since only text-based input and output is transmitted.
    A guide for accessing machines this way on Windows and Mac can be found here.
    Microsoft Windows users are advised to use MobaXTerm as their SSH client. This client has a built-in feature to transmit and receive files from your home directory at CSU, which you will need to do.
    NOTE: It is possible to run graphical programs through SSH. This requires adding the -X or -Y flags to the SSH command (Mac users will use -Y). Also for Mac users if you want to run graphical applications like logisim you will need to download and install xquartz which will fix 'No X11 DISPLAY variable set' and similar errors
  • Using a remote desktop software: the CS department has installed a remote desktop software on all machines, which lets you run a graphical environment remotely, as if you were on the physical console of the machine. This requires significantly more bandwidth than the SSH method, but it may be worth the extra comfort of use.
    The remote desktop connection uses the RDP protocol, which is natively supported on Windows, and clients exist for Linux and Mac platforms. A guide to connect to the department machines using RDP can be found here. If you run Linux and do not already have an RDP client, you can install the Vinagre client to connect via RDP to CS department machines.
    NOTE: Using RDP from off-campus locations requires using the CSU VPN. Windows and Mac users may set up the Pulse Secure client using instructions from here.
    ACNS does not provide a Linux client for Pulse Secure, but openconnect has been known to work. You may install openconnect and connect to CSU VPN using the following command: sudo openconnect --protocol=pulse https://secure.colostate.edu/2fa; once done working with CSU machines, terminate the VPN client with Control+C.

Advice: Do not use the machines shown as examples in the documentation! Due to being the ones mentioned in the documentation, they tend to receive significant traffic which may slow your sessions down. Instead, pick a machine on this page with a low load.

If you wish to work on your own machine: You can install the software used for the course on your own machine.

  • C programming assignments require a C compiler, such as gcc; if running Linux, you should install it directly using your distribution's packages (e.g. sudo apt-get install build-essential on Ubuntu)
  • LC3 programming assignments require the LC3 simulator lc3sim and assembler lc3as; these tools can be found here.
  • Logisim assignments require the logisim software (beware: classic Logisim is used for CS 270 assignments; do not use Logisim Evolution, as the assignments do not render correctly with it!). Logisim may be found here.

It is recommended that you have a Linux working environment. You can do so using a virtual machine, so that you do not have to change your operating system. A guide to installing a Linux environment in a virtual machine, along with a C compiler, lc3sim, and logisim can be found here.

Experienced Microsoft Windows users may also consider using the Windows Subsystem for Linux instead of a virtual machine.

Working in the 120 lab

In-person students can work on the assignments in the 120 lab in the Computer Science Building. You need a RamCard to access the lab.

CS 270 TAs are available at times in the 120 lab. Check the TA schedule in Teams to see when a CS 270 TA will be in the lab.

To call a TA while in the 120 lab, use the following command from a desktop machine: ~cs270/bin/help; and when you have received help, remember to unsubscribe from the list using ~cs270/bin/cancel.

Linux Operating System

The Computer Science Department maintains some useful general help information for students new to using Linux:

  • CSU Computer Science information is found here.
  • A useful Linux command reference card is found here.
  • A simple framework for printf() style debugging may be foune here.

LC-3 Programming

  • Information about using logisim on a Mac is found here
  • An overview of LC-3 commands is found here.
  • The reference sheet for LC-3 commands is found here.
  • A detailed manual, with examples for each instruction, is found here.
  • Instruction diagrams for LC3 instructions is found here.
  • An example of LC3 assembly code along with the associated symbol table and hex/binary generated by the LC3 compiler is found here.
  • An overview of options for implementing IO on the LC3 is found here.
  • Fritz Sieker's version of the LC-3 tools for Linux and Mac are found here.
  • A tutorial on how to convert C code to LC-3 assembly by Fritz Sieker is here.
  • A sheet explaining register allocation by Corentin Ferry is available here. Note that register allocation is actually a graph coloring problem, and this document shows a simplified version of what compilers like GCC or LLVM do.
  • Undesrtanding the LC3 runtime stack by Fritz Sieker is here.
  • This link presents a detailed layout of the LC3 stack during the execution of the printNum subroutine in P7.
  • Iterative Factorial implemented in C and LC3.
  • Stack Frame Examples implemented in LC3 with and without PUSH/POP.

State Machines

Number Representation

  • Website for ASCII conversion is found here.
  • Website for IEEE floating-point conversion is found here.
  • Website for two’s complement math is found here.
  • A practice sheet on number conversion is here.
  • An example of floating-point addition is here.
  • A floating-point addition worksheet is here.

C Programming

  • One of hundreds of C programming tutorials on the web can be found here.
  • Information on the C standard library, organized by include file, can be found here.
  • Cheat sheet for C debugger can be found here.
  • Engineering methodology presented in class is here.
  • C Operator Precedence is here.
  • GCC Compiler Docs here
  • C Reference here

Other useful tools...

  • Questions to almost any C programming question you can think of can be found here.
  • Very thorough site on the subtle differences between C and Java is here.
  • Stack Overflow is great for finding a variety of answers to your question from people with ranges of expertise levels, found here, or by adding "stackoverflow" to your Google search.
  • w3schools is great for web-development related languages and resources, found here.