User Tools

Site Tools


notes:asm:intel8085

Intel 8085

The processor of the GODS! You WISH you were as sexy and amazing as the awe inspiring squishyness that is posessed by those contributing to this processor project! Maybe if you asked nicely they'd allow you to watch as they conquer the universe…

ToDo

  • Continue working on the other instructions.(Data Transfer Group is completed except for the edit to SHLD and LHLD, Math and Logic have instruction placeholders coded and committed.)
  • Build read function to feed interpreter. Grab - Sort - File - run execute function.
  • Branch Group needs to be started.
  • Stack group needs to be started.
  • LHLD and SHLD need an incrimentation of the 2nd byte in the address at the notated location.
  • Is ALL the Logic Group included in the ALU or just part?
  • Add a SP (Stack Pointer) and PC (Program Counter) registers in the register class for useage with the registers.

Who is doing what

  • Jr018429
  • justion
  • bewanyk - Working on instructions within the register class (placeholders in place for logic and math). Cleaning and
  • rthatch2

translating the interpreter (Translator is coded, read function is next.).

8085 Subdirectory is created!

Registers

Register is started. The registers (A, B, C, D, E, H, and L) are indexed by letter. Bit selection within a register ranges from 1 to 8. Currently .set and .clear functions roughed out (may want to refine them to take individual bit entries and save with tick). The .rotate (left, insert right, and return orphaned bit) and .shift (right, insert to the left, and return orphaned bit) functions are completed and need test files. Beginnind work on the hex code commands for data transfer activities. keeping movement as a private function and the hex commands as public functions calling the move function or such as needed. Should be able to overload the move function for usage with 1, 2, and 3 byte commands. If it seems to work it can be implemented as a template for a LOT of the other commands, and will make the hassle of coding all the possibilities less so.

  • SP and CP registers need to be added. We should probably include them in the register array and then just incorporate a designation in the regConv function.

Interpreter (to tie things together)

TERP class (for the Interpreter)is going to get the commands and convert them to their appropriate hex code. Public functions will be:

  • read function which will accept the assembly file name and then turn everything over to the private side for execution.

Private will include:

  • A hex decoder, in a set of switch statements which sends commends to the register.
  • I'm toying with the idea of just accepting the name of the assembly file and putting the actual 'read from file' function here.

Arithmetic Logic Unit

I've been looking at stuff, and I'm not sure whether we should keep a translator and an interpreter, of just make the memory accessible from the register class. and go from the interpreter straight to the register where the hex command can execute. thoughts?

The memory is accessible from the register class (I've got it included at the moment. I'm just using the interpreter to change from assembly to the actual hex instruction. So you can grab from the memory within functions and do what you want with them. The memory get and put functions are public for the memory block. –BE

Register Class

Right now the Register class contains 7 registers of 8-1bit latches each. they can be utilized individually or in pairs. The g8sr class is included so all bits are stored as boolean values. Entire bytes can be moved within the class by passing an entiry g8sr object.

The basic functions are held private.

The class will accept HEX commands (prefaced with an 'i') and execute the base command for the right register or information based on that input. Register designations within the class are alphabetical. there is a conversion function [int regConv(char)] which will assign translate the character to the proper register in the array.

Flags HAVE been implemented in the Register class, but they are currently in an array. I think it'll be smoother later if we actually use individual latches named for the apropriate flags. Flags are boolean values.

The MOV r1, r2 opcodes are coded and only need a .h updated for them.

The general functions for Logical Ops to rotate right and left, and rotate through carry right and left are coded. the HEX functions need to be done for them (with some adaptation to make the general function work I think.)

Everything I'm looking at for the Register class will require the passing of either a G8SR object or a character. maybe a translation function for input of actual 8bit data for things like the ADA M opcode? Can anyone thing of a better way to handle raw data passing?

Memory

The 256kB of memory for the 8085 is being represented by a 2 dimensional array of G8SR class objects. This means the array is 256×256 with each object conatining 8-1 bit flip flop latches or 1 Byte per object.

The MEM class has get, put, private address resolution and memory dump functionality at the moment.

Instructions

Instructions come in one, two, and three byte instructions.

Byte
One Byte Instruction
One Op Code
Two byte instruction
One Op Code
Two Data or Address
Three byte instructions
One Op Code
Two Data or
Three Address
Data Transfer Group

Condition flags are not affected by this group.

Instruction Effect
MOV r1, r2 The content of register r2 is moved to register r1
MOV r, M The content of memory location, whos address is stored in registers H and L, is moved to register r
MOV M, r The content of the register r is moved to memory loaction stored in registers H and L
MVI r, data The content of byte 2 of the instruction is moved to register r.
MVI M, data The content of byte 2 of the instruction is moved to the memory location whose address is stored in H and L
LXI rp, data 16 Byte 3 of the instruction is moved to the high order register of the register pair, byte 2 is moved to the low order register.
LDA addr content of the memory location, whose address is in byte 3 and 3 of the instruction is loaded into the accumulator
STA addr Content of the accumulator is moved to the memory location indicated in bytes 2 and 3.
LHLD addr The content of the memory location at the address in bytes 2 and 3 is loaded into register L. The content of the next memory loaction is loaded into register H.
SHLD addr The content of register L is loaded into the memory location indicated in bytes 2 and 3. The content of register H is loaded into the next memory location.
LDAX rp the content of the memory location whose address is in the register pair is moved to register A.
STAX rp The content of register A is moved to the memory address loaction stored in the register pair.
XCHG The contents of rp H-L are exchanged with the contents of register pair D-L.
Arithmetic Group
Instruction Action Flags
ADD r The content of register r is added to the accumulator and the result is placed in the accumulator Z,S,P,C,AC
ADD M The content of memory at address located in H-L is added to the accumulator and result is placed in the accumulator. Z,S,P,C,AC
ADI data The content of byte 2 is added to the accumulator and result is placed in the accumulator. Z,S,P,C,AC
ADC r The content of register r and the carry flag is added to the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
ADC M The content of the memory at location stored in H-L and the carry flag is added to the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
ACI data The content of the second byte and the carry flag are added to the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
SUB r The content of register r is subtracted from the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
SUB M The content of memory location stored in H-L is subtracted from the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
SUI data The content of the second byte is subtracted from the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
SBB r The content of the register r and the carry flag are subtracted from the accumulator, and the result is sotred in the accumulator. Z,S,P,C,AC
SBB M The content of the memory location stored in H-L and the carry flag are subtracted from the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
SBI data The content of the second byte and the carry flag are subtracted from the accumulator and the result is stored in the accumulator. Z,S,P,C,AC
INR r The content of register r is incremented by 1. Z,S,P,AC
INR M The content of memory at location stored in H-L is incremented by 1. Z,S,P,AC
DCR r The content of the register r is decrimented by 1. Z,S,P,AC
DCR M The content of memory location stored in H-L is decrimented by 1. Z,S,P,AC
INX rp The content of register pair rp is incremented by 1.
DCX rp The content of register pair rp is decrimented by 1.
DAD rp The content of register pair rp is added to the register pair H-L. If there is a carry, C is set otherwise C is reset. C
DAA The 8-bit number in the accumulator is adjusted to form two four bit Binary-Coded-Decimal digits. Z,S,P,C,AC
Logical Group
ANA r content of register r is logically ANDed with the accumulator. The result is placed in the accumulator. Z,S,P,C,AC
ANA M content of memory location whose address is stored in H-L is logically ANDed with accumulator. The result is placed in the accumulator. Z,S,P,C,AC
ANI data content of byte 2 is logically ANDed with the accumulator and the result is stored in the Accumulator.
XRA r the content of the register r is XORed with the content of the accumulator and the result is stored in the accumulator.
XRA M The content of the memory location whose address is stored in H-L is XORed with the accumulator and the result is stored in the accumulator.
XRI data The content of the second byte is XORed with A and the result is stored in A.
ORA r The content of the register r is inclusive ORed with A and the result is stored in A.
ORA M The content of the memory location whose address is stored in H-L is ORed with A and the result is stored in A.
ORI data The content of the second byte of the instruction is ORed with A and the result is stored in A.
CMP r The content of the register r is subtracted from A. A remains unchanged. Condition flags are set as a result.
CMP M The content of the memory location whose address is stored in H-L is subtracted from A. A remains unchanged. Condition flags are set.
CPI data The content of the second byte of the instruction is subtracted from the accumulator. The accumulator remains unchanged. Condition flags are set.
RLC The content of the accumulator is rotated left one position. (done needs refine for HEX)
RRC The content of the accumulator is rotated right one position. (done needs refine for HEX)
RAL Rotate left through carry. (done)
RAR Rotate right through carry. (done)
CMA The accumulator is complimented (0s become 1s and 1s become 0s)
CMC The carry flag is complimented.
STC The carry flag is set to 1.
Branch Group
JMP addr
Jcondition addr
CALL addr
Ccondition addr
RET
Rcondition
RST n
PCHL
Stack I/O and Machine Command Group
PUSH rp
PUSH PSW
POP rp
POP PSW
XTHL
SPHL
IN port
OUT port
EI
DI
HLT
NOP
RIM
SIM

Individual Commands

Data Transfer Group
Command Binary Hex
MOV A, B 01111000 0x78
MOV A, C 01111001 0x79
MOV A, D 01111010 0x7A
MOV A, E 01111011 0x7B
MOV A, H 01111100 0x7C
MOV A, L 01111101 0x7D
MOV B, A 01000111 0x47
MOV B, C 01000001 0x41
MOV B, D 01000010 0x42
MOV B, E 01000011 0x43
MOV B, H 01000100 0x44
MOV B, L 01000101 0x45
MOV C, A 01001111 0x4F
MOV C, B 01001000 0x48
MOV C, D 01001010 0x4A
MOV C, E 01001011 0x4B
MOV C, H 01001100 0x4C
MOV C, L 01001101 0x4D
MOV D, A 01010111 0x57
MOV D, B 01010000 0x50
MOV D, C 01010001 0x51
MOV D, E 01010011 0x53
MOV D, H 01010100 0x54
MOV D, L 01010101 0x55
MOV E, A 01011111 0x5F
MOV E, B 01011000 0x58
MOV E, C 01011001 0x59
MOV E, D 01011010 0x5A
MOV E, H 01011100 0x5C
MOV E, L 01011101 0x5D
MOV H, A 01100111 0x67
MOV H, B 01100000 0x60
MOV H, C 01100001 0x61
MOV H, D 01100010 0x62
MOV H, E 01100011 0x63
MOV H, L 01100101 0x65
MOV L, A 01101111 0x6F
MOV L, B 01101000 0x68
MOV L, C 01101001 0x69
MOV L, D 01101010 0x6A
MOV L, E 01101011 0x6B
MOV L, H 01101100 0x6C
MOV A, M 01111110 0x7E
MOV B, M 01000110 0x46
MOV C, M 01001110 0x4E
MOV D, M 01010110 0x56
MOV E, M 01011110 0x5E
MOV M, A 01110111 0x77
MOV M, B 01110000 0x70
MOV M, C 01110001 0x71
MOV M, D 01110010 0x72
MOV M, E 01110011 0x73
MVI A, data 00111110 0x3E
MVI B, data 00000110 0x06
MVI C, data 00001110 0x0E
MVI D, data 00010110 0x16
MVI E, data 00011110 0x1E
MVI H, data 00100110 0x26
MVI L, data 00101110 0x2E
MVI M, data 00110110 0x36
LXI B-C, data 16 00000001 0x01
LXI D-E, data 16 00010001 0x11
LXI H-L, data 16 00100001 0x21
LXI SP, data 16 00110001 0x31
LDA addr 00111010 0x3A
STA addr 00110010 0x32
LHLD addr 00101010 0x2A
SHLD addr 00100010 0x22
LDAX B-C 00001010 0x0A
LDAX D-E 00011010 0x1A
LDAX H-L 00101010 0x2A
LDAX SP 00111010 0x3A
STAX B-C 00000010 0x02
STAX D-E 00010010 0x12
STAX H-L 00100010 0x22
XCHG 11101011 0xEB
Arithmetic Group
ADD B 10000000 0x80
ADD C 10000001 0x81
ADD D 10000010 0x82
ADD E 10000011 0x83
ADD H 10000100 0x84
ADD L 10000101 0x85
ADD M 10000110 0x86
ADI data 11000110 0xC6
ADC B 10001000 0x88
ADC C 10001001 0x89
ADC D 10001010 0x8A
ADC E 10001011 0x8B
ADC H 10001100 0x8C
ADC L 10001101 0x8D
ADC M 10001110 0x8E
ACI data 11001110 0xCE
SUB B 10010000 0x90
SUB C 10010001 0x91
SUB D 10010010 0x92
SUB E 10010011 0x93
SUB H 10010100 0x94
SUB L 10010101 0x95
SUB M 10010110 0x96
SUI data 11010110 0xD6
SBB B 10011000 0x98
SBB C 10011001 0x99
SBB D 10011010 0x9A
SBB E 10011011 0x9B
SBB H 10011100 0x9C
SBB L 10011101 0x9D
SBB M 10011110 0x9E
SBI data 11011110 0xDE
INR A 00111100 0x3C
INR B 00000100 0x04
INR C 00001100 0x0C
INR D 00010100 0x14
INR E 00011100 0x1C
INR H 00100100 0x24
INR L 00101100 0x2C
INR M 00110100 0x34
DCR A 00111101 0x3D
DCR B 00000101 0x05
DCR C 00001101 0x0D
DCR D 00010101 0x15
DCR E 00011101 0x1D
DCR H 00100101 0x25
DCR L 00101101 0x2D
DCR M 00110101 0x35
INX B-C 00000011 0x03
INX D-E 00010011 0x13
INX H-L 00100011 0x23
INX SP 00110011 0x33
DCX B-C 00001011 0x0B
DCX D-E 00011011 0x1B
DCX H-L 00101011 0x2B
DCX SP 00111011 0x3B
DAD B-C 00001001 0x09
DAD D-E 00011001 0x19
DAA 00100111 0x27
Logical Group
ANA B 10100000 0xA0
ANA C 10100001 0xA1
ANA D 10100010 0xA2
ANA E 10100011 0xA3
ANA H 10100100 0xA4
ANA L 10100101 0xA5
ANA M 10100110 0xA6
ANI data 11100110 0xD6
XRA B 10101000 0xA8
XRA C 10101001 0xA9
XRA D 10101010 0xAA
XRA E 10101011 0xAB
XRA H 10101100 0xAC
XRA L 10101101 0xAD
XRA M 10101110 0xAE
XRI data 11101110 0xEE
ORA B 10110000 0xB0
ORA C 10110001 0xB1
ORA D 10110010 0xB2
ORA E 10110011 0xB3
ORA H 10110100 0xB4
ORA L 10110101 0xB5
ORA M 10110110 0xB6
ORI data 11110110 0xF6
CMP B 10111000 0xB8
CMP C 10111001 0xB9
CMP D 10111010 0xBA
CMP E 10111011 0xBB
CMP H 10111100 0xBC
CMP L 10111101 0xBD
CMP M 10111110 0xBE
CPI data 11111110 0xFE
RLC 00000111 0x05
RRC 00001111 0x0F
RAL 00010111 0x17
RAR 00011111 0x1F
CMA 00101111 0x2F
CMC 00111111 0x3F
STC 00110111 0x37
Branch Group
JMP addr 11000011 0xC3
JNZ addr 11000010 0xC2
JZ addr 11001010 0xCA
JNC addr 11010010 0xD2
JC addr 11011010 0xDA
JPO addr 11100010 0xE2
JPE addr 11101010 0xEA
JP addr 11110010 0xF2
JM addr 11111010 0xFA
CALL addr 11001101 0xCD
CNZ addr 11000100 0xC4
CZ addr 11001100 0xCC
CNC addr 11010100 0xD4
CC addr 11011100 0xDC
CPO addr 11100100 0xE4
CPE addr 11101100 0xEC
CP addr 11110100 0xF4
CM addr 11111100 0xFC
RET 11001001 0xC9
RNZ 11000000 0xC0
RZ 11001000 0xC8
RNC 11010000 0xD0
RC 11011000 0xD8
RPO 11100000 0xE0
RPE 11101000 0xE8
RP 11110000 0xF0
RM 11111000 0xF8
RST n 11nnn111 0x
PCHL 11101001 0xE9

Register Functions

regConv(char): converts the character designation for a register into the appropriate numerical designation.

clear(): Clears all registers.

clear(char): Clears a single register by ANDing all bits by 0.

clear(char, char): Clears two registers (usefull for zeroing a register pair.)

set(char, G8SR):puts a 8bit value in the designated register.

set(char, G8SR, char, G8SR): useful for loading a register pair as it puts an 8bit value in designated registers.

get(char): returns a G8SR object from the indicated register.

shift(char, bool): Shifts indicated register to the right, inserting the supplied bit to the left and returning the ejected bit.

rotate(char, bool): Rotates the indicated register to the left, inserting the supplied bit to the right and returning the ejected bit.

And: a function that ands the accumulator with another register and returns the result to the accumulator.

notes/asm/intel8085.txt · Last modified: 2011/05/01 04:53 by bewanyk