**Experiment No: 6a**. Implementation of 1x4 demultiplexer using basic gates.

Done by:

Saranga K. Mahanta

Scholar Id: 18-14-038

A simple 8-bit arithmetic logical unit.

The following commands are implemented:

Logic Operations:

[0] 000: OR

[1] 001: NAND

[2] 010:NOR

[3] 011: AND

Arithmetic Operations:

[4] 100: ADD

[5] 101: SUB

The two's complement for subtraction is implemented with a NOT Gate and an adder (which simply adds 1 to the negated input).

A simple 8-bit arithmetic logical unit.

The following commands are implemented:

Logic Operations:

[0] 000: OR

[1] 001: NAND

[2] 010:NOR

[3] 011: AND

Arithmetic Operations:

[4] 100: ADD

[5] 101: SUB

The two's complement for subtraction uses the built in component.

Functional Electronic Machine Binary Operator Yes - *8-bit cpu*

This is a work in progress right now.

*INSTRUCTION SET:*

00: NOP - Nothing

01: HLT - Halt program

02: OUT [r] - Output a register

03: LDA [d8] - Loads 8 bit data into the accumulator

04: MOV [r], A - Move register to accumulator

05: MOV A, [r] - Move accumulator to register

06: INC [r] - Increment a register

07: DEC [r] - Decrememt a register

08: ADD [r], A - Add the accumulator from a register

09: SUB [r], A - Subtract the accumulator from a register

0A: AND [r], A - And the register and accumulator

0B: IOR [r], A - OR the register and accumulator

0C: XOR [r], A - XOR the register and accumulator

0D: NOT [r] - NOT a register

0E: SRR [r] - Shift register right

0F: SRL [r] - Shift register Left

*REGISTERS:*

00: REGISTER 1

01: REGISTER 2

02: REGISTER 3

04: REGISTER 4

*Update Notes:*

The instruction set now has 16 instructions with logic operations, loading, shift, and nop.

*To-Do:*

Add WIP instructions

Add the accumulator to a register address

Increase amount of registers to 8

Add Ram manipulation instructions

Add Input to CPU

Add more operations to the ALU

Add ASCII i/o

Make a simple command line

Make an assember

Make a simple operating system for the cpu

Add rgb output

**8-bit CPU**

Working on a NEW CPU: Femboy-16!

*ASSEMBLER:*

https://output.jsbin.com/wutikij

*GPU:*

https://circuitverse.org/users/214464/projects/cb-ppu

**INSTRUCTION SET:****00:** NOP - Nothing**01: **HLT - Halt program**02: **OUT [id] - Output the accumulator out of an output**03: **LDI A, [d8] - Loads immediate 8 bit word into the accumulator**04: **MOV [r], A - Move register to accumulator**05: **MOV A, [r] - Move accumulator to register**06:** INC [r] - Increment a register**07: **DEC [r] - Decrememt a register**08: **ADD [r], A - Add the accumulator from a register**09:** SUB [r], A - Subtract the accumulator from a register**0A: **AND [r], A - And the register and accumulator**0B: **IOR [r], A - OR the register and accumulator**0C: **XOR [r], A - XOR the register and accumulator**0D:** NOT [r] - NOT a register**0E: **SRR [r] - Barrel shift accumulator right**0F:** SRL [r] - Barrel shift accumulator left**10: **JUP [d8] - Jump to a location**11: **JPP [r] - Jump to a register value**12: **JPL A, [d8] - Jump if accumulator is less than 0**13: **JZO A, [d8] - Jump if accumulator is 0**14:** JPG A, [d8] - Jump if accumulator is greater than 0**15: **JLE A, [d8] - Jump if accumulator is less than or equal to 0**16: **JGE A, [d8] Jump if accumulator is greater than or equal to 0**17: **JNZ A, [d8] Jump if accumulator is not 0**18: **CLR [r] - Clear a register**19: **INP [id] - Store INPUT id in accumulator**1A: **MOV pA, [r] - Move the value at address A register r**1B:** MOV [r], pA - Move register r into address A**1C:** MOV [p], A - Move a value in a pointer to the accumulator**1D:** MOV A, [p] - Move the accumulator to a location**1E: **MLT [r], A - Multiply register r by the accumulator**1F: **DIV [r], A - Divide register r by accumulator

**REGISTERS:****00:** REGISTER 1**01:** REGISTER 2**02:** REGISTER 3**04:** REGISTER 4**05: **ZERO FLAG (R)**06: **PC (R)

**Update Notes:**

**V4:**

So this is the 4th iteration of my CPU lol... I added a few programs for you all to try out and you can even use an assembler now!

**V5:**

Long time since I updated this... But I've added a GPU! It's called "Color burst" and you can go try out some premade programs I have added on it! There's an assembler guide with GPU dev guide and I encourage you all to go try and make some graphical programs! Also more docs can be found on it's project page.

* To-Do:*Increase amount of registers to 8

Make a simple command line

Make a simple operating system for the CPU

Functional Electronic Machine Binary Operator Yes - *8-bit cpu*

This is a work in progress right now.

*INSTRUCTION SET:*00: NOP - Nothing

01: HLT - Halt program

02: OUT [id] - Output the accumulator out of an output

03: LDI A, [d8] - Loads immediate 8 bit word into the accumulator

04: MOV [r], A - Move register to accumulator

05: MOV A, [r] - Move accumulator to register

06: INC [r] - Increment a register

07: DEC [r] - Decrememt a register

08: ADD [r], A - Add the accumulator from a register

09: SUB [r], A - Subtract the accumulator from a register

0A: AND [r], A - And the register and accumulator

0B: IOR [r], A - OR the register and accumulator

0C: XOR [r], A - XOR the register and accumulator

0D: NOT [r] - NOT a register

0E: SRR [r] - Shift register right

0F: SRL [r] - Shift register Left

10: JUP [d8] - Jump to a location

11: JPP [r] - Jump to a register value

12: JPL A, [d8] - Jump if accumulator is less than 0

13: JZO A, [d8] - Jump if accumulator is 0

14: JPG A, [d8] - Jump if accumulator is greater than 0

15: JLE A, [d8] - Jump if accumulator is less than or equal to 0

16: JGE A, [d8] Jump if accumulator is greater than or equal to 0

17: JNZ A, [d8] Jump if accumulator is not 0

18: CLR [r] - Clear a register

19: INP [id] - Store INPUT id in accumulator

1A: MOV pA, [r] - Move the value at address A register r

1B: MOV [r], pA - Move register r into address A

1C: MOV [p], A - Move a value in a pointer to the accumulator

1D: MOV A, [p] - Move the accumulator to a location

1E: MLT [r], A - Multiply register r by the accumulator

1F: DIV [r], A - Divide register r by accumulator

*REGISTERS:*

00: REGISTER 1

01: REGISTER 2

02: REGISTER 3

04: REGISTER 4

05: ZERO FLAG (R)

06: PC (R)

07: ALU Result (R)

*Update Notes:*

Welcome to the 3rd iteration of my Femboy-8 CPU! This might be the last version with 32 instructions.

*To-Do:*Increase amount of registers to 8

Make a simple command line

Make an assember

Make a simple operating system for the CPU

Add rgb output

Functional Electronic Machine Binary Operator Yes - *8-bit cpu*

Working on a new CPU: Femboy-16

*ASSEMBLER:*

https://output.jsbin.com/wutikij

*INSTRUCTION SET:*00: NOP - Nothing

01: HLT - Halt program

02: OUT [id] - Output the accumulator out of an output

03: LDI A, [d8] - Loads immediate 8 bit word into the accumulator

04: MOV [r], A - Move register to accumulator

05: MOV A, [r] - Move accumulator to register

06: INC [r] - Increment a register

07: DEC [r] - Decrememt a register

08: ADD [r], A - Add the accumulator from a register

09: SUB [r], A - Subtract the accumulator from a register

0A: AND [r], A - And the register and accumulator

0B: IOR [r], A - OR the register and accumulator

0C: XOR [r], A - XOR the register and accumulator

0D: NOT [r] - NOT a register

0E: SAR [d8] - Barrel shift accumulator right

0F: SAL [d8] - Barrel shift accumulator left

10: JUP [d8] - Jump to a location

11: JPP [r] - Jump to a register value

12: JPL A, [d8] - Jump if accumulator is less than 0

13: JZO A, [d8] - Jump if accumulator is 0

14: JPG A, [d8] - Jump if accumulator is greater than 0

15: JLE A, [d8] - Jump if accumulator is less than or equal to 0

16: JGE A, [d8] Jump if accumulator is greater than or equal to 0

17: JNZ A, [d8] Jump if accumulator is not 0

18: CLR [r] - Clear a register

19: INP [id] - Store INPUT id in accumulator

1A: MOV pA, [r] - Move the value at address A register r

1B: MOV [r], pA - Move register r into address A

1C: MOV [p], A - Move a value in a pointer to the accumulator

1D: MOV A, [p] - Move the accumulator to a location

1E: MLT [r], A - Multiply register r by the accumulator

1F: DIV [r], A - Divide register r by accumulator

*REGISTERS:*

00: REGISTER 1

01: REGISTER 2

02: REGISTER 3

04: REGISTER 4

05: ZERO FLAG (R)

06: PC (R)

07: ALU Result (R)

*Update Notes:*

So this is the 4th iteration of my CPU lol... I added a few programs for you all to try out and you can even use an assembler now!

*To-Do:*Increase amount of registers to 8

Make a simple command line

Make an assember

Make a simple operating system for the CPU

Add rgb output