A Documenting of my Roman Numerals CHIP-8 Program This is an implementation of my Roman numerals program in machine code, for the ninth Octojam event. It's a very simple program, and trivially proven to be correct; perhaps even most of its logic could be recycled for a similar such program, even. I used the simpler tables of that tabular programming approach for this, as it was easier to comprehend at this low level. I may have decomposed my first example of this style into too many tables, truly just to demonstrate it better, but it matters not. Follows is a view of the complete program, when loaded into the MMC: 200-201 0512-0513 █▄█ ▄ █▄ A2EB 41707 I ← illinc 202-203 0514-0515 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 204-205 0516-0517 ▀▀▀█▀█▀▄ FE15 65045 primus delay ← VE 206-207 0518-0519 █▄█ █ A4E4 42212 I ← finis 208-209 0520-0521 ▀█▀█▀█▀▄ FE55 65109 Save V0→VE; I ← I + 15 20A-20B 0522-0523 █ ▀▄▄█▄ A49E 42142 I ← praeter 20C-20D 0524-0525 ▀██▀ ▄ ▄ F065 61541 secundus Load V0→V0; I ← I + 01 20E-20F 0526-0527 ▀ 4000 16384 Skip next if V0 <> 000 210-211 0528-0529 ▄▀▄▄▀ 122C 04652 Jump to regula 212-213 0530-0531 ▀██▀ ▄ █ F165 61797 Load V0→V1; I ← I + 02 214-215 0532-0533 ▄▀▄█ 50B0 20656 Skip next if V0 = VB 216-217 0534-0535 ▄▀▄ ▀ 1228 04648 Jump to iterum 218-219 0536-0537 ▄█ ▀ ▀ 51C0 20928 Skip next if V1 = VC 21A-21B 0538-0539 ▄▀▄ ▀ 1228 04648 Jump to iterum 21C-21D 0540-0541 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 21E-21F 0542-0543 █▄▀▄ █ ▄ A4D5 42197 I ← huc 220-221 0544-0545 ▀█▀█▀█▀▄ FE55 65109 Save V0→VE; I ← I + 15 222-223 0546-0547 █▄█ █ A4E4 42212 I ← finis 224-225 0548-0549 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 226-227 0550-0551 ▄ █▄ █ 129A 04762 Jump to ostendo 228-229 0552-0553 ▀▀▀███▄▀ FD1E 64798 iterum I ← I + VD 22A-22B 0554-0555 ▀▄▄▀ 120C 04620 Jump to secundus 22C-22D 0556-0557 ▀ █ █▀ A322 41762 regula I ← centesima 22E-22F 0558-0559 ▀▀▀██▄█▀ FB1E 64286 I ← I + VB 230-231 0560-0561 ▀▀▀██▄█▀ FB1E 64286 I ← I + VB 232-233 0562-0563 ▀██▀ ▄ █ F165 61797 Load V0→V1; I ← I + 02 234-235 0564-0565 ▀ ▀ ▀ 8900 35072 V9 ← V0 236-237 0566-0567 ▀ ▄▀ 8810 34832 V8 ← V1 238-239 0568-0569 ▄▄█ ▄█ 22E6 08934 Call duo digiti 23A-23B 0570-0571 █ ▄ 80A0 32928 V0 ← VA 23C-23D 0572-0573 ▄▄█ ▄█ 22E6 08934 Call duo digiti 23E-23F 0574-0575 █ ▄ ▀ 81A0 33184 V1 ← VA 240-241 0576-0577 ▄▄█ ▄█ 22E6 08934 Call duo digiti 242-243 0578-0579 █ ▄ ▀ 82A0 33440 V2 ← VA 244-245 0580-0581 ▄▄█ ▄█ 22E6 08934 Call duo digiti 246-247 0582-0583 █ ▄ ▀▀ 83A0 33696 V3 ← VA 248-249 0584-0585 █ ▀ ▀ 8980 35200 V9 ← V8 24A-24B 0586-0587 ▄▄█ ▄█ 22E6 08934 Call duo digiti 24C-24D 0588-0589 █ ▄ ▀ 84A0 33952 V4 ← VA 24E-24F 0590-0591 ▄▄█ ▄█ 22E6 08934 Call duo digiti 250-251 0592-0593 █ ▄ ▀ ▀ 85A0 34208 V5 ← VA 252-253 0594-0595 ▄▄█ ▄█ 22E6 08934 Call duo digiti 254-255 0596-0597 █ ▄ ▀▀ 86A0 34464 V6 ← VA 256-257 0598-0599 █▄▀▄ █ ▄ A4D5 42197 I ← huc 258-259 0600-0601 ▀█▀█ █▀▄ F655 63061 Save V0→V6; I ← I + 07 25A-25B 0602-0603 ▀▄█▄ █▀ A372 41842 I ← de centum 25C-25D 0604-0605 ▀▀▀███▄ FC1E 64542 I ← I + VC 25E-25F 0606-0607 ▀▀▀███▄ FC1E 64542 I ← I + VC 260-261 0608-0609 ▀▀▀███▄ FC1E 64542 I ← I + VC 262-263 0610-0611 ▀██▀ ▄▀▄ F265 62053 Load V0→V2; I ← I + 03 264-265 0612-0613 ▀ ▀ ▀ 8900 35072 V9 ← V0 266-267 0614-0615 ▀ ▄ ▀▀▀ 8710 34576 V7 ← V1 268-269 0616-0617 ▀ ▄ ▀ 8820 34848 V8 ← V2 26A-26B 0618-0619 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 26C-26D 0620-0621 █ ▄ 80A0 32928 V0 ← VA 26E-26F 0622-0623 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 270-271 0624-0625 █ ▄ ▀ 81A0 33184 V1 ← VA 272-273 0626-0627 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 274-275 0628-0629 █ ▄ ▀▄█ 8AA6 35494 VA ← VA ÷ 2; VF ← LSB 276-277 0630-0631 ▀▄▄▄▀ ▀ 8970 35184 V9 ← V7 278-279 0632-0633 ▄▄▀▄▄▄▀ 22DC 08924 Call semel 27A-27B 0634-0635 █ ▄ ▀ 82A0 33440 V2 ← VA 27C-27D 0636-0637 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 27E-27F 0638-0639 █ ▄ ▀▀ 83A0 33696 V3 ← VA 280-281 0640-0641 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 282-283 0642-0643 █ ▄ ▀ 84A0 33952 V4 ← VA 284-285 0644-0645 ▀▀ ▀ ▀ 6A00 27136 VA ← 000 286-287 0646-0647 ▄▄▀▄▄▄▀ 22DC 08924 Call semel 288-289 0648-0649 █ ▀ ▀ 8980 35200 V9 ← V8 28A-28B 0650-0651 ▄▄▀▄▄ █ 22DA 08922 Call bis 28C-28D 0652-0653 █ ▄ ▀ ▀ 85A0 34208 V5 ← VA 28E-28F 0654-0655 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 290-291 0656-0657 █ ▄ ▀▀ 86A0 34464 V6 ← VA 292-293 0658-0659 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 294-295 0660-0661 █ ▄ ▀▀▀ 87A0 34720 V7 ← VA 296-297 0662-0663 █▄▀▄▄█ A4DC 42204 I ← illuc 298-299 0664-0665 ▀█▀█ █▀█ F755 63317 Save V0→V7; I ← I + 08 29A-29B 0666-0667 ▀▀ ▄▀ 6102 24834 ostendo V1 ← 002 29C-29D 0668-0669 ▀▀ █ 6202 25090 V2 ← 002 29E-29F 0670-0671 ▀▀ ▀▀ 6300 25344 V3 ← 000 2A0-2A1 0672-0673 █▄▀▄ █ ▄ A4D5 42197 rursus I ← huc 2A2-2A3 0674-0675 ▀▀▀█▄▄█▀ F31E 62238 I ← I + V3 2A4-2A5 0676-0677 ▀██▀ ▄ ▄ F065 61541 Load V0→V0; I ← I + 01 2A6-2A7 0678-0679 █▄█▄ ▄▀▄ A2F5 41717 I ← litterae 2A8-2A9 0680-0681 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AA-2AB 0682-0683 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AC-2AD 0684-0685 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AE-2AF 0686-0687 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2B0-2B1 0688-0689 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2B2-2B3 0690-0691 ▀▀ 3000 12288 Skip next if V0 = 000 2B4-2B5 0692-0693 ▀▀▄▀ ▄ █ D125 53541 Draw 08×05 at V1,V2; VF ← XOR 2B6-2B7 0694-0695 ▀▀ 3000 12288 Skip next if V0 = 000 2B8-2B9 0696-0697 ▀▀▀ ▄ ▀ 7104 28932 V1 ← V1 + 004 2BA-2BB 0698-0699 ▀▀▀ ▀█ 7301 29441 V3 ← V3 + 001 2BC-2BD 0700-0701 ▀▀▄▄██ 330F 13071 Skip next if V3 = 015 2BE-2BF 0702-0703 ▄ ▄▀ ▀ 12A0 04768 Jump to rursus 2C0-2C1 0704-0705 ▀▀▀▀▀ ▄ 7C01 31745 VC ← VC + 001 2C2-2C3 0706-0707 █▄ ▀█ 4C64 19556 Skip next if VC <> 100 2C4-2C5 0708-0709 ▀▀ ▀▀ 6C00 27648 VC ← 000 2C6-2C7 0710-0711 ▀ ▀▀ 4C00 19456 Skip next if VC <> 000 2C8-2C9 0712-0713 ▀▀▀▀ ▀█ 7B01 31489 VB ← VB + 001 2CA-2CB 0714-0715 ▀▄ █ ▀▀ 4B28 19240 Skip next if VB <> 040 2CC-2CD 0716-0717 ▄▄ ▀▄▄▀ 12CC 04812 se Jump to se 2CE-2CF 0718-0719 ▀▀▀▀▀███ FF07 65287 mora VF ← delay 2D0-2D1 0720-0721 ▀▀▀▀▀▀ 3F00 16128 Skip next if VF = 000 2D2-2D3 0722-0723 ▄▄ ▀▄▄█ 12CE 04814 Jump to mora 2D4-2D5 0724-0725 ▄▄▄ 00E0 00224 Clear the screen 2D6-2D7 0726-0727 ▀ ▄▀ 1204 04612 Jump to primus 2D8-2D9 0728-0729 ▄▄▀▄▄▄▀ 22DC 08924 ter Call semel 2DA-2DB 0730-0731 ▄▄▀▄▄▄▀ 22DC 08924 bis Call semel 2DC-2DD 0732-0733 █ ▄ █▄█ 8AAE 35502 semel VA ← VA × 2; VF ← MSB 2DE-2DF 0734-0735 █ ▄█▄▄▀ 899E 35230 V9 ← V9 × 2; VF ← MSB 2E0-2E1 0736-0737 ▀▀▀▀▀▀ 3F00 16128 Skip next if VF = 000 2E2-2E3 0738-0739 ▀▀▀▀ ▀▄ 7A01 31233 VA ← VA + 001 2E4-2E5 0740-0741 ▄▄▄ ▄▄▄ 00EE 00238 Return 2E6-2E7 0742-0743 ▀▀ ▀ ▀ 6A00 27136 duo digiti VA ← 000 2E8-2E9 0744-0745 ▄▄▀▄▄ █ 22DA 08922 Call bis 2EA-2EB 0746-0747 ▀▀▀ ▀ 3A00 14848! illinc Skip next if VA = 000 2EC-2ED 0748-0749 ▀▀▀▀▄▀ 7A04 31236 VA ← VA + 004 2EE-2EF 0750-0751 ▄▄▄ ▄▄▄ 00EE 00238 Return 2F0-2F1 0752-0753 ▀▀ ▀ ▀ 6A00 27136 tres digiti VA ← 000 2F2-2F3 0754-0755 ▄▄▀▄▄ ▀ 22D8 08920 Call ter 2F4-2F5 0756-0757 ▄▄▄ ▄▄▄ 00EE 00238! litterae Return 2F6 0758 00 000 2F7 0759 00 000 2F8 0760 ████ 0F 015 2F9 0761 ████ 1E 030 2FA 0762 ███ E0 224 I 2FB 0763 █ 40 064 2FC 0764 █ 40 064 2FD 0765 █ 40 064 2FE 0766 ███ E0 224 2FF 0767 █ █ A0 160 V 300 0768 █ █ A0 160 301 0769 █ █ A0 160 302 0770 █ █ A0 160 303 0771 █ 40 064 304 0772 █ █ A0 160 X 305 0773 █ █ A0 160 306 0774 █ 40 064 307 0775 █ █ A0 160 308 0776 █ █ A0 160 309 0777 █ 80 128 L 30A 0778 █ 80 128 30B 0779 █ 80 128 30C 0780 █ 80 128 30D 0781 ███ E0 224 30E 0782 ███ E0 224 C 30F 0783 █ 80 128 310 0784 █ 80 128 311 0785 █ 80 128 312 0786 ███ E0 224 313 0787 ██ C0 192 D 314 0788 █ █ A0 160 315 0789 █ █ A0 160 316 0790 █ █ A0 160 317 0791 ██ C0 192 318 0792 █ █ A0 160 M 319 0793 ███ E0 224 31A 0794 ███ E0 224 31B 0795 ███ E0 224 31C 0796 █ █ A0 160 31D 0797 █ █ 90 144 N 31E 0798 ██ █ D0 208 31F 0799 ████ F0 240 320 0800 █ ██ B0 176 321 0801 █ █ 90 144 322 0802 00 000 centesima 323 0803 00 000 324 0804 █ 40 064 325 0805 00 000 326 0806 █ █ 50 080 327 0807 00 000 328 0808 █ █ █ 54 084 329 0809 00 000 32A 0810 ██ 60 096 32B 0811 00 000 32C 0812 █ 80 128 32D 0813 00 000 32E 0814 █ █ 90 144 32F 0815 00 000 330 0816 █ █ █ 94 148 331 0817 00 000 332 0818 █ █ █ █ 95 149 333 0819 00 000 334 0820 ███ 70 112 335 0821 00 000 336 0822 ██ C0 192 337 0823 00 000 338 0824 ██ █ D0 208 339 0825 00 000 33A 0826 ██ █ █ D4 212 33B 0827 00 000 33C 0828 ██ █ █ █ D5 213 33D 0829 00 000 33E 0830 ██ ██ D8 216 33F 0831 00 000 340 0832 ███ E0 224 341 0833 00 000 342 0834 ███ █ E4 228 343 0835 00 000 344 0836 ███ █ █ E5 229 345 0837 00 000 346 0838 ███ █ █ E5 229 347 0839 █ 40 064 348 0840 ██ ███ DC 220 349 0841 00 000 34A 0842 ████ F0 240 34B 0843 00 000 34C 0844 ████ █ F4 244 34D 0845 00 000 34E 0846 ████ █ █ F5 245 34F 0847 00 000 350 0848 ████ █ █ F5 245 351 0849 █ 40 064 352 0850 ████ ██ F6 246 353 0851 00 000 354 0852 █████ F8 248 355 0853 00 000 356 0854 █████ █ F9 249 357 0855 00 000 358 0856 █████ █ F9 249 359 0857 █ 40 064 35A 0858 █████ █ F9 249 35B 0859 █ █ 50 080 35C 0860 ████ ███ F7 247 35D 0861 00 000 35E 0862 ██████ FC 252 35F 0863 00 000 360 0864 ██████ █ FD 253 361 0865 00 000 362 0866 ██████ █ FD 253 363 0867 █ 40 064 364 0868 ██████ █ FD 253 365 0869 █ █ 50 080 366 0870 ██████ █ FD 253 367 0871 █ 80 128 368 0872 ███████ FE 254 369 0873 00 000 36A 0874 ███████ FE 254 36B 0875 █ 40 064 36C 0876 ███████ FE 254 36D 0877 █ █ 50 080 36E 0878 ███████ FE 254 36F 0879 █ █ █ 54 084 370 0880 ██████ █ FD 253 371 0881 ██ C0 192 372 0882 00 000 de centum 373 0883 00 000 374 0884 00 000 375 0885 █ 20 032 376 0886 00 000 377 0887 00 000 378 0888 █ █ 24 036 379 0889 00 000 37A 0890 00 000 37B 0891 █ █ 24 036 37C 0892 █ 80 128 37D 0893 00 000 37E 0894 █ █ 28 040 37F 0895 00 000 380 0896 00 000 381 0897 █ 40 064 382 0898 00 000 383 0899 00 000 384 0900 █ █ 44 068 385 0901 00 000 386 0902 00 000 387 0903 █ █ 44 068 388 0904 █ 80 128 389 0905 00 000 38A 0906 █ █ 44 068 38B 0907 █ █ 90 144 38C 0908 00 000 38D 0909 █ ██ 2C 044 38E 0910 00 000 38F 0911 00 000 390 0912 ██ 60 096 391 0913 00 000 392 0914 00 000 393 0915 ██ █ 64 100 394 0916 00 000 395 0917 00 000 396 0918 ██ █ 64 100 397 0919 █ 80 128 398 0920 00 000 399 0921 ██ █ 64 100 39A 0922 █ █ 90 144 39B 0923 00 000 39C 0924 ██ █ █ 65 101 39D 0925 00 000 39E 0926 00 000 39F 0927 ██ █ 68 104 3A0 0928 00 000 3A1 0929 00 000 3A2 0930 ██ █ 68 104 3A3 0931 █ 80 128 3A4 0932 00 000 3A5 0933 ██ █ 68 104 3A6 0934 █ █ 90 144 3A7 0935 00 000 3A8 0936 ██ █ 68 104 3A9 0937 █ █ █ 92 146 3AA 0938 00 000 3AB 0939 ██ █ █ 65 101 3AC 0940 █ 80 128 3AD 0941 00 000 3AE 0942 ██ ██ 6C 108 3AF 0943 00 000 3B0 0944 00 000 3B1 0945 ██ ██ 6C 108 3B2 0946 █ 80 128 3B3 0947 00 000 3B4 0948 ██ ██ 6C 108 3B5 0949 █ █ 90 144 3B6 0950 00 000 3B7 0951 ██ ██ 6C 108 3B8 0952 █ █ █ 92 146 3B9 0953 00 000 3BA 0954 ██ ██ 6C 108 3BB 0955 █ █ A0 160 3BC 0956 00 000 3BD 0957 ██ ██ █ 6D 109 3BE 0958 00 000 3BF 0959 00 000 3C0 0960 ██ ██ █ 6D 109 3C1 0961 █ 10 016 3C2 0962 00 000 3C3 0963 ██ ██ █ 6D 109 3C4 0964 █ █ 12 018 3C5 0965 00 000 3C6 0966 ██ ██ █ 6D 109 3C7 0967 █ █ 12 018 3C8 0968 █ 40 064 3C9 0969 ██ ██ 6C 108 3CA 0970 █ ██ B0 176 3CB 0971 00 000 3CC 0972 ██ ██ █ 6D 109 3CD 0973 █ 80 128 3CE 0974 00 000 3CF 0975 ██ ██ █ 6D 109 3D0 0976 █ █ 90 144 3D1 0977 00 000 3D2 0978 ██ ██ █ 6D 109 3D3 0979 █ █ █ 92 146 3D4 0980 00 000 3D5 0981 ██ ██ █ 6D 109 3D6 0982 █ █ █ 92 146 3D7 0983 █ 40 064 3D8 0984 ██ ██ █ 6D 109 3D9 0985 █ █ █ 94 148 3DA 0986 00 000 3DB 0987 ██ ██ █ 6D 109 3DC 0988 █ █ A0 160 3DD 0989 00 000 3DE 0990 ██ ██ █ 6D 109 3DF 0991 █ █ █ A2 162 3E0 0992 00 000 3E1 0993 ██ ██ █ 6D 109 3E2 0994 █ █ █ A2 162 3E3 0995 █ 40 064 3E4 0996 ██ ██ █ 6D 109 3E5 0997 █ █ █ A2 162 3E6 0998 █ █ 48 072 3E7 0999 ██ ██ █ 6D 109 3E8 1000 █ █ ██ 96 150 3E9 1001 00 000 3EA 1002 ███ 70 112 3EB 1003 00 000 3EC 1004 00 000 3ED 1005 ███ 70 112 3EE 1006 █ 80 128 3EF 1007 00 000 3F0 1008 ███ 70 112 3F1 1009 █ █ 90 144 3F2 1010 00 000 3F3 1011 ███ 70 112 3F4 1012 █ █ █ 92 146 3F5 1013 00 000 3F6 1014 ███ 70 112 3F7 1015 █ █ A0 160 3F8 1016 00 000 3F9 1017 ███ █ 71 113 3FA 1018 00 000 3FB 1019 00 000 3FC 1020 ███ █ 71 113 3FD 1021 █ 10 016 3FE 1022 00 000 3FF 1023 ███ █ 71 113 400 1024 █ █ 12 018 401 1025 00 000 402 1026 ███ █ 71 113 403 1027 █ █ 12 018 404 1028 █ 40 064 405 1029 ███ 70 112 406 1030 █ ██ B0 176 407 1031 00 000 408 1032 █ 80 128 409 1033 00 000 40A 1034 00 000 40B 1035 █ █ 84 132 40C 1036 00 000 40D 1037 00 000 40E 1038 █ █ 84 132 40F 1039 █ 80 128 410 1040 00 000 411 1041 █ █ 84 132 412 1042 █ █ 90 144 413 1043 00 000 414 1044 █ █ █ 85 133 415 1045 00 000 416 1046 00 000 417 1047 █ █ 88 136 418 1048 00 000 419 1049 00 000 41A 1050 █ █ 88 136 41B 1051 █ 80 128 41C 1052 00 000 41D 1053 █ █ 88 136 41E 1054 █ █ 90 144 41F 1055 00 000 420 1056 █ █ 88 136 421 1057 █ █ █ 92 146 422 1058 00 000 423 1059 █ █ █ 85 133 424 1060 █ 80 128 425 1061 00 000 426 1062 █ ██ 8C 140 427 1063 00 000 428 1064 00 000 429 1065 █ ██ 8C 140 42A 1066 █ 80 128 42B 1067 00 000 42C 1068 █ ██ 8C 140 42D 1069 █ █ 90 144 42E 1070 00 000 42F 1071 █ ██ 8C 140 430 1072 █ █ █ 92 146 431 1073 00 000 432 1074 █ ██ 8C 140 433 1075 █ █ A0 160 434 1076 00 000 435 1077 █ ██ █ 8D 141 436 1078 00 000 437 1079 00 000 438 1080 █ ██ █ 8D 141 439 1081 █ 10 016 43A 1082 00 000 43B 1083 █ ██ █ 8D 141 43C 1084 █ █ 12 018 43D 1085 00 000 43E 1086 █ ██ █ 8D 141 43F 1087 █ █ 12 018 440 1088 █ 40 064 441 1089 █ ██ 8C 140 442 1090 █ ██ B0 176 443 1091 00 000 444 1092 █ ██ █ 8D 141 445 1093 █ 80 128 446 1094 00 000 447 1095 █ ██ █ 8D 141 448 1096 █ █ 90 144 449 1097 00 000 44A 1098 █ ██ █ 8D 141 44B 1099 █ █ █ 92 146 44C 1100 00 000 44D 1101 █ ██ █ 8D 141 44E 1102 █ █ █ 92 146 44F 1103 █ 40 064 450 1104 █ ██ █ 8D 141 451 1105 █ █ █ 94 148 452 1106 00 000 453 1107 █ ██ █ 8D 141 454 1108 █ █ A0 160 455 1109 00 000 456 1110 █ ██ █ 8D 141 457 1111 █ █ █ A2 162 458 1112 00 000 459 1113 █ ██ █ 8D 141 45A 1114 █ █ █ A2 162 45B 1115 █ 40 064 45C 1116 █ ██ █ 8D 141 45D 1117 █ █ █ A2 162 45E 1118 █ █ 48 072 45F 1119 █ ██ █ 8D 141 460 1120 █ █ ██ 96 150 461 1121 00 000 462 1122 █ ██ █ 8D 141 463 1123 █ ██ B0 176 464 1124 00 000 465 1125 █ ██ █ 8D 141 466 1126 █ ██ █ B2 178 467 1127 00 000 468 1128 █ ██ █ 8D 141 469 1129 █ ██ █ B2 178 46A 1130 █ 40 064 46B 1131 █ ██ █ 8D 141 46C 1132 █ ██ █ B2 178 46D 1133 █ █ 48 072 46E 1134 █ ██ █ 8D 141 46F 1135 █ ██ █ B2 178 470 1136 █ 80 128 471 1137 █ ██ █ 8D 141 472 1138 █ ██ █ B4 180 473 1139 00 000 474 1140 █ ██ █ 8D 141 475 1141 █ ██ █ B4 180 476 1142 █ 40 064 477 1143 █ ██ █ 8D 141 478 1144 █ ██ █ B4 180 479 1145 █ █ 48 072 47A 1146 █ ██ █ 8D 141 47B 1147 █ ██ █ B4 180 47C 1148 █ █ █ 49 073 47D 1149 █ ██ █ 8D 141 47E 1150 █ ██ █ B2 178 47F 1151 ██ C0 192 480 1152 ███ █ 74 116 481 1153 00 000 482 1154 00 000 483 1155 ███ █ 74 116 484 1156 █ 80 128 485 1157 00 000 486 1158 ███ █ 74 116 487 1159 █ █ 90 144 488 1160 00 000 489 1161 ███ █ 74 116 48A 1162 █ █ █ 92 146 48B 1163 00 000 48C 1164 ███ █ 74 116 48D 1165 █ █ A0 160 48E 1166 00 000 48F 1167 ███ █ █ 75 117 490 1168 00 000 491 1169 00 000 492 1170 ███ █ █ 75 117 493 1171 █ 10 016 494 1172 00 000 495 1173 ███ █ █ 75 117 496 1174 █ █ 12 018 497 1175 00 000 498 1176 ███ █ █ 75 117 499 1177 █ █ 12 018 49A 1178 █ 40 064 49B 1179 ███ █ 74 116 49C 1180 █ ██ B0 176 49D 1181 00 000 49E 1182 █ 01 001 praeter 49F 1183 00 000 4A0 1184 00 000 4A1 1185 █ 08 008 4A2 1186 00 000 4A3 1187 00 000 4A4 1188 00 000 4A5 1189 00 000 4A6 1190 00 000 4A7 1191 00 000 4A8 1192 00 000 4A9 1193 00 000 4AA 1194 00 000 4AB 1195 00 000 4AC 1196 00 000 4AD 1197 00 000 4AE 1198 00 000 4AF 1199 00 000 4B0 1200 █ 02 002 4B1 1201 00 000 4B2 1202 █ █ 12 018 4B3 1203 ██ 03 003 4B4 1204 █ 01 001 4B5 1205 █ 01 001 4B6 1206 ██ 03 003 4B7 1207 00 000 4B8 1208 00 000 4B9 1209 00 000 4BA 1210 00 000 4BB 1211 00 000 4BC 1212 00 000 4BD 1213 00 000 4BE 1214 00 000 4BF 1215 00 000 4C0 1216 00 000 4C1 1217 00 000 4C2 1218 ██ 03 003 4C3 1219 00 000 4C4 1220 █ ██ 16 022 4C5 1221 █ 01 001 4C6 1222 █ 01 001 4C7 1223 ██ 03 003 4C8 1224 ██ 03 003 4C9 1225 00 000 4CA-4CB 1226-1227 0000 00000 4CC-4CD 1228-1229 0000 00000 4CE-4CF 1230-1231 0000 00000 4D0-4D1 1232-1233 0000 00000 4D2-4D3 1234-1235 0000 00000 4D4-4D5 1236-1237 0000 00000! huc 4D6-4D7 1238-1239 0000 00000 4D8-4D9 1240-1241 0000 00000 4DA-4DB 1242-1243 0000 00000 4DC-4DD 1244-1245 0000 00000 illuc 4DE-4DF 1246-1247 0000 00000 4E0-4E1 1248-1249 0000 00000 4E2-4E3 1250-1251 0000 00000 4E4-4E5 1252-1253 0000 00000 finis The register usage is as follows: V0 Memory movement. V1 Memory movement and horizontal sprite coordinates. V2 Memory movement and vertical sprite coordinates. V3 Memory movement and an index. V4 Memory movement. V5 Memory movement. V6 Memory movement. V7 Memory movement and serve as scratch. V8 Serve as scratch. V9 Serve as scratch. VA Serve as scratch. VB Hold a counter. VC Hold a counter. VD Hold a constant length. VE Hold a delay. VF Manipulate the delay register hold special results. This program initializes registers, sets a delay, and saves its registers to the end of the program: 200-201 0512-0513 █▄█ ▄ █▄ A2EB 41707 I ← illinc 202-203 0514-0515 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 204-205 0516-0517 ▀▀▀█▀█▀▄ FE15 65045 primus delay ← VE 206-207 0518-0519 █▄█ █ A4E4 42212 I ← finis 208-209 0520-0521 ▀█▀█▀█▀▄ FE55 65109 Save V0→VE; I ← I + 15 The reason for saving the registers is this secondary loop which scans the list of exceptions during each iteration. If the first octet be zero, then scanning is finished; otherwise, the following two octets are taken to compare against registers eleven and twelve; if both match, the exception holds, and the following fifteen octets will be shown, with the registers being restored beforehand; in all other cases, the following fifteen octets will be skipped and the scanning of the list continues on: 20A-20B 0522-0523 █ ▀▄▄█▄ A49E 42142 I ← praeter 20C-20D 0524-0525 ▀██▀ ▄ ▄ F065 61541 secundus Load V0→V0; I ← I + 01 20E-20F 0526-0527 ▀ 4000 16384 Skip next if V0 <> 000 210-211 0528-0529 ▄▀▄▄▀ 122C 04652 Jump to regula 212-213 0530-0531 ▀██▀ ▄ █ F165 61797 Load V0→V1; I ← I + 02 214-215 0532-0533 ▄▀▄█ 50B0 20656 Skip next if V0 = VB 216-217 0534-0535 ▄▀▄ ▀ 1228 04648 Jump to iterum 218-219 0536-0537 ▄█ ▀ ▀ 51C0 20928 Skip next if V1 = VC 21A-21B 0538-0539 ▄▀▄ ▀ 1228 04648 Jump to iterum 21C-21D 0540-0541 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 21E-21F 0542-0543 █▄▀▄ █ ▄ A4D5 42197 I ← huc 220-221 0544-0545 ▀█▀█▀█▀▄ FE55 65109 Save V0→VE; I ← I + 15 222-223 0546-0547 █▄█ █ A4E4 42212 I ← finis 224-225 0548-0549 ▀██▀▀█▀▄ FE65 65125 Load V0→VE; I ← I + 15 226-227 0550-0551 ▄ █▄ █ 129A 04762 Jump to ostendo 228-229 0552-0553 ▀▀▀███▄▀ FD1E 64798 iterum I ← I + VD 22A-22B 0554-0555 ▀▄▄▀ 120C 04620 Jump to secundus Regular iteration shows the result of concatenating two indexed tables; the first table, of hextets, stores fourteen pairs of bits in each entry, taken successively by routine and stored in those first seven registers; swapping the registers used, after the fourth call, produces no crease and is easy: 22C-22D 0556-0557 ▀ █ █▀ A322 41762 regula I ← centesima 22E-22F 0558-0559 ▀▀▀██▄█▀ FB1E 64286 I ← I + VB 230-231 0560-0561 ▀▀▀██▄█▀ FB1E 64286 I ← I + VB 232-233 0562-0563 ▀██▀ ▄ █ F165 61797 Load V0→V1; I ← I + 02 234-235 0564-0565 ▀ ▀ ▀ 8900 35072 V9 ← V0 236-237 0566-0567 ▀ ▄▀ 8810 34832 V8 ← V1 238-239 0568-0569 ▄▄█ ▄█ 22E6 08934 Call duo digiti 23A-23B 0570-0571 █ ▄ 80A0 32928 V0 ← VA 23C-23D 0572-0573 ▄▄█ ▄█ 22E6 08934 Call duo digiti 23E-23F 0574-0575 █ ▄ ▀ 81A0 33184 V1 ← VA 240-241 0576-0577 ▄▄█ ▄█ 22E6 08934 Call duo digiti 242-243 0578-0579 █ ▄ ▀ 82A0 33440 V2 ← VA 244-245 0580-0581 ▄▄█ ▄█ 22E6 08934 Call duo digiti 246-247 0582-0583 █ ▄ ▀▀ 83A0 33696 V3 ← VA 248-249 0584-0585 █ ▀ ▀ 8980 35200 V9 ← V8 24A-24B 0586-0587 ▄▄█ ▄█ 22E6 08934 Call duo digiti 24C-24D 0588-0589 █ ▄ ▀ 84A0 33952 V4 ← VA 24E-24F 0590-0591 ▄▄█ ▄█ 22E6 08934 Call duo digiti 250-251 0592-0593 █ ▄ ▀ ▀ 85A0 34208 V5 ← VA 252-253 0594-0595 ▄▄█ ▄█ 22E6 08934 Call duo digiti 254-255 0596-0597 █ ▄ ▀▀ 86A0 34464 V6 ← VA 256-257 0598-0599 █▄▀▄ █ ▄ A4D5 42197 I ← huc 258-259 0600-0601 ▀█▀█ █▀▄ F655 63061 Save V0→V6; I ← I + 07 The second table, of octet triplets, stores eight triplets of bits in each entry, taken successively by routine and stored in those first eight registers; swapping the registers used, after that second call, produces a slight crease corrected by undoing a shift before swapping in the next and resuming with a call of a more primitive routine. The next crease, after another two calls, is not as easily corrected; it's easier to abandon the routine and call the primitive routine again, before calling a second primitive routine, and only then resuming normally. Finally, the eight octets are deposited: 25A-25B 0602-0603 ▀▄█▄ █▀ A372 41842 I ← de centum 25C-25D 0604-0605 ▀▀▀███▄ FC1E 64542 I ← I + VC 25E-25F 0606-0607 ▀▀▀███▄ FC1E 64542 I ← I + VC 260-261 0608-0609 ▀▀▀███▄ FC1E 64542 I ← I + VC 262-263 0610-0611 ▀██▀ ▄▀▄ F265 62053 Load V0→V2; I ← I + 03 264-265 0612-0613 ▀ ▀ ▀ 8900 35072 V9 ← V0 266-267 0614-0615 ▀ ▄ ▀▀▀ 8710 34576 V7 ← V1 268-269 0616-0617 ▀ ▄ ▀ 8820 34848 V8 ← V2 26A-26B 0618-0619 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 26C-26D 0620-0621 █ ▄ 80A0 32928 V0 ← VA 26E-26F 0622-0623 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 270-271 0624-0625 █ ▄ ▀ 81A0 33184 V1 ← VA 272-273 0626-0627 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 274-275 0628-0629 █ ▄ ▀▄█ 8AA6 35494 VA ← VA ÷ 2; VF ← LSB 276-277 0630-0631 ▀▄▄▄▀ ▀ 8970 35184 V9 ← V7 278-279 0632-0633 ▄▄▀▄▄▄▀ 22DC 08924 Call semel 27A-27B 0634-0635 █ ▄ ▀ 82A0 33440 V2 ← VA 27C-27D 0636-0637 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 27E-27F 0638-0639 █ ▄ ▀▀ 83A0 33696 V3 ← VA 280-281 0640-0641 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 282-283 0642-0643 █ ▄ ▀ 84A0 33952 V4 ← VA 284-285 0644-0645 ▀▀ ▀ ▀ 6A00 27136 VA ← 000 286-287 0646-0647 ▄▄▀▄▄▄▀ 22DC 08924 Call semel 288-289 0648-0649 █ ▀ ▀ 8980 35200 V9 ← V8 28A-28B 0650-0651 ▄▄▀▄▄ █ 22DA 08922 Call bis 28C-28D 0652-0653 █ ▄ ▀ ▀ 85A0 34208 V5 ← VA 28E-28F 0654-0655 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 290-291 0656-0657 █ ▄ ▀▀ 86A0 34464 V6 ← VA 292-293 0658-0659 ▄▄█▄ ▀ 22F0 08944 Call tres digiti 294-295 0660-0661 █ ▄ ▀▀▀ 87A0 34720 V7 ← VA 296-297 0662-0663 █▄▀▄▄█ A4DC 42204 I ← illuc 298-299 0664-0665 ▀█▀█ █▀█ F755 63317 Save V0→V7; I ← I + 08 The ranges of both tables have blank values, and concatenation is achieved in the showing routine by skipping such blanks. Firstly, the coordinates and index are initialized, and each letter is shown, by indexing into a table of values five octets long; blanks are ignored only after indexing, causing no coordinate changes. Once all fifteen possible letters have been shown or not, does the loop end: 29A-29B 0666-0667 ▀▀ ▄▀ 6102 24834 ostendo V1 ← 002 29C-29D 0668-0669 ▀▀ █ 6202 25090 V2 ← 002 29E-29F 0670-0671 ▀▀ ▀▀ 6300 25344 V3 ← 000 2A0-2A1 0672-0673 █▄▀▄ █ ▄ A4D5 42197 rursus I ← huc 2A2-2A3 0674-0675 ▀▀▀█▄▄█▀ F31E 62238 I ← I + V3 2A4-2A5 0676-0677 ▀██▀ ▄ ▄ F065 61541 Load V0→V0; I ← I + 01 2A6-2A7 0678-0679 █▄█▄ ▄▀▄ A2F5 41717 I ← litterae 2A8-2A9 0680-0681 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AA-2AB 0682-0683 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AC-2AD 0684-0685 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2AE-2AF 0686-0687 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2B0-2B1 0688-0689 ▀▀▀█▄▄▄ F01E 61470 I ← I + V0 2B2-2B3 0690-0691 ▀▀ 3000 12288 Skip next if V0 = 000 2B4-2B5 0692-0693 ▀▀▄▀ ▄ █ D125 53541 Draw 08×05 at V1,V2; VF ← XOR 2B6-2B7 0694-0695 ▀▀ 3000 12288 Skip next if V0 = 000 2B8-2B9 0696-0697 ▀▀▀ ▄ ▀ 7104 28932 V1 ← V1 + 004 2BA-2BB 0698-0699 ▀▀▀ ▀█ 7301 29441 V3 ← V3 + 001 2BC-2BD 0700-0701 ▀▀▄▄██ 330F 13071 Skip next if V3 = 015 2BE-2BF 0702-0703 ▄ ▄▀ ▀ 12A0 04768 Jump to rursus The integer to show is incremented and the registers holding it are kept within their domains: below one hundred and below forty, respectively. The program ends when the integer becomes four thousand: 2C0-2C1 0704-0705 ▀▀▀▀▀ ▄ 7C01 31745 VC ← VC + 001 2C2-2C3 0706-0707 █▄ ▀█ 4C64 19556 Skip next if VC <> 100 2C4-2C5 0708-0709 ▀▀ ▀▀ 6C00 27648 VC ← 000 2C6-2C7 0710-0711 ▀ ▀▀ 4C00 19456 Skip next if VC <> 000 2C8-2C9 0712-0713 ▀▀▀▀ ▀█ 7B01 31489 VB ← VB + 001 2CA-2CB 0714-0715 ▀▄ █ ▀▀ 4B28 19240 Skip next if VB <> 040 2CC-2CD 0716-0717 ▄▄ ▀▄▄▀ 12CC 04812 se Jump to se Here the delay is exhausted before clearing the screen and restarting the prime loop of the program: 2CE-2CF 0718-0719 ▀▀▀▀▀███ FF07 65287 mora VF ← delay 2D0-2D1 0720-0721 ▀▀▀▀▀▀ 3F00 16128 Skip next if VF = 000 2D2-2D3 0722-0723 ▄▄ ▀▄▄█ 12CE 04814 Jump to mora 2D4-2D5 0724-0725 ▄▄▄ 00E0 00224 Clear the screen 2D6-2D7 0726-0727 ▀ ▄▀ 1204 04612 Jump to primus These three routines take the first three, two, or single bits from the ninth to the tenth register: 2D8-2D9 0728-0729 ▄▄▀▄▄▄▀ 22DC 08924 ter Call semel 2DA-2DB 0730-0731 ▄▄▀▄▄▄▀ 22DC 08924 bis Call semel 2DC-2DD 0732-0733 █ ▄ █▄█ 8AAE 35502 semel VA ← VA × 2; VF ← MSB 2DE-2DF 0734-0735 █ ▄█▄▄▀ 899E 35230 V9 ← V9 × 2; VF ← MSB 2E0-2E1 0736-0737 ▀▀▀▀▀▀ 3F00 16128 Skip next if VF = 000 2E2-2E3 0738-0739 ▀▀▀▀ ▀▄ 7A01 31233 VA ← VA + 001 2E4-2E5 0740-0741 ▄▄▄ ▄▄▄ 00EE 00238 Return These two routines blank the tenth register before calling the others, and the former normalizes the result for the table of letters; I later saw I could've confused the table to save two instructions. Following the code are the starting values for the eleventh through fourteenth registers. Following those are the table of letters, with the zeroeth letter unused, and the last being for an exception; the letters are four-by-five, as this is the biggest width that fits fifteen on the screen in a row; notice how I cheated for that last letter, which is largest, so that I could have a decent letter N: 2E6-2E7 0742-0743 ▀▀ ▀ ▀ 6A00 27136 duo digiti VA ← 000 2E8-2E9 0744-0745 ▄▄▀▄▄ █ 22DA 08922 Call bis 2EA-2EB 0746-0747 ▀▀▀ ▀ 3A00 14848! illinc Skip next if VA = 000 2EC-2ED 0748-0749 ▀▀▀▀▄▀ 7A04 31236 VA ← VA + 004 2EE-2EF 0750-0751 ▄▄▄ ▄▄▄ 00EE 00238 Return 2F0-2F1 0752-0753 ▀▀ ▀ ▀ 6A00 27136 tres digiti VA ← 000 2F2-2F3 0754-0755 ▄▄▀▄▄ ▀ 22D8 08920 Call ter 2F4-2F5 0756-0757 ▄▄▄ ▄▄▄ 00EE 00238! litterae Return 2F6 0758 00 000 2F7 0759 00 000 2F8 0760 ████ 0F 015 2F9 0761 ████ 1E 030 2FA 0762 ███ E0 224 I 2FB 0763 █ 40 064 2FC 0764 █ 40 064 2FD 0765 █ 40 064 2FE 0766 ███ E0 224 2FF 0767 █ █ A0 160 V 300 0768 █ █ A0 160 301 0769 █ █ A0 160 302 0770 █ █ A0 160 303 0771 █ 40 064 304 0772 █ █ A0 160 X 305 0773 █ █ A0 160 306 0774 █ 40 064 307 0775 █ █ A0 160 308 0776 █ █ A0 160 309 0777 █ 80 128 L 30A 0778 █ 80 128 30B 0779 █ 80 128 30C 0780 █ 80 128 30D 0781 ███ E0 224 30E 0782 ███ E0 224 C 30F 0783 █ 80 128 310 0784 █ 80 128 311 0785 █ 80 128 312 0786 ███ E0 224 313 0787 ██ C0 192 D 314 0788 █ █ A0 160 315 0789 █ █ A0 160 316 0790 █ █ A0 160 317 0791 ██ C0 192 318 0792 █ █ A0 160 M 319 0793 ███ E0 224 31A 0794 ███ E0 224 31B 0795 ███ E0 224 31C 0796 █ █ A0 160 31D 0797 █ █ 90 144 N 31E 0798 ██ █ D0 208 31F 0799 ████ F0 240 320 0800 █ ██ B0 176 321 0801 █ █ 90 144 This table encodes a blank followed by every hundredth integer, from C to MMMCM. Its domain is from zero to thirty-nine. Each value is two bits in length, with the seventh pair always ignored. These values are encoded in the following order: blank, C, D, then M. I rather like it, and it's optimal: 322 0802 00 000 centesima 323 0803 00 000 324 0804 █ 40 064 325 0805 00 000 326 0806 █ █ 50 080 327 0807 00 000 328 0808 █ █ █ 54 084 329 0809 00 000 32A 0810 ██ 60 096 32B 0811 00 000 32C 0812 █ 80 128 32D 0813 00 000 32E 0814 █ █ 90 144 32F 0815 00 000 330 0816 █ █ █ 94 148 331 0817 00 000 332 0818 █ █ █ █ 95 149 333 0819 00 000 334 0820 ███ 70 112 335 0821 00 000 336 0822 ██ C0 192 337 0823 00 000 338 0824 ██ █ D0 208 339 0825 00 000 33A 0826 ██ █ █ D4 212 33B 0827 00 000 33C 0828 ██ █ █ █ D5 213 33D 0829 00 000 33E 0830 ██ ██ D8 216 33F 0831 00 000 340 0832 ███ E0 224 341 0833 00 000 342 0834 ███ █ E4 228 343 0835 00 000 344 0836 ███ █ █ E5 229 345 0837 00 000 346 0838 ███ █ █ E5 229 347 0839 █ 40 064 348 0840 ██ ███ DC 220 349 0841 00 000 34A 0842 ████ F0 240 34B 0843 00 000 34C 0844 ████ █ F4 244 34D 0845 00 000 34E 0846 ████ █ █ F5 245 34F 0847 00 000 350 0848 ████ █ █ F5 245 351 0849 █ 40 064 352 0850 ████ ██ F6 246 353 0851 00 000 354 0852 █████ F8 248 355 0853 00 000 356 0854 █████ █ F9 249 357 0855 00 000 358 0856 █████ █ F9 249 359 0857 █ 40 064 35A 0858 █████ █ F9 249 35B 0859 █ █ 50 080 35C 0860 ████ ███ F7 247 35D 0861 00 000 35E 0862 ██████ FC 252 35F 0863 00 000 360 0864 ██████ █ FD 253 361 0865 00 000 362 0866 ██████ █ FD 253 363 0867 █ 40 064 364 0868 ██████ █ FD 253 365 0869 █ █ 50 080 366 0870 ██████ █ FD 253 367 0871 █ 80 128 368 0872 ███████ FE 254 369 0873 00 000 36A 0874 ███████ FE 254 36B 0875 █ 40 064 36C 0876 ███████ FE 254 36D 0877 █ █ 50 080 36E 0878 ███████ FE 254 36F 0879 █ █ █ 54 084 370 0880 ██████ █ FD 253 371 0881 ██ C0 192 This table encodes a blank, then integers below one hundred, from I to XCIX; its domain is from zero to ninety-nine. Each value is of three bits, encoded in this order: blank, I, V, X, L, C, D, and M. 372 0882 00 000 de centum 373 0883 00 000 374 0884 00 000 375 0885 █ 20 032 376 0886 00 000 377 0887 00 000 378 0888 █ █ 24 036 379 0889 00 000 37A 0890 00 000 37B 0891 █ █ 24 036 37C 0892 █ 80 128 37D 0893 00 000 37E 0894 █ █ 28 040 37F 0895 00 000 380 0896 00 000 381 0897 █ 40 064 382 0898 00 000 383 0899 00 000 384 0900 █ █ 44 068 385 0901 00 000 386 0902 00 000 387 0903 █ █ 44 068 388 0904 █ 80 128 389 0905 00 000 38A 0906 █ █ 44 068 38B 0907 █ █ 90 144 38C 0908 00 000 38D 0909 █ ██ 2C 044 38E 0910 00 000 38F 0911 00 000 390 0912 ██ 60 096 391 0913 00 000 392 0914 00 000 393 0915 ██ █ 64 100 394 0916 00 000 395 0917 00 000 396 0918 ██ █ 64 100 397 0919 █ 80 128 398 0920 00 000 399 0921 ██ █ 64 100 39A 0922 █ █ 90 144 39B 0923 00 000 39C 0924 ██ █ █ 65 101 39D 0925 00 000 39E 0926 00 000 39F 0927 ██ █ 68 104 3A0 0928 00 000 3A1 0929 00 000 3A2 0930 ██ █ 68 104 3A3 0931 █ 80 128 3A4 0932 00 000 3A5 0933 ██ █ 68 104 3A6 0934 █ █ 90 144 3A7 0935 00 000 3A8 0936 ██ █ 68 104 3A9 0937 █ █ █ 92 146 3AA 0938 00 000 3AB 0939 ██ █ █ 65 101 3AC 0940 █ 80 128 3AD 0941 00 000 3AE 0942 ██ ██ 6C 108 3AF 0943 00 000 3B0 0944 00 000 3B1 0945 ██ ██ 6C 108 3B2 0946 █ 80 128 3B3 0947 00 000 3B4 0948 ██ ██ 6C 108 3B5 0949 █ █ 90 144 3B6 0950 00 000 3B7 0951 ██ ██ 6C 108 3B8 0952 █ █ █ 92 146 3B9 0953 00 000 3BA 0954 ██ ██ 6C 108 3BB 0955 █ █ A0 160 3BC 0956 00 000 3BD 0957 ██ ██ █ 6D 109 3BE 0958 00 000 3BF 0959 00 000 3C0 0960 ██ ██ █ 6D 109 3C1 0961 █ 10 016 3C2 0962 00 000 3C3 0963 ██ ██ █ 6D 109 3C4 0964 █ █ 12 018 3C5 0965 00 000 3C6 0966 ██ ██ █ 6D 109 3C7 0967 █ █ 12 018 3C8 0968 █ 40 064 3C9 0969 ██ ██ 6C 108 3CA 0970 █ ██ B0 176 3CB 0971 00 000 3CC 0972 ██ ██ █ 6D 109 3CD 0973 █ 80 128 3CE 0974 00 000 3CF 0975 ██ ██ █ 6D 109 3D0 0976 █ █ 90 144 3D1 0977 00 000 3D2 0978 ██ ██ █ 6D 109 3D3 0979 █ █ █ 92 146 3D4 0980 00 000 3D5 0981 ██ ██ █ 6D 109 3D6 0982 █ █ █ 92 146 3D7 0983 █ 40 064 3D8 0984 ██ ██ █ 6D 109 3D9 0985 █ █ █ 94 148 3DA 0986 00 000 3DB 0987 ██ ██ █ 6D 109 3DC 0988 █ █ A0 160 3DD 0989 00 000 3DE 0990 ██ ██ █ 6D 109 3DF 0991 █ █ █ A2 162 3E0 0992 00 000 3E1 0993 ██ ██ █ 6D 109 3E2 0994 █ █ █ A2 162 3E3 0995 █ 40 064 3E4 0996 ██ ██ █ 6D 109 3E5 0997 █ █ █ A2 162 3E6 0998 █ █ 48 072 3E7 0999 ██ ██ █ 6D 109 3E8 1000 █ █ ██ 96 150 3E9 1001 00 000 3EA 1002 ███ 70 112 3EB 1003 00 000 3EC 1004 00 000 3ED 1005 ███ 70 112 3EE 1006 █ 80 128 3EF 1007 00 000 3F0 1008 ███ 70 112 3F1 1009 █ █ 90 144 3F2 1010 00 000 3F3 1011 ███ 70 112 3F4 1012 █ █ █ 92 146 3F5 1013 00 000 3F6 1014 ███ 70 112 3F7 1015 █ █ A0 160 3F8 1016 00 000 3F9 1017 ███ █ 71 113 3FA 1018 00 000 3FB 1019 00 000 3FC 1020 ███ █ 71 113 3FD 1021 █ 10 016 3FE 1022 00 000 3FF 1023 ███ █ 71 113 400 1024 █ █ 12 018 401 1025 00 000 402 1026 ███ █ 71 113 403 1027 █ █ 12 018 404 1028 █ 40 064 405 1029 ███ 70 112 406 1030 █ ██ B0 176 407 1031 00 000 408 1032 █ 80 128 409 1033 00 000 40A 1034 00 000 40B 1035 █ █ 84 132 40C 1036 00 000 40D 1037 00 000 40E 1038 █ █ 84 132 40F 1039 █ 80 128 410 1040 00 000 411 1041 █ █ 84 132 412 1042 █ █ 90 144 413 1043 00 000 414 1044 █ █ █ 85 133 415 1045 00 000 416 1046 00 000 417 1047 █ █ 88 136 418 1048 00 000 419 1049 00 000 41A 1050 █ █ 88 136 41B 1051 █ 80 128 41C 1052 00 000 41D 1053 █ █ 88 136 41E 1054 █ █ 90 144 41F 1055 00 000 420 1056 █ █ 88 136 421 1057 █ █ █ 92 146 422 1058 00 000 423 1059 █ █ █ 85 133 424 1060 █ 80 128 425 1061 00 000 426 1062 █ ██ 8C 140 427 1063 00 000 428 1064 00 000 429 1065 █ ██ 8C 140 42A 1066 █ 80 128 42B 1067 00 000 42C 1068 █ ██ 8C 140 42D 1069 █ █ 90 144 42E 1070 00 000 42F 1071 █ ██ 8C 140 430 1072 █ █ █ 92 146 431 1073 00 000 432 1074 █ ██ 8C 140 433 1075 █ █ A0 160 434 1076 00 000 435 1077 █ ██ █ 8D 141 436 1078 00 000 437 1079 00 000 438 1080 █ ██ █ 8D 141 439 1081 █ 10 016 43A 1082 00 000 43B 1083 █ ██ █ 8D 141 43C 1084 █ █ 12 018 43D 1085 00 000 43E 1086 █ ██ █ 8D 141 43F 1087 █ █ 12 018 440 1088 █ 40 064 441 1089 █ ██ 8C 140 442 1090 █ ██ B0 176 443 1091 00 000 444 1092 █ ██ █ 8D 141 445 1093 █ 80 128 446 1094 00 000 447 1095 █ ██ █ 8D 141 448 1096 █ █ 90 144 449 1097 00 000 44A 1098 █ ██ █ 8D 141 44B 1099 █ █ █ 92 146 44C 1100 00 000 44D 1101 █ ██ █ 8D 141 44E 1102 █ █ █ 92 146 44F 1103 █ 40 064 450 1104 █ ██ █ 8D 141 451 1105 █ █ █ 94 148 452 1106 00 000 453 1107 █ ██ █ 8D 141 454 1108 █ █ A0 160 455 1109 00 000 456 1110 █ ██ █ 8D 141 457 1111 █ █ █ A2 162 458 1112 00 000 459 1113 █ ██ █ 8D 141 45A 1114 █ █ █ A2 162 45B 1115 █ 40 064 45C 1116 █ ██ █ 8D 141 45D 1117 █ █ █ A2 162 45E 1118 █ █ 48 072 45F 1119 █ ██ █ 8D 141 460 1120 █ █ ██ 96 150 461 1121 00 000 462 1122 █ ██ █ 8D 141 463 1123 █ ██ B0 176 464 1124 00 000 465 1125 █ ██ █ 8D 141 466 1126 █ ██ █ B2 178 467 1127 00 000 468 1128 █ ██ █ 8D 141 469 1129 █ ██ █ B2 178 46A 1130 █ 40 064 46B 1131 █ ██ █ 8D 141 46C 1132 █ ██ █ B2 178 46D 1133 █ █ 48 072 46E 1134 █ ██ █ 8D 141 46F 1135 █ ██ █ B2 178 470 1136 █ 80 128 471 1137 █ ██ █ 8D 141 472 1138 █ ██ █ B4 180 473 1139 00 000 474 1140 █ ██ █ 8D 141 475 1141 █ ██ █ B4 180 476 1142 █ 40 064 477 1143 █ ██ █ 8D 141 478 1144 █ ██ █ B4 180 479 1145 █ █ 48 072 47A 1146 █ ██ █ 8D 141 47B 1147 █ ██ █ B4 180 47C 1148 █ █ █ 49 073 47D 1149 █ ██ █ 8D 141 47E 1150 █ ██ █ B2 178 47F 1151 ██ C0 192 480 1152 ███ █ 74 116 481 1153 00 000 482 1154 00 000 483 1155 ███ █ 74 116 484 1156 █ 80 128 485 1157 00 000 486 1158 ███ █ 74 116 487 1159 █ █ 90 144 488 1160 00 000 489 1161 ███ █ 74 116 48A 1162 █ █ █ 92 146 48B 1163 00 000 48C 1164 ███ █ 74 116 48D 1165 █ █ A0 160 48E 1166 00 000 48F 1167 ███ █ █ 75 117 490 1168 00 000 491 1169 00 000 492 1170 ███ █ █ 75 117 493 1171 █ 10 016 494 1172 00 000 495 1173 ███ █ █ 75 117 496 1174 █ █ 12 018 497 1175 00 000 498 1176 ███ █ █ 75 117 499 1177 █ █ 12 018 49A 1178 █ 40 064 49B 1179 ███ █ 74 116 49C 1180 █ ██ B0 176 49D 1181 00 000 Lastly is the list of exceptions. No effort was wasted to make this particularly efficient in size. Each entry of this list is an octet followed by another two corresponding to the values of registers eleven and twelve, followed by another fifteen which directly encode the letters to be used for such an exception, including custom letters. The list is ended by a zero, and I decided to number these: 49E 1182 █ 01 001 praeter 49F 1183 00 000 4A0 1184 00 000 4A1 1185 █ 08 008 4A2 1186 00 000 4A3 1187 00 000 4A4 1188 00 000 4A5 1189 00 000 4A6 1190 00 000 4A7 1191 00 000 4A8 1192 00 000 4A9 1193 00 000 4AA 1194 00 000 4AB 1195 00 000 4AC 1196 00 000 4AD 1197 00 000 4AE 1198 00 000 4AF 1199 00 000 4B0 1200 █ 02 002 4B1 1201 00 000 4B2 1202 █ █ 12 018 4B3 1203 ██ 03 003 4B4 1204 █ 01 001 4B5 1205 █ 01 001 4B6 1206 ██ 03 003 4B7 1207 00 000 4B8 1208 00 000 4B9 1209 00 000 4BA 1210 00 000 4BB 1211 00 000 4BC 1212 00 000 4BD 1213 00 000 4BE 1214 00 000 4BF 1215 00 000 4C0 1216 00 000 4C1 1217 00 000 4C2 1218 ██ 03 003 4C3 1219 00 000 4C4 1220 █ ██ 16 022 4C5 1221 █ 01 001 4C6 1222 █ 01 001 4C7 1223 ██ 03 003 4C8 1224 ██ 03 003 4C9 1225 00 000 4CA-4CB 1226-1227 0000 00000 4CC-4CD 1228-1229 0000 00000 4CE-4CF 1230-1231 0000 00000 4D0-4D1 1232-1233 0000 00000 4D2-4D3 1234-1235 0000 00000 4D4-4D5 1236-1237 0000 00000! huc 4D6-4D7 1238-1239 0000 00000 4D8-4D9 1240-1241 0000 00000 4DA-4DB 1242-1243 0000 00000 4DC-4DD 1244-1245 0000 00000 illuc 4DE-4DF 1246-1247 0000 00000 4E0-4E1 1248-1249 0000 00000 4E2-4E3 1250-1251 0000 00000 4E4-4E5 1252-1253 0000 00000 finis Notice but one contiguous memory space is ever written, making proving this program correct simpler. .