12 comments

[ 3.5 ms ] story [ 42.7 ms ] thread
Could anyone ELI5?
I clicked on SELECT on the bottom to select a program: max. Then, I clicked RUN. After the LMC did its work, I wrote a number in the INPUT box and pressed Enter. After the LMC did its work again, I wrote another number in the INPUT box and pressed Enter again. After the LMC did its work, the greatest number was displayed in the OUTPUT box.
Just wanted to say thank you for replying!
(comment deleted)
This is a great simulation.

I've used it with 12 and 13 year olds to help explain how a computer works - https://www.bournetocode.com/projects/8-CS-Computers/pages/6...

Peter is a very helpful guy as well. He sent me his files so I could host the simulation and avoid problems with cross-site scripting. He even made alterations to make it easier to control the LMC using opcodes rather than Assembly.

This is a nice implementation.

I made something similar [1], based on the Post Room Computer [2].

Basically it is a two address (operand) modification of the LMC. It was used to as a teaching tool for undergrad students at my local university.

It's a bit more fully featured - It supports absolute and register based address modes, macros, programs spanning multiple files. The computer is accessible via command line or using the in-built Java Swing UI.

If anyone is bored and wanted to run it, heres a sample program:

  ;; A simple multiplication program

  INP :x:		; Input value and store at location :x:
  INP :y:		; Input value and store at location :y:
  MOV :result: :x:	; Copy the value at :x: into :result:

  ; Multiplication loop
  :loop:		
	  SUB :y: :one:	; Substract 1 from the the value at :y:
	  JMP EQZ :end:	; If result of subtraction was 0, stop looping
	  ADD :result: :x:	; Add the value at :x: to the result
	
  ; If the program reaches this stage multiplication is not complete
  ; So jump back to start of loop
  JMP LWY :loop:

  :end:		; Label to exit the loop
  OUT :result:	; Output the result
  HLT		; Stop execution

  ; Data Stores
  :x: (0)
  :y: (0)
  :result: (0)
  :one: (1)
[1] https://github.com/Richard-Walton/The-Post-Room-Computer

[2] http://eprints.hud.ac.uk/2518/

> Post Room Computer

Given that your link spells this "Postroom Computer" and is British, I'm guessing it has to do with mail (as in, the post; as in, what there is none of on Sundays) as opposed to any of the work of Emil Post, who formalized computation similarly to, independently of, but less famously than, Turing.

https://en.wikipedia.org/wiki/Emil_Leon_Post

Yes, correct :).

In the "Post Room Computer" analogy, the little man works in a post (mail) room.

The mailboxes are memory, in/out trays are IO, etc etc.

It's interesting working with this kind of limited instruction set.

I made a thing that fills the memory with the sequence of numbers from LEN to 1 and outputs it.

          BRA START
  DEST    DAT 60 // Where to start writing
  LEN     DAT 40 // Size of the sequence
  UNIT    DAT 1
  START   LDA DEST
          ADD STOREI
          STA STOREI
  LOOP    LDA LEN
  STOREI  STA 0 // Self modifying code be here
          OUT
          SUB UNIT
          BRZ END // Halt after writing last number
          STA LEN
          LDA STOREI
          ADD UNIT
          STA STOREI
          BRA LOOP
  END     HLT
This is surprisingly fun!