diff --git a/templates/pages/sega/hardware/keychip.html b/templates/pages/sega/hardware/keychip.html
new file mode 100644
index 0000000..3eac51c
--- /dev/null
+++ b/templates/pages/sega/hardware/keychip.html
@@ -0,0 +1,441 @@
+{% extends "sega.html" %} {% block title %}Ring Keychip{% endblock %} {% block body %}
+
Ring Keychip
+
+ The Ring keychip is arguably simultaniously one of the most overkill while least utilised parts of the system.
+ On-board is a PIC microcontroller, a dedicated cryptography chip, a hardware SHA engine for authentication, and
+ flash storage.
+
+Protocol
+
+ The PIC communicates with the system using a parallel bus. This bus is exposed physically on the keychip connector,
+ and in software can be accessed using \\.\mxparallel
. All bus communication is encrypted using AES 128
+ ECB, using a different key for each data direction. Send/receive is defined from the perspective of the Ring system.
+ That is, the "Send" key handles data from the Ring to the keychip, and the "Receive" key handles data from the
+ keychip to the Ring. The initial key values are:
+
+Initial receive key:
+75 6f 72 61 74 6e 65 6b 61 6d 69 68 73 75 6b 75
+Initial send key:
+66 6E 65 6B 65 72 61 77 64 72 61 68 61 67 65 73
+
+
+ All packets are first prefixed by a command ordinal (see below), then command-specific information. The base unit of
+ transfer is 16 bytes due to AES 128. Unused bytes can contain anything, however mxkeychip chooses to pad using
+ random bytes derrived from the current system time.
+
+
+Command Ordinals
+
+
+
+ Ordinal |
+ Command |
+
+
+
+
+ 0 |
+ SetKeyS |
+
+
+ 1 |
+ SetKeyR |
+
+
+ 2 |
+ SetIv |
+
+
+ 3 |
+ Decrypt |
+
+
+ 4 |
+ Encrypt |
+
+
+ 5 |
+ GetAppBootInfo |
+
+
+ 6 |
+ EepromWrite |
+
+
+ 7 |
+ EepromRead |
+
+
+ 8 |
+ NvramWrite |
+
+
+ 9 |
+ NvramRead |
+
+
+ 10 |
+ AddPlayCount |
+
+
+ 11 |
+ FlashRead |
+
+
+ 12 |
+ FlashErase |
+
+
+ 13 |
+ |
+
+
+ 14 |
+ FlashWrite |
+
+
+ 15 |
+ |
+
+
+ 16 |
+ |
+
+
+ 17 |
+ |
+
+
+ 18 |
+ |
+
+
+ 19 |
+ |
+
+
+ 20 |
+ KcGetVersion |
+
+
+ 21 |
+ SetMainId |
+
+
+ 22 |
+ GetMainId |
+
+
+ 23 |
+ SetKeyId |
+
+
+ 24 |
+ GetKeyId |
+
+
+ 25 |
+ GetPlayCounter |
+
+
+
+
+SetKeyS
+Sets the "send" encryption key. The key is changed before communication of the reply.
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 0 |
+ unused |
+
+
+ "send" encryption key |
+
+
+Response
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 0 |
+ unused |
+
+
+SetKeyR
+Sets the "receive" encryption key. The key is changed before communication of the reply.
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 1 |
+ unused |
+
+
+ "receive" encryption key |
+
+
+Response
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 1 |
+ unused |
+
+
+SetIv
+Reset the game key IV to its initial value
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 2 |
+ unused |
+
+
+Response
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 2 |
+ unused |
+
+
+Decrypt
+Decrypt a block of data using the game key
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 3 |
+ unused |
+
+
+ ciphertext to decrypt |
+
+
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 3 |
+ unused |
+
+
+ decrypted plaintext |
+
+
+Encrypt
+Encrypt a block of data using the game key
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 4 |
+ unused |
+
+
+ plaintext to encrypt |
+
+
+Request
+
+
+
+ 0 |
+ 1 |
+ 2 |
+ 3 |
+ 4 |
+ 5 |
+ 6 |
+ 7 |
+ 8 |
+ 9 |
+ A |
+ B |
+ C |
+ D |
+ E |
+ F |
+
+
+
+ 4 |
+ unused |
+
+
+ encrypted ciphertext |
+
+
+{% endblock %}