Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
29
Task/Subleq/Fortran/subleq.f
Normal file
29
Task/Subleq/Fortran/subleq.f
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
PROGRAM SUBLEQ0 !Simulates a One-Instruction computer, with Subtract and Branch if <= 0.
|
||||
INTEGER LOTS,LOAD !Document some bounds.
|
||||
PARAMETER (LOTS = 36, LOAD = 31) !Sufficient for the example.
|
||||
INTEGER IAR, MEM(0:LOTS) !The basic storage of a computer. IAR could be in memory too.
|
||||
INTEGER ABC(3),A,B,C !A hardware register. Could use INTEGER*1 for everything...
|
||||
EQUIVALENCE (ABC(1),A),(ABC(2),B),(ABC(3),C) !It has components.
|
||||
INTEGER INITIAL(0:LOAD) !There is no sign of a bootstrap loader sequence!
|
||||
DATA INITIAL/15,17,-1,17,-1,-1,16,1,-1,16,3,-1,15,15,0,0,-1, !These are operations, it so happens.
|
||||
1 72,101,108,108,111,44,32,119,111,114,108,100,33,10,0/ !And these happen to be ASCII character code numbers.
|
||||
Core memory initialisation.
|
||||
MEM = -66 !Accessing uninitialised memory is improper. This might cause hiccoughs..
|
||||
MEM(0:LOAD) = INITIAL !No bootstrap!
|
||||
IAR = 0 !The Instruction Address Register starts at the start.
|
||||
Commence execution of the current instruction.
|
||||
100 ABC = MEM(IAR:IAR + 2) !Load the three-word instruction.
|
||||
IAR = IAR + 3 !Advance IAR accordingly.
|
||||
IF (A .EQ. -1) THEN !Decode the instruction as per the design.
|
||||
WRITE (6,102) !Supply a prompt, otherwise, obscurity results.
|
||||
102 FORMAT (" A number:",$) !But, that will make a mess of the layout.
|
||||
READ (5,*) MEM(B) !The specified action is to read as a number.
|
||||
ELSE IF (B .EQ. -1) THEN !This is for output.
|
||||
WRITE (6,103) CHAR(MEM(A)) !As specified, interpret a number as a character.
|
||||
103 FORMAT (A1,$) !The $, obviously, states: do not end the line and start the next.
|
||||
ELSE !And this is a two-part action.
|
||||
MEM(B) = MEM(B) - MEM(A) !Perform arithmetic.
|
||||
IF (MEM(B).LE.0) IAR = C !And based on the result, maybe a GO TO.
|
||||
END IF !So much for decoding.
|
||||
IF (IAR.GE.0) GO TO 100 !Keep at it.
|
||||
END !That was simple.
|
||||
Loading…
Add table
Add a link
Reference in a new issue