Trocha som zase pátral po informáciach o (nedokumentovaných) inštrukciách CPU 8085. Našiel som dva pekné 8085 cheatsheet-y
Jeden je tu:
http://saundby.com/electronics/8085/8085Ref.pdf
Druhý od Pavla Zímu je tu:
http://pastraiser.com/cpu/i8085/i8085_opcodes.html
Obsahujú aj nedokumentované inštrukcie, ten od Pavla dokonca aj ich časovanie a popis zmeny príznakov.
No a čo je hlavné, podarilo sa mi získať takmer 40 ročný dokument, priamo z ... :-) Nie celý. Ten veľmi milý pán, ktorý to skladoval celé tie roky mi oscanoval časť popisujúcu to čo nikdy nemalo byt zverejnené. Kedysi pracoval v ... a priamo na 8085.
Takže tu je to prepísané a k dispozícii ďalším fandom do vykopáviek. Z pochopiteľných dôvodov sem nebudem dávať scan. Z tých istých dôvodov sú tu aj bodky namiesto mena istej známej firmy. Pre známych je dokument k nahliadnutiu u mňa :-)
Začnem tým čo sa vyskytuje na toľkých miestach na webe:
Popis
DSUB
BC pair is subtracted from HL Pair affecting all flags. HL = HL - BC. Táto inštrukcia je opak DAD B.
Hex Code: 08h
States: 10
Flags: Z,CY,S,P,AC,V,K
JNK [16bit location]
Jump to Location if 'K' flag is reset
Hex code : DDh
States: 7/10
Flags: unaffected
JK [16bit location]
Jump to Location if 'K' flag is set
Hex Code: FDh
States: 7/10
Flags: unaffected
ARHL
Arithmetic right shift of HL register pair. MSB of the H register which means the mark does not change. The least significant bit of L register enters into the CY flag.
Hex code : 10h
States: 7
Flags: CY,V
RDEL
Rotate Left DE Pair
Hex code: 18h
States: 10
Flags: CY - depends on Bit 15
LDHI data
Add Immediate to HL pair. DE = HL + imm
Hex Code : 28h
States: 10
Flags: unaffected
LDSI data
Add Immediate to Stack Pointer. DE < - SP + imm
Description: Adds an 8 byte number to the SP
Hex Code : 38H
States: 10
Flags: unaffected
RSTV
Description: Does a RST 8 instruction when the 'V' (must be overflow)flag is SET.
Hex Code: CBh
States: 6/12
Flags: unaffected
LHLX
Description: Loads HL Pair with the contents of address stored in the DE pair. HL = [DE]
Hex Code: EDh
States: 10
Flags: unaffected
SHLX
Description: Stores the HL Pair contents to the address specified in the DE pair. [DE] = HL
Hex Code: D9h
States: 10
Flags: unaffected
Popis príznakov
Pribudli dva nové príznaky K a V. Mali hlavne uľahčiť prácu s číslami so znamienkom.
K príznak je bit 5 v PSW registri. V je bit 1.
V príznak je: carry príznak do najvyššieho bitu "exclusive-or" carry príznakom z najvyššieho bitu(čo je C, bit 0 v F registri) - čo je štandardný výpočet pretečenia pre sčítanie a odčítanie so znamienkom.
Popis flagu podľa dokumentu je:
Overflow. Set if signed overflow occurs. V is affected by DAD, DSUB, RDEL, the rotates and any instruction which affects S, AC and P.
Skoro všade je príznak K popísaný zmätočne a navyše aj nesprávne. Dá sa nájsť takáto rovnica:
K = S1 & S2 | S1 & R | S2 & R.
Je to zle, neplatí to v určitých prípadoch. K príznak je v skutočnosti: V príznak "exclusive-or" S príznak.
Správny popis flagu podľa dokumentu je:
Greater than. Set if a signed greater than occurs in a comparison or subtraction (i.e. BC > HL in DSUB). Cleared if not. K is also affected by any instruction which affects S, AC and P although the result is meaningless. Additionally, INX, DCX set K if carry (borrow) occurs. This makes efficient double length loop counting possible.
Ultimátny dôkaz majú na "svedomí" fanatici, ktorý leptajú staré procesory a pod mikroskopom skúmajú kremík. Reverzným inžinierstvom už pred rokom prišli na to čo mám teraz potvrdené aj z dokumentu od toho milého pána.
http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html
A pikoška na záver. Dôvod "utajenia" nebol ani problém s chybovosťou a ani (teda nehralo to hlavnú úlohu) nekompatibilita s prichádzajúcim 8086. Bol prozaickejší. Je na to pekné české "nejsou lidi". Ale je fakt, že to nemalo prioritu. Bol to dead end. 8086 už takéto príznaky nemalo.
Na stiahnutie:
Tundra 80C85 datasheet (kde to je tiež zle :-))
80C85