GithubHelp home page GithubHelp logo

x80's Introduction

πŸ‡·πŸ‡Ί πŸ‡¬πŸ‡§

x80 - i8080-PROperly

The RISC-Technology (Rebused Instruction Set Computer)

The story of tries to build a processor that has intuitive clear instruction set.

  • Read the wikia
    • i8080 particulary support by commands (compactness, methods, simplicity)
    • i8086 particulary support by assembly (flexibility, pointers, registers)
    • i8080/i8086/z80 directly binary support is not provided by this project
  • Try ▢️ online demo code

Main plan

  • CPU-182:
    • 1-byte relative jumps (Jcnd $-128 .. $+127)
    • 8-bits APR (BH CH DH AL BL CL DL)
    • 16-bits pairs (BX CX DX)
    • 16-bits pointers (IP SP BP SI DI)
    • 16-bits of page RAM [0..65535]
  • CPU-18x:
    • 08x - Null-bits ALU (experience factor)
    • 18x - 8-bits ALU
    • 28x - 16-bits ALU
    • 38x - 32-bits ALU
    • 48x - 64-bits ALU
  • CPU-x82:
    • x80 - Null-modified realize (experience model)
    • x81 - First edition model
    • x82 - Second edition model
    • x83 - Thirth edition model
  • CPU-284:
    • 2-bytes relative jumps (Jcnd $-32768 .. $+32767)
    • 16-bits APR (BH CH DH AL BL CL DL)
    • 32-bits pairs (BX CX DX)
    • 24-bits pointers (IP SP BP SI DI)
    • 24-bits of page RAM [0..16777215]
  • CPU-386:
    • 3-bytes relative jumps (Jcnd $-8388608 .. $+8388607)
    • 32-bits APR (BH CH DH AL BL CL DL)
    • 64-bits pairs (BX CX DX)
    • 32-bits pointers (IP SP BP SI DI)
    • 32-bits of page RAM [up to 4 Gb]

No more any x86-crutches, like EAX or RIP. Register names has no changes, but changes binarity.


Do You still thinking the i8080-architecture hopeless obsolete? And Z80 - the felicitous clone of i8080? Modern technologies allow to rebuild all i8080-software for new architecture with minimal difficulty. Let's try it!
### Details ``` 00: HLT - It's alright, since NULL - is Final (of text file and any document) by logic; 80: NOP - Arithmetical -(-128) - is overflow and still returns the -128 anyway; FF: RET - Other Final, since 0xFF is rare code and finally of ordinary numbers. ``` :repeat_one: Representation for i8080-rudiment:
   β”Œβ”€β–ΊRET         Example:
Bx FF:Jcond $+1─┐ 1.RZ
β”Œβ”€β”€β”˜β”Œβ–ΊRcond     β”‚ 2.RNZ
β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 3.RPO

πŸ” Representation for x86-rudiment:

Bx FE:Jcond $+0─┐ 1.REPZ
↑ β”Œβ–ΊREPcond     β”‚ 2.REPNZ
β””β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 3.REPPO

πŸ”‚ Representation for internal functions as hollow calls:

   β”Œβ”€β–ΊRET         Example:
Bx FF:Ccond $+1─┐ 1.DAA
β”Œβ”€β”€β”˜β”Œβ–Ί Β«OtherΒ»  β”‚ 2.CLI/STI
β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 3.CPUID

πŸ” Representation for complex functions as overflow calls:

Bx FE:Ccond $+0─┐ 1.WAIT
↑ β”Œβ–Ί Β«ComplexΒ»  β”‚ 2.MUL/DIV
β””β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 3.MOVS/CMPS

Many of [:page_facing_up: Instructions Codes](http://htmlpreview.github.com/?http://github.com/Alikberov/x80/blob/master/emulator.html?instructions) aligned for maximal intuitive clear remembering:
Ax: Assign to registers / ALU-operations;
Bx: Branches by conditions;
Cx: Increments;
Dx: Decrements;
Fx: Functions.

βœ”οΈ Suitable solvings (for remembering):

AA: ALU - Adding          (ADD);
AC: ALU - Conjunction     (AND);
AD: ALU - Disjunction     (OR);
AE: ALU - Exclusive Or    (XOR);
... . . . . . . . . . . . . . .
BA: Branch if Altered sign (minus)
BB: Branch if Bigger (not minus)
BC: Branch if Carry
BD: Branch is "Discarry"
BE: Branch if Equal (Zero)
BF: Branch if Fictive (not equal)
... . . . . . . . . . . . . . .
CB: inCrement BX-pointer;
CC: inCrement CX-pointer;
DC: Decrement CX-pointer;
DD: Decrement DX-pointer;
... . . . . . . . . . . . . . .
CF: Carry Flag complement (CMC);
DF: Digits Flip over      (NOT);
EF: Envelope for Function (LOOP);
F0..F7: Function #n       (INT n);
FF: Function's Finish     (RET);

❔ Experimental solves:

   β”Œβ”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”
AH:β”‚??β”‚??β”‚TFβ”‚WFβ”‚PFβ”‚SFβ”‚CFβ”‚ZFβ”‚
   β””β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”˜
Flags Register (AH - ALU Heap):
Bit 0:Zero  (Null is Zero);
Bit 1:Carry (1 bit to carrier);
Bit 2:Signed(n - 2n = -n);
Bit 4:Word  (1<<4 = 16 bits mode);
Bit 5:Trace (1<<5 = Thirty two);

❔ System сode particularity:

00: Prefix SS (not HLT);

Shifted ALU

Instruction set allow to do reverse ALU-operations with accumulator (SUB,SBB,CMP):

   5B   |SUB AL,BL   ; AL = AL - BL
   AB 7F|SUB AL,0x7F ; AL = AL - 0x7F
33 5B   |SUB DH,BL   ; DH = DH - BL
33 AB 7F|SUB DH,0x7F ; DH = DH - 0x7F
44 5B   |SUB BL      ; AL = BL - AL
44 AB 7F|SUB 0x7F    ; AL = 0x7F - AL
.. .. ..
   5F   |CMP AL,BL   ; Test(AL - BL)
   AF 7F|CMP AL,0x7F ; Test(AL - 0x7F)
33 5F   |CMP DH,BL   ; Test(DH - BL)
33 AF 7F|CMP DH,0x7F ; Test(DH - 0x7F)
44 5F   |CMP BL      ; Test(BL - AL)
44 AF 7F|CMP 0x7F    ; Test(0x7F - AL)

Since other reverse operations is nonsense (ADD,ADC,AND,OR,XOR), it working like comparators:

   5C   |AND AL,BL   ; AL = AL & BL
   AC 7F|AND AL,0x7F ; AL = AL & 0x7F
33 5C   |AND DH,BL   ; DH = DH & BL
33 AC 7F|AND DH,0x7F ; DH = DH & 0x7F
44 5C   |AND BL      ; Test(BL & AL)
44 AC 7F|AND 0x7F    ; Test(0x7F & AL)

System Tricks

In/Out ports

All relative access by index pointers, where effective vector are escaped the 64K-bound, will processes like the in/out-ports.

        MOV  AL,[SP-1] ; Equal IN AL,255 if SP is 0x0000
        MOV  [SP+1],AL ; Equal OUT 1,AL if SP is 0xFFFF

Processors System Control

Processor haven't special instructions to control for inner states of unit. All PUSH/POP instructions provides access to internal register, when stack pointer aligned to bound of memory. When the SP sets in NULL or 0FFFFh, the PUSH/POP-instructions working without RAM, but with internal services registers of processor unit (debug register, task-context register, i8080-/z80-emulation). As a rule, supervisors process must to control this actions from applications and stop it any or making self.

	PUSH DX ; If SP is 0x0000, DX are writing to service registers
	PUSH AX ; Skip current service register
	POP  DX ; If SP is 0xFFFF, DX be readed from service registers
	POP  AX ; Skip current service register
	PUSH CX ; If SP is 0x0001, CX has indexing the page of service

Particulary, this is different way for access to in/out ports. In case, when services page included the hexadecimal capital ("A".."F"), it are disabled for application code as system page.

x80's People

Contributors

alikberov avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.