Converted ISA_HEX_Map.txt to an org-mode file and added minor additional details

This commit is contained in:
Jeremiah Orians 2016-06-04 13:44:44 -04:00
parent 899adf2dab
commit f3a320c25b
No known key found for this signature in database
GPG Key ID: 7457821534D2ACCD
1 changed files with 106 additions and 40 deletions

View File

@ -1,9 +1,12 @@
# Legacy NOP
* Instruction Listing
** 00 xx xx xx :: NOP
00 00 00 00 # Proper NOP
00 xx xx xx # NOP equivelent, although these instructions will all be treated as NOPs. DO NOT USE THEM.
# 4OP nn is the XOP, a = b OP c Cond d
01 nn ab cd # 4OP Integer group
** 4OP Groups
4OP nn is the XOP, a = b OP c Cond d
*** 01 nn ab cd :: 4OP Integer group
01 00 ab cd # ADD.CI a b c d :: a = b + c + CARRY? d [signed]
01 01 ab cd # ADD.CO a b c d :: a = b + c; d = CARRY? [signed]
01 02 ab cd # ADD.CIO a b c d :: a = b + c + CARRY? d; d = CARRY? [signed]
@ -24,16 +27,18 @@
01 11 ab cd # NMUX a b c d :: a = (c & b) | (d & ~b)
01 12 ab cd # SORT a b c d :: a = MAX(c, d); b = MIN(c, d) [signed]
01 13 ab cd # SORTU a b c d :: a = MAX(c, d); b = MIN(c, d) [unsigned]
**** Reserved Block
01 14 xx xx # Reserved
...
01 FF xx xx # Reserved
02 nn ab cd # 4OP Floating group
03 nn ab cd # 4OP SIMD group
04 nn ab cd # 4OP Reserved group
*** 02 nn ab cd :: 4OP Floating group
*** 03 nn ab cd :: 4OP SIMD group
*** 04 nn ab cd :: 4OP Reserved group
# 3OP nn n is the XOP, a = b OP c
05 nn na bc # 3OP Integer group
** 3OP Groups
3OP nn n is the XOP, a = b OP c
*** 05 nn na bc :: 3OP Integer group
05 00 0a bc # ADD a b c :: a = b + c [signed]
05 00 1a bc # ADDU a b c :: a = b + c [unsigned]
05 00 2a bc # SUB a b c :: a = b - c [signed]
@ -87,15 +92,19 @@
05 03 5a bc # SR1 a b c :: a = b << c [Fill with ones]
05 03 6a bc # ROL a b c :: a = ROL(b, c) [Circular rotate left]
05 03 7a bc # ROR a b c :: a = ROR(b, c) [Circular rotate right]
**** Reserved
05 03 8x xx # Reserved
...
05 FF Fx xx # Reserved
06 nn na bc # 3OP Floating group
07 nn na bc # 3OP SIMD group
08 nn na bc # 3OP Reserved group
# 2OP nn nn is the XOP, a = OP b
09 nn nn ab # 2OP Integer group
*** 06 nn na bc :: 3OP Floating group
*** 07 nn na bc :: 3OP SIMD group
*** 08 nn na bc :: 3OP Reserved group
** 2OP Groups
2OP nn nn is the XOP, a = OP b
*** 09 nn nn ab :: 2OP Integer group
09 00 00 ab # NEG a b :: a = (b > 0) ? -b : b
09 00 01 ab # ABS a b :: a = |b|
09 00 02 ab # NABS a b :: a = -|b|
@ -107,15 +116,19 @@
09 00 FF xx # Reserved
09 01 00 ab # BRANCH a b :: MEM[b] = PC; PC = a
09 01 01 ab # CALL a b :: MEM[b] = PC; b = b + (register size in bytes); PC = a
**** Reserved
09 01 02 xx # Reserved
...
09 FF FF xx # Reserved
0A nn nn ab # 2OP Floating group
0B nn nn ab # 2OP SIMD group
0C nn nn ab # 2OP Reserved group
# 1OP nn nn n is the XOP, a = OP a
0D nn nn na # 1OP group
*** 0A nn nn ab :: 2OP Floating group
*** 0B nn nn ab :: 2OP SIMD group
*** 0C nn nn ab :: 2OP Reserved group
** 1OP Groups
1OP nn nn n is the XOP, a = OP a
*** 0D nn nn na :: 1OP group
0D 00 00 0a # READPC a :: a = PC
0D 00 00 1a # READSCID a :: a = SCID
0D 00 00 2a # FALSE a :: a = 0
@ -130,16 +143,25 @@
0D 01 FF Fx # Reserved
0D 02 00 0a # PUSHPC a :: MEM[a] = PC; a = a + (register size in bytes)
0D 02 00 1a # POPPC a :: PC = MEM[a]; a = a - (register size in bytes)
**** Reserved
0D 02 00 2x # Reserved
...
0D FF FF Fx # Reserved
# 2OPI ii ii is the Immediate, a = b OP ii ii
** 2OPI Groups
2OPI ii ii is the Immediate, a = b OP ii ii
*** 2OPI Integer
0E ab ii ii # ADDI a b ii ii :: a = b + ii ii [signed]
0F ab ii ii # ADDUI a b ii ii :: a = b + ii ii [unsigned]
10 ab ii ii # SUBI a b ii ii :: a = b - ii ii [signed]
11 ab ii ii # SUBUI a b ii ii :: a = b - ii ii [unsigned]
*** 2OPI Integer signed compare
12 ab ii ii # CMPI a b ii ii :: a = b CMP ii ii [signed]
*** 2OPI Integer Load
13 ab ii ii # LOAD a b ii ii :: a = MEM[b + ii ii]
14 ab ii ii # LOAD8 a b ii ii :: a = MEM[b + ii ii] [signed 8bits]
15 ab ii ii # LOADU8 a b ii ii :: a = MEM[b + ii ii] [unsigned 8bits]
@ -152,7 +174,11 @@
1C ab ii ii # Reserved
1D ab ii ii # Reserved
1E ab ii ii # Reserved
*** 2OPI Integer unsigned compare
1F ab ii ii # CMPUI a b ii ii :: a = b CMP ii ii [unsigned]
*** 2OPI Integer store
20 ab ii ii # STORE a b ii :: MEM[b + ii ii] = a
21 ab ii ii # STORE8 a b ii :: MEM[b + ii ii] = a [signed 8bits]
22 ab ii ii # STOREU8 a b ii :: MEM[b + ii ii] = a [unsigned 8bits]
@ -166,7 +192,10 @@
2A ab ii ii # Reserved
2B ab ii ii # Reserved
# 1OPI i ii ii is the Immediate, a = a OP i ii ii
** 1OPI Groups
1OPI i ii ii is the Immediate, a = a OP i ii ii
*** Conditional Jumps
2C ai ii ii # JUMP.C a i ii ii :: Carry? a; PC = PC + i ii ii
2D ai ii ii # JUMP.B a i ii ii :: Borrow? a; PC = PC + i ii ii
2E ai ii ii # JUMP.O a i ii ii :: Overflow? a; PC = PC + i ii ii
@ -184,50 +213,87 @@
3A xx xx xx # Reserved
3B xx xx xx # Reserved
# 0OPI ii ii ii is the Immediate, OP ii ii ii
** 0OPI group
0OPI ii ii ii is the Immediate, OP ii ii ii
*** Unconditional jumps
3C ii ii ii # JUMP ii ii ii :: PC = PC + ii ii ii
# Reserved Block 0, At this time these instructions only produce a warning; but could do anything. DO NOT USE.
3D xx xx xx
** Reserved Block 0
At this time these instructions only produce a warning; but could do anything.
DO NOT USE.
3D 00 00 00 # Reserved
...
41 xx xx xx
41 FF FF FF # Reserve
# HALCODE hh hh hh is the HALCODE callID, invalid HALCODE SHOULD NOT BE USED.
42 hh hh hh
** HALCODE Group
42 hh hh hh is the HALCODE callID, invalid HALCODE SHOULD NOT BE USED.
*** HALCODE Reserved for Operating Systems
The following block contains both instructions that are reserved for Operating systems and for internal use by Operating systems
42 00 xx xx # Reserved
...
42 0F xx xx # Reserved
# Tape console HALCODE is used for interacting with any tape console attached to the system.
# In this reference implementation we will be interacting with a simplified version of the series 10 console.
# All compatible implementations need to ensure to implement functional equivelents.
# Provided of course that any deviations would not change any output specified to be written to tape.
# Padding with Zeros til start/end of page/segment however is acceptable.
# The following 3 devices must exact with the following IDs
# Keyboard/tty :: 00 00 00 00
# Tape 1 :: 00 00 11 00
# Tape 2 :: 00 00 11 01
*** Tape console HALCODE
This HALCODE is used for interacting with any tape console attached to the system.
**** Reference specific notes
In this reference implementation we will be interacting with a simplified version of the series 10 console.
All compatible implementations need to ensure to implement functional equivelents.
Provided of course that any deviations would not change any output specified to be written to tape.
Padding with Zeros til start/end of page/segment however is acceptable.
**** Standard compatibility requirements
The following 3 devices must exist with the following exact IDs
Keyboard/tty :: 00 00 00 00
Tape 1 :: 00 00 11 00
Tape 2 :: 00 00 11 01
**** Required Device HALCODE
42 10 00 00 # FOPEN :: Feed on device who's ID matches the contents register 0 until first non-zero byte is found.
42 10 00 01 # FCLOSE :: Close out writes to device who's ID matches the contents of register 0.
42 10 00 02 # FSEEK :: seek forward or backward the number of bytes specified in register 1 on the device who's ID matches the contents of register 0.
42 10 00 03 # REWIND :: rewind back to first non-zero byte found on tape.
**** Reserved Block for Hardware specific implementation details
42 10 00 04 # Reserved
...
42 10 00 FF # Reserved
**** Required Device capability HALCODE
***** Device Read HALCODE
42 10 01 00 # FGETC :: read 1 byte into register 0 from device who's ID is in register 1
***** Reserved Block for Hardware specific implementation details
42 10 01 01 # Reserved
...
42 10 01 FF # Reserved
***** Device Write HALCODE
42 10 02 00 # FPUTC :: write 1 byte from register 0 to device who's ID is in register 1
# Reserved Block 1, At this time these instructions only produce a warning; but could do anything. DO NOT USE.
43 xx xx xx
***** Reserved Block for Hardware specific implementation details
42 10 02 01 # Reserved
...
FE xx xx xx
42 10 02 FF # Reserved
# 0OP
**** Reserved Block for Future HALCODE Expansion
42 10 03 00 # Reserved
...
42 FF FF FF # Reserved
** Reserved Block 1
At this time these instructions only produce a warning; but could do anything.
DO NOT USE.
43 00 00 00 # Reserved
...
FE FF FF FF # Reserved
** 0OP
FF xx xx xx # HALT equivelent, although these instructions will all be treated as HALTs. DO NOT USE THEM.
FF FF FF FF # Proper HALT
* Encoding/Decoding Reference
** Registers
There is a direct and consistent relationship between the nybbles and the registers.
Reg0 -> 0, Reg1 -> 1, ... Reg14 -> E, Reg15 -> F