Searched Projects

Tags: programs

project.name
3 Stars     117 Views
User:

STRING CPU 1000A

STRING CPU 1000A

I have made a new version of string series CPU. This new version has a minor change. When you toggle on EN, all registers and the PC will be reset. Please read before programming this CPU. 

/0. NOP- no instruction at this address

/1. wait for input - stops PC until an input (other than zero) value is detected through DI 

/2. output ANS - output ALU ANS 

/3. output loaded - output loaded data from RAM

/4. output input - output value in DI register

/5. jump if input= - skip to different part of program if a certain value is detected in DI (address can be selected by setting the value in the "addresses" stepper)

/6. jump if ANS= - same as 5 but for ANS

/7. jump if loaded= - also same as 5 but for loaded

/8. jump - like 5, but the skipping is unconditional 

/9. output PRGM - output the value from the 'Values" section in the program EEPROM (make sure you have the program value at the same time as the instruction)

/10. load - load a value from RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/11. save ANS - save ALU ANS to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/12. save input - save value in DI to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/13. reset PC - resets the PC

/14. Set ALU operation - sets ALU CTR (set ALU CTR by using "values" section at the same time as instruction Value= OPCODE value)

/15. Jump if input> - jumps if input is > than program value (make sure you have the instruction, address, and value at the same time.)

/16. Jump if input< - same as 15, but <

/17. Jump if ANS> - same as 15, but for ALU ANS

/18. Jump if ANS< - same as 16, but for ALU ANS

/19. Jump if loaded> - same as 15, but for loaded

/20. Jump if loaded< - same as 16, but for loaded

/21. wait for input= - waits for a certain DI value (DI register doesn't save)

/22. Set PRGM to A - sets program value to ALU input A (have your value from "Values" section as same time as instruction)

/23. Set PRGM to B - same as 22, but for ALU input B

/24. save PRGM - saves program value to RAM (make sure you have the instruction, address, and value at the same time.)

/25. Reset A - resets ALU input A

/26. Reset B - resets ALU input B

/27. Reset operation - resets ALU CTR

/28. Reset loaded - clears loaded data in loaded register

/29. Reset input - clears value in DI register

/30. Reset output - clears value in output register

/31. Reset ANS - clears data in ALU ANS register

/32. Reset All REG - clears data in all registers in CPU

/33. reset RAM - clears all data in RAM

/34. Reset system - clears all data off RAM and registers

/35. set input to A - sets value in DI register to ALU input A

/36. set input to B - same as 35, but for ALU input B

/37. set loaded to A - sets loaded value to ALU input A

/38. set loaded to B - same as 37, but for ALU input B

/39. set ANS to A - sets ALU ANS to ALU input A

/40. set ANS to B - same as 39, but for ALU input B

/41. submit ANS - submits ANS to ANS register (make sure you use this instruction before clearing ALU inputs otherwise the ANS will be lost)

/42. jump if carry - same as 5, but if ALU COUT = 1

There is a programming machine that you can connect an empty EEPROM (make sure bit width is 32 and address width is 10 and don't ever use ram for programming!!!). make sure that your program is starting at EEPROM address 2 and increase the EEPROM address by one every instruction you write to EEPROM otherwise you are essentially constantly overriding instructions!


project.name
0 Stars     157 Views
User:

STRING CPU 2000

STRING CPU 2000

There is now string CPU 2000 series. This is the string CPU 2000. There has been a very major change since the 1000 series. I have added a custom ALU instead of using the one in CircuitVerse (there's still a regular ALU used to compare). this ALU supports multiplication, addition, subtraction, shifting binary values, and comparing with <,>, and =.  Please read before programming this CPU. 

CPU instructions

/0. NOP- no instruction at this address

/1. wait for input - stops PC until an input (other than zero) value is detected through DI 

/2. output ANS - output ALU ANS 

/3. output loaded - output loaded data from RAM

/4. output input - output value in DI register

/5. jump if input= - skip to different part of program if a certain value is detected in DI (address can be selected by setting the value in the "addresses" stepper)

/6. jump if ANS= - same as 5 but for ANS

/7. jump if loaded= - also same as 5 but for loaded

/8. jump - like 5, but the skipping is unconditional 

/9. output PRGM - output the value from the 'Values" section in the program EEPROM (make sure you have the program value at the same time as the instruction)

/10. load - load a value from RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/11. save ANS - save ALU ANS to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/12. save input - save value in DI to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/13. reset PC - resets the PC

/14. Set ALU operation - sets ALU CTR (set ALU CTR by using "values" section at the same time as instruction Value= OPCODE value)

/15. Jump if input> - jumps if input is > than program value (make sure you have the instruction, address, and value at the same time.)

/16. Jump if input< - same as 15, but <

/17. Jump if ANS> - same as 15, but for ALU ANS

/18. Jump if ANS< - same as 16, but for ALU ANS

/19. Jump if loaded> - same as 15, but for loaded

/20. Jump if loaded< - same as 16, but for loaded

/21. wait for input= - waits for a certain DI value (DI register doesn't save)

/22. Set PRGM to A - sets program value to ALU input A (have your value from "Values" section as same time as instruction)

/23. Set PRGM to B - same as 22, but for ALU input B

/24. save PRGM - saves program value to RAM (make sure you have the instruction, address, and value at the same time.)

/25. Reset A - resets ALU input A

/26. Reset B - resets ALU input B

/27. Reset operation - resets ALU CTR

/28. Reset loaded - clears loaded data in loaded register

/29. Reset input - clears value in DI register

/30. Reset output - clears value in output register

/31. Reset ANS - clears data in ALU ANS register

/32. Reset All REG - clears data in all registers in CPU

/33. reset RAM - clears all data in RAM

/34. Reset system - clears all data off RAM and registers

/35. set input to A - sets value in DI register to ALU input A

/36. set input to B - same as 35, but for ALU input B

/37. set loaded to A - sets loaded value to ALU input A

/38. set loaded to B - same as 37, but for ALU input B

/39. set ANS to A - sets ALU ANS to ALU input A

/40. set ANS to B - same as 39, but for ALU input B

/41. submit ANS - submits ANS to ANS register (make sure you use this instruction before clearing ALU inputs otherwise the ANS will be lost)

/42. jump if carry - same as 5, but if ALU COUT = 1

ALU operations:

0. AND

1. SUB

2. ADD

3. MULT

4. SHIFT RIGHT

5. SHIFT LEFT

6. A<B

7. A>B

8. A=B

There is a programming machine that you can connect an empty EEPROM (make sure bit width is 32 and address width is 10 and don't ever use ram for programming!!!). make sure that your program is starting at EEPROM address 2 and increase the EEPROM address by one every instruction you write to EEPROM otherwise you are essentially constantly overriding instructions!


project.name
1 Stars     56 Views
User:

STRING CPU 2000C

STRING CPU 2000C

This is the fourth CPU of the string CPU series. This CPU has a new counter that has a clock that's twice the speed of an ordinary clock. Because of this, this CPU is now twice as fast as its predecessors.

CPU instructions

/0. NOP- no instruction at this address

/1. wait for input - stops PC until an input (other than zero) value is detected through DI 

/2. output ANS - output ALU ANS 

/3. output loaded - output loaded data from RAM

/4. output input - output value in DI register

/5. jump if input= - skip to different part of program if a certain value is detected in DI (address can be selected by setting the value in the "addresses" stepper)

/6. jump if ANS= - same as 5 but for ANS

/7. jump if loaded= - also same as 5 but for loaded

/8. jump - like 5, but the skipping is unconditional 

/9. output PRGM - output the value from the 'Values" section in the program EEPROM (make sure you have the program value at the same time as the instruction)

/10. load - load a value from RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/11. save ANS - save ALU ANS to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/12. save input - save value in DI to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/13. reset PC - resets the PC

/14. Set ALU operation - sets ALU CTR (set ALU CTR by using "values" section at the same time as instruction Value= OPCODE value)

/15. Jump if input> - jumps if input is > than program value (make sure you have the instruction, address, and value at the same time.)

/16. Jump if input< - same as 15, but <

/17. Jump if ANS> - same as 15, but for ALU ANS

/18. Jump if ANS< - same as 16, but for ALU ANS

/19. Jump if loaded> - same as 15, but for loaded

/20. Jump if loaded< - same as 16, but for loaded

/21. wait for input= - waits for a certain DI value (DI register doesn't save)

/22. Set PRGM to A - sets program value to ALU input A (have your value from "Values" section as same time as instruction)

/23. Set PRGM to B - same as 22, but for ALU input B

/24. save PRGM - saves program value to RAM (make sure you have the instruction, address, and value at the same time.)

/25. Reset A - resets ALU input A

/26. Reset B - resets ALU input B

/27. Reset operation - resets ALU CTR

/28. Reset loaded - clears loaded data in loaded register

/29. Reset input - clears value in DI register

/30. Reset output - clears value in output register

/31. Reset ANS - clears data in ALU ANS register

/32. Reset All REG - clears data in all registers in CPU

/33. reset RAM - clears all data in RAM

/34. Reset system - clears all data off RAM and registers

/35. set input to A - sets value in DI register to ALU input A

/36. set input to B - same as 35, but for ALU input B

/37. set loaded to A - sets loaded value to ALU input A

/38. set loaded to B - same as 37, but for ALU input B

/39. set ANS to A - sets ALU ANS to ALU input A

/40. set ANS to B - same as 39, but for ALU input B

/41. submit ANS - submits ANS to ANS register (make sure you use this instruction before clearing ALU inputs otherwise the ANS will be lost)

/42. jump if carry - same as 5, but if ALU COUT = 1

ALU operations:

0. AND

1. SUB

2. ADD

3. MULT

4. SHIFT RIGHT

5. SHIFT LEFT

6. A<B

7. A>B

8. A=B

There is a programming machine that you can connect an empty EEPROM (make sure bit width is 32 and address width is 10 and don't ever use ram for programming!!!). make sure that your program is starting at EEPROM address 2 and increase the EEPROM address by one every instruction you write to EEPROM otherwise you are essentially constantly overriding instructions!


project.name
1 Stars     54 Views
User:

STRING CPU 3000

STRING CPU 3000

This CPU is the first 3000 series string CPU. This CPU supports a new instruction called save loaded. This instruction saves a value in the LOADED register to the memory. This is useful if you want to copy a value from one address to another.

CPU instructions:

/0. NOP- no instruction at this address

/1. wait for input - stops PC until an input (other than zero) value is detected through DI 

/2. output ANS - output ALU ANS 

/3. output loaded - output loaded data from RAM

/4. output input - output value in DI register

/5. jump if input= - skip to different part of program if a certain value is detected in DI (address can be selected by setting the value in the "addresses" stepper)

/6. jump if ANS= - same as 5 but for ANS

/7. jump if loaded= - also same as 5 but for loaded

/8. jump - like 5, but the skipping is unconditional 

/9. output PRGM - output the value from the 'Values" section in the program EEPROM (make sure you have the program value at the same time as the instruction)

/10. load - load a value from RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/11. save ANS - save ALU ANS to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/12. save input - save value in DI to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/13. reset PC - resets the PC

/14. Set ALU operation - sets ALU CTR (set ALU CTR by using "values" section at the same time as instruction Value= OPCODE value)

/15. Jump if input> - jumps if input is > than program value (make sure you have the instruction, address, and value at the same time.)

/16. Jump if input< - same as 15, but <

/17. Jump if ANS> - same as 15, but for ALU ANS

/18. Jump if ANS< - same as 16, but for ALU ANS

/19. Jump if loaded> - same as 15, but for loaded

/20. Jump if loaded< - same as 16, but for loaded

/21. wait for input= - waits for a certain DI value (DI register doesn't save)

/22. Set PRGM to A - sets program value to ALU input A (have your value from "Values" section as same time as instruction)

/23. Set PRGM to B - same as 22, but for ALU input B

/24. save PRGM - saves program value to RAM (make sure you have the instruction, address, and value at the same time.)

/25. Reset A - resets ALU input A

/26. Reset B - resets ALU input B

/27. Reset operation - resets ALU CTR

/28. Reset loaded - clears loaded data in loaded register

/29. Reset input - clears value in DI register

/30. Reset output - clears value in output register

/31. Reset ANS - clears data in ALU ANS register

/32. Reset All REG - clears data in all registers in CPU

/33. reset RAM - clears all data in RAM

/34. Reset system - clears all data off RAM and registers

/35. set input to A - sets value in DI register to ALU input A

/36. set input to B - same as 35, but for ALU input B

/37. set loaded to A - sets loaded value to ALU input A

/38. set loaded to B - same as 37, but for ALU input B

/39. set ANS to A - sets ALU ANS to ALU input A

/40. set ANS to B - same as 39, but for ALU input B

/41. submit ANS - submits ANS to ANS register (make sure you use this instruction before clearing ALU inputs otherwise the ANS will be lost)

/42. jump if carry - same as 5, but if ALU COUT = 1

/43. save loaded - saves loaded value to memory (make sure you use instruction and address at same time)

ALU operations:

0. AND

1. SUB

2. ADD

3. MULT

4. SHIFT RIGHT

5. SHIFT LEFT

6. A<B

7. A>B

8. A=B

There is a programming machine that you can connect an empty EEPROM (make sure bit width is 32 and address width is 10 and don't ever use ram for programming!!!). make sure that your program is starting at EEPROM address 2 and increase the EEPROM address by one every instruction you write to EEPROM otherwise you are essentially constantly overriding instructions!


project.name
2 Stars     69 Views
User:

STRING CPU 3000SA

STRING CPU 3000SA

The Sixth string CPU has finally arrived. This new CPU has a new function in the ALU called RAND This is a simple function which the ALU can output a random value. The second new thing is the way the string CPU writes to the value memory. In the older string CPUS, the write pin would be triggered when a value above 0 is detected being saved in a save instruction, which severely bottlenecks the processor's ability to operate. since you can't override a value above 0 with 0 in the memory. This new system, however, activates the write pin when a save instruction is detected. This means that values in the memory can now be overridden with 0 in save instructions! 

CPU instructions:

/0. NOP- no instruction at this address

/1. wait for input - stops PC until an input (other than zero) value is detected through DI 

/2. output ANS - output ALU ANS 

/3. output loaded - output loaded data from RAM

/4. output input - output value in DI register

/5. jump if input= - skip to different part of program if a certain value is detected in DI (address can be selected by setting the value in the "addresses" stepper)

/6. jump if ANS= - same as 5 but for ANS

/7. jump if loaded= - also same as 5 but for loaded

/8. jump - like 5, but the skipping is unconditional 

/9. output PRGM - output the value from the 'Values" section in the program EEPROM (make sure you have the program value at the same time as the instruction)

/10. load - load a value from RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/11. save ANS - save ALU ANS to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/12. save input - save value in DI to RAM (make sure you have your address from the "addresses" section at the same time as the instruction)

/13. reset PC - resets the PC

/14. Set ALU operation - sets ALU CTR (set ALU CTR by using "values" section at the same time as instruction Value= OPCODE value)

/15. Jump if input> - jumps if input is > than program value (make sure you have the instruction, address, and value at the same time.)

/16. Jump if input< - same as 15, but <

/17. Jump if ANS> - same as 15, but for ALU ANS

/18. Jump if ANS< - same as 16, but for ALU ANS

/19. Jump if loaded> - same as 15, but for loaded

/20. Jump if loaded< - same as 16, but for loaded

/21. wait for input= - waits for a certain DI value (DI register doesn't save)

/22. Set PRGM to A - sets program value to ALU input A (have your value from "Values" section as same time as instruction)

/23. Set PRGM to B - same as 22, but for ALU input B

/24. save PRGM - saves program value to RAM (make sure you have the instruction, address, and value at the same time.)

/25. Reset A - resets ALU input A

/26. Reset B - resets ALU input B

/27. Reset operation - resets ALU CTR

/28. Reset loaded - clears loaded data in loaded register

/29. Reset input - clears value in DI register

/30. Reset output - clears value in output register

/31. Reset ANS - clears data in ALU ANS register

/32. Reset All REG - clears data in all registers in CPU

/33. reset RAM - clears all data in RAM

/34. Reset system - clears all data off RAM and registers

/35. set input to A - sets value in DI register to ALU input A

/36. set input to B - same as 35, but for ALU input B

/37. set loaded to A - sets loaded value to ALU input A

/38. set loaded to B - same as 37, but for ALU input B

/39. set ANS to A - sets ALU ANS to ALU input A

/40. set ANS to B - same as 39, but for ALU input B

/41. submit ANS - submits ANS to ANS register (make sure you use this instruction before clearing ALU inputs otherwise the ANS will be lost)

/42. jump if carry - same as 5, but if ALU COUT = 1

/43. save loaded - saves loaded value to memory (make sure you use instruction and address at same time)

ALU operations:

0. AND

1. SUB

2. ADD

3. MULT

4. SHIFT RIGHT

5. SHIFT LEFT

6. A<B

7. A>B

8. A=B

9. RAND

There is a programming machine that you can connect an empty EEPROM (make sure bit width is 32 and address width is 10 and don't ever use ram for programming!!!). make sure that your program is starting at EEPROM address 2 and increase the EEPROM address by one every instruction you write to EEPROM otherwise you are essentially constantly overriding instructions! (I know, disgusting machine code. Comment in string CPU comparison if you want to, suggest a way to type code for the CPU.)


project.name
5 Stars     181 Views
User:

Overview

The STRING32000 is a 32-bit CPU. It reads and executes each instruction in 1 clock cycle like all the old string CPUS. It has addressed pins and can modify its own code. While this CPU usually needs special external circuitry to interact with complex outputs like the RGB LED matrix, these external drive circuits are just meant to store the bitmap being drawn on the screen. The overall unspecialized nature of this CPU allows it to address up to input and output 65,536 32-bit pins.

Self-modifying code

Probably the most exciting feature about this CPU is that it can write to its main memory, which is where its program is stored. This means it supports self-modifying code. Self-modifying code is the ability for the computer to alter its own code that it is running. This was very very annoying to get working properly.

Executing values in registers as instructions

The second most exciting feature of this CPU is temporary instructions. This means that the CPU can make a very temporary custom instruction and execute it while it's in a register instead of being in something permanent like main memory, which is much safer since it decreases the risk of accidental corruption of the program. This was mildly annoying to get working.

Memory

There are two memories, which are both 32-bit with 16-bit addresses. The main memory sits outside the CPU and is nonvolatile and stores the program to execute and data to save. The second memory is also located outside the CPU and is volatile and used to store temporary values that are needed when operating, for example cursor position. For the safety of the program and the user's mental wellbeing, the CPU cannot activate the reset pin on the main memory to delete its own program all at once, since if there was some dumb bug and the CPU deleted data that the user didn't have a copy of, that could result in severe depression because of how heartbreaking it would be for an entire program that you didn't have a copy of to be deleted in the blink of an eye. So yeah, better to be safe than sorry.

About the morbidly obese main memory

Since the only memory that can be edited by circuitry and be used as permanent storage (EEPROM) only supports up to 10-bit addresses and STRING32000 supports up to 16-bit addresses, I have decided connect 64 EEPROM, which in total supports up to 16-bit addresses, fully utilizing the CPU's address space.

STRING32 excel Assembler:

The documentation on how to program the CPU is in the assembler. To use it, you'll need to download it.

Link: https://1drv.ms/x/c/fa007333c2aab537/EUIHbqhMAVpLr7OQLWN3YP4BNOPuOfYEncFrDDHcGgUxyg?e=LO1VnA

-----------------------

This computer currently only runs one program where you can make 32x32 pictures in black and white, but I'll make more programs for it in the future.

Controls for 32x32 painter:

keyboard controls: WASD to move cursor, Q to display an image, E to toggle pixel between black and white.

stepper: Use to select the picture slot. There is a face drawn in slot 0

PWR and EN: toggle both on to run. PWR is the main switch and EN freezes the clock when disabled.

-----------------------

CREDITS:

Credit to Sanderokian Stfetoneri (author of Femto) for the fast clock circuit

FORK FOR BEST USER EXPIERIENCE