Last active
July 13, 2019 15:27
-
-
Save notwa/25b0806132085537d30ee7253ef46209 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_rng():\n", | |
" # Tetris (U), routine at 00:AB47. typical args: X=0x17, Y=0x02\n", | |
" hi, lo = 0x89, 0x88\n", | |
" def nes_rng():\n", | |
" nonlocal hi, lo\n", | |
" carry_hi = (hi & 2) ^ (lo & 2) != 0\n", | |
" carry_lo = hi & 1\n", | |
" hi = (carry_hi << 7) | (hi >> 1) # ROR\n", | |
" lo = (carry_lo << 7) | (lo >> 1) # ROR\n", | |
" return hi, lo\n", | |
" return nes_rng\n", | |
"\n", | |
"rng = make_rng()\n", | |
"samples = np.array([rng() for i in range(0x10008)])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(True, True)" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"hi, lo = samples.T\n", | |
"np.all(hi[:0x8000] == hi[0x7FFF:0xFFFF]), np.all(lo[8:0x8008] == hi[:0x8000])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"limit = 0x7FFF\n", | |
"plt.hist(hi[:limit], bins=256, range=(0, 255), density=True);" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.hist(np.diff(hi[:limit + 1]) % 256, bins=256, range=(0, 255), density=True);" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.1" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
btw this is just a linear feedback shift register, which makes this whole notebook a little pointless. oh well.