!!! FORTH FACTORY !! 6502 DISASSEMBLER __by JOHN MATTES__ see also [6502 Disassembler] __''Note: the below has been published in ANTIC 3/84 - with errors, preventing the code from running. Errata has been published in the following issue. Corrections were on the 1st screen (line 10 and 13) and the last one (1st line). Applied below. Full code (tested with APX Forth and adapted for pasting into Altirra and the Forth editor) maintained here: https://github.com/BartGo/forth-atari/blob/main/DISASM.4TH''__ __To run: __ __{{{' WORD-TO-CHECK DIS}}}__ __Result for words C@ and @ shown below.__ __APX Forth looks good (someone please verify):__ [data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV0AAADwCAYAAACjfbczAAAgAElEQVR4Ae2d/fMkVXXGF1 AFAhETQB1IxRaSYkRUpSWWhBBNG4lLC8mLhpJKQaBKAJRE9QAxSJaCS9ZFoLLmyzZXV6WXVxWkZdlVaKlFlCCxkAlgIIR0Gj h0k9130mZ 63b0/PTPft093PD1O3Z7qn /bp537u6dOn7122bNmykT6ygTQgDUgD2TSQ7UCCuzo4aUAakAbUu6nTkQakAWkgqwayHky9nDwdaUAaGLoGBF318tKANCANZNSAjJ3R2EPv4XX 8nKlAQFHnY40IA1IA1k1kPVg6uXk6UgD0sDQNSDoqpeXBqQBaSCjBmTsjMYeeg v85eXKw0IOOp0pAFpQBrIqoGsB1MvJ09HGpAGhq4BQVe9vDQgDUgDGTUgY2c09tB7eJ2/vFxpQMBRpyMNSAPSQFYNZD2Yejl5OtKANDB0DQi66uWlAWlAGsioARk7o7GH3sPr/OXlSgMCjjodaUAakAayaiDrwdTLydORBqSBoWtA0FUvLw1IA9JARg3I2BmNPfQeXucvL1caEHDU6UgD0oA0kFUDWQ mXk6ejjQgDQxdA1Oge8InR8s dKk soE0IA1IA9M0cMKnqnQoPqB7/PanR3/1b/872v 8Dbqw0y6s1ksj0oBPDXiC7ss cW2AKsDKz0tPWzM2nKCruwndUUkDndeAF j 9t/eGED7F/f d4Dsiz9yxeiUB38dftvzjKvCbxa6x976o7Du4IvvHEO58xdDnomupTTQfw10Ebr0gpdfuLn/F0iNUNdYGuiXBroIXcR05enqNlN3NtJAJzXgBbow3qwx3aM3/CCEGF7/xe396gnl2eh6SgP91YAn6Hay11Lj6G/j0LXVtW1CA4KubtHU2UkD0kBGDXiD7m/9zb EkMFffvN/Rrt9 LKZe9o3rdkR/s HbUfd/MjEPpglwfU4ziyCe8u135nY/5vXfXvi/wd 7paJ9TzOB77xy4nt/vyen01sd8BnN02sn6VO2jZjg2nC89E h6X9PkH3j67 ZgDZEdc8GC7iIZdsC9 P2fRY P47f3dz H7CV38Svu9x tox F7y1/9c6cITuodd cDo0CvuC/9/2w3fW/Lfl3/yy2Hde7/ 7JJ1q3Y8H9btc/Z1S9YJoAKoNNBzDfQZurF4LXT3 tg1Y DCG50Hutj/H/zT3WE/R61/eAKgZdDF/ Tp9rxhyXudaA9xWxz0d2/QXeRixJ5uvC9P0LV1W7HliQDu15x/m4QqWEkDfddAn6E7LbxgwVd1uY7wQnwsQVdeb6wJfe xJvoEXQh11gdpfNA1a3iB/9ODtB43jr57XDq/du4q gZdeQiCoDQgDbjWgKArgboWqLyxdrwx2b05uwu6gq6gKw1IAxk1IOhmNLa8h a8B9lWtu2KBgRdQVdejjQgDWTUgKCb0dhd6YlVT3mN0kBzGhB0BV15OdKANJBRA4JuRmPLe2jOe5BtZduuaEDQFXTl5UgD0kBGDQi6GY3dlZ5Y9ZTXKA00pwEv0I3HueVrtig5GzB74z/Z/B9hgJjUxJRvuOyesP7tN35/wnAc8Mbum8tVXwNmHZosUW/UC dRdJzfu3BzWM 6r9z dOF2 C9mV8Z2 517Q3KbomNM 233j145rsNLT1sT9n3S3c E317xqZvC92Nv eF4myanVHrXrpmhaQ M/Dat/lovZ6M1DXiDLqdgTxnkT /8z3FDLoKuHXshBV2Op5s6Rtu/V4UuOh8ADrAB8OJ6n/zAC2NbYZtXfnr9km3i/1T9XgW62Nc7ds1jh M3AcP33PF4OEdqAWMb41gY67jquWg7ATirBrxBFw3GfuhFWaPU6enOOnOErUdTy7NAF3XY75zrg83ed9/PA2h2O/Xy0Qe/9avwG2biwDYr73oqfD/gMxtrg9GLTr18dMqu4/CaoS6xXY686aFw7Kahe T6h8NxBF1BNNagq 9eoBsb5cUfuWJ0yoO/Do2orvBCfIx5Zo6I99HEd0G3OjTo6QK0B6/eOpKnW912TWhX 6xgfy/QZUyX4YUmoMuYLsMLfYBuUXjBerr0QFnW5ekqvFChcelh1JK7HkH50tEyL9DFxXjZJ64d3x4SEja8cPz2p5esx3Z8SMOZI/hflpwjDccg3LnOc3iBdWT51uu/G0Q87UGahW5T4YUq0NWDNIFZkC3QgCfo6gIVXCB5S/KWpIF aUDQFejU2UkD0kBGDXiBbnzbz1tqlHU9SGNM1 6by57ydNEAOBcb62enBYrDC9yG2Qu2ATWVp2uPkVpmeOHgi 8MngrOAXU9fO3OWj0X5elmBIa87sW16w26fJCWasiL5OnG zqgzSex/7nbQgQS70c0WSeLutQVuaALrMXlKcr8JZp0dU6b9Cl18bSPkij4ebN0 X/Ue71sWsCsDw SEP9yjxdnkcKujkepLEO00r7cgSu6RtrfmnBQld5ugLvND26WO8FurExmkgZ4zH2Ofu6ANxVO55f/FYhw 0WQAVgMXuB5yHoXjoidGEf5ekKumwbrksv0GVMl GFpqDL47z3np91ArgQzyLQ5R0Dy7rydK2o37/zF6FT2PusdRM2VXhBELQ60fIuPXiBLi5Izjxd79DtUnihTehCN3qQJrh3CuieoNspw2UIK3i3hx17Yc8zr57wcr3XXfUTqFvTgKAr8bUmPnVc6qiGqAEv0GWslbFHW9aVpwu4xMfpYvbCtDxdL9kLOWK67DCO3jWE5Ou cJdANkSQdemcvUGXD9LYmOJykTxdvhzR9QFvaBPv2Qu5oGtjuoKu7tzYPtyW3qBrPVws152nG3u6PF6X3kijmFLQ5fq2X45APZrO0 W5ytMVbKkF96UX6MaGaiplzB7H6xtpto5YnjVlzP6/zdeAUQ9BVzC0etSyo6Ed6YEyvNA0dL2/kWbF6R26baeMwVbydAV322ZcL3vydHPm6SKs4PmNtEXydK3gcni6bULXvpHGUBFKzZEmCNt24GrZE3RdGaZLT0NbqqvydAU2tdk5NCDozmG0liAngetaSQM90IAX6DKma28RuTxLnq6dgh3/P rmR5bkbXZ9wBvm6WK0NTZCjHuA88Wtvs3TpQ1R1jkFO4/bdlklvPD7//i1YBva4l23/fvYbqz/HmdcNd4GzxP4uy3xP zjoIu2FK632866fOLXfhr23cdrNKster 9N jyQVrK8GV5upwj7YhrHgyN4pBLtgUhp ZI8xzTtecfP0gjdAEA2INTsON7DN2m5kiz9fOyzKEd7VTvh15 b9AAZglGPZdfcHv4vuKOx8fg5ENVQrkIuiu2PBH Ny909z3n vH/sQ/MdG2PI j2wIOtegfsDboUPst58nTRuOjd9NnTpY1sOVTolmUvUAvWTha60EuTnu54xuavPxtA/5LT1owBvPvpa8NvFrrvvv3HYf1rG/CovXSQg66HF jGF6HJlLE hRfQoDFzxFDDC1Y3RZ6uXY/lIk8Xv3uBLjuGV59/29gTj89B3zvuFXuBLmO6DC/MC13GdJFylRKnd i /cbvB0/nDZfdE84hFV6oEtNleCFlizp T6WMcd9H3vRQOB972891i5aM6VaZrueg1VtDPXLHdOXpdhySVcMGVbfzAl00vqbzdDn2Ar0JW3bpNWDGdAXd3zRmO/YCrmkMdxteOHrjoxOd8b67ZhGxWuAyYr3Q5XHbngyw5u8ssd qncasMd13bnosHPOQz3 l8jGq1kXbtdwJeIKuxNCyGKr21NpOIJQG5teAoCvQqbOTBqSBjBrwBl3EIHH7hnFud/vwZTP3Jozp8hawKHuhTGCYxof/RXngZzdN1CF PZfbHrX 4fF2v/v3/zqxj/fd/9x4XdmxtS6j8OWpSZNtaaBP0K2SpzsNbITuyz/55RHSigBVPPGO/3fYlQ EdW9e9 2JdQd 7pbw 5995b8mfo//r 8CrDQwUA30Fbr24Yl9OWKa0C10se34LaTVWycgmoIu/iNPd6CNqS3PScedaJvT2njr671BdxGDWE 3Tejac9jr418Knu8HvvHLbglDDVnXSxpoRgN9ha4F3yzL1tOdJ7wQH0vQldcba0LfB66JPkEXYo4fpCEmO094gQ/I9CBt4A1E3l4z3t6Q7do36MqLECSlAWnAtQYEXQnUtUCH7BHp3PvpZQu6gq6gKw1IAxk1IOhmNLY8l356Lrquuq6zaEDQFXTl5UgD0kBGDQi6GY09S2 obeU9SQP91ICgK jKy5EGpIGMGhB0Mxpbnks/PRddV13XWTQg6Aq68nKkAWkgowYE3YzGnqU31LbynqSBfmrAC3Q5Rxpfv7XlnmdcNTa nYId2xx88Z3jdeit49eAU PpctptjNvrrZeP50iL68fpemgjTEwZb8PvmHMO2 137g3JbbjtLOXuH70y7Bf75ozNJ939TPgNc4JhX8fe8sPxNq//4vZaj2/rOm26HrutluVktK4Bb9DlxJRFhjl 9OhEe9/3obQgDntNhu0HWUM/z/kkm1h 3jsBU5MCWB0GbqYI2086eHdzyyB2skPvDCGHs71lZ9ev2SbIjtX a0KdLGfd2z4wbgO8dxlVY4zbZtZJqacti tF5CzaMAbdAEH 6EXBWNY6B5764/G2xG62Cb2dLEvC93Yo 46dHHO 51zfbDF 77eYDqbqdePvrgt34VfuNswCvveip8P AzG2sD74tOvXx0yq7j8JqhLrFwc80GzCnYUZdDr7hvST3ieum7INuKBrxANz75oinYCV00qld97pZR7OnG 4g9Xc4GfMJXfzLqQ3iBswELur/pqA9evXX0thu FzoXQVdAjXng5rsX6NIDZXihDLqp8II1KgcxtzFdQpdemS09TcFeNaabCi9YT9eeI5br8nQVXhDUbHvT8gx68AJdXLSXfeLa4KVYUNjwAraZ5UEa4JUSQxc8XWsHLL/1 u G85n2IM1Ct6nwQhXo6kHaDA1RmQrJtppqw5393RN0O2tENZjhNBhda13rRTUg6MobUWcnDUgDGTXgBbqM6ca31PheZ55ufBzP2QvWFnaqd4YXUg/SbANqKk/XHiO1zPACc6lxDjinw9furNVbqpqne9DqreH4mOHZ1pmhJmvvPU5fO7GN3V7LGQG1qFfp8f/eoMsHaUXCZvZC6kHatDxdPkhD9kLR/r38Fj9Ie MV9wVYxDHdadBtMk 3iq1yQLdqnu7rvnDX HmBhe6 Z18Xfl91/3OuNVHF3tqmI52BN habwPL9kGahe48ebqErj2GZ0/3DZfdE0CQgq49DyznztOt0sjtyxGoI86lyv/m2YZ5uvFLGMxkob2KoMt1LOXpdgRgHj3ZaXXyAt24kZWljKFhLJqni OhYbGReUwZY91QzhJeyJG9EF v1Pdc0GXONjxaW5dDL783XGPk7xaFF4o8XXTEsDnCDnZfWhaIa9GAF gy1srwQhl0U EFaxB6N0V5ugwveIcuPV17XlieFtO10LXgxnJdebq2Tu/f YsAqb3PWjcBqRzhBdSDMV28HGHrhWVCN7bDijseD9sKugJprJnGv3uBLk40R54u4c5G2IXwQiyCWaDbVJ6urVOb0GVMl9eTZdEbaUWeLs5DD9IEXqvnxpc9Qbfxk50Wa9H6JZ5i2TWxYy/seebVM/23bL9aJwj2WgOCrgTea4GrI1Vn6E0DXqAb3/bzNhGl8nTnf5Bm7YjlJmK6KWjnjunyXGfJXkDdp4UXjtv25PiBK4 BEs8NeO7MMOF6PNjjOpVybCY04A26fJA2UcldPZVNGcN6PrHm0I6z5ul25UEaG3Scp4sGjrEoqowyVmTPpn/LAV3GdJdfuLkQcnyQhuwFnO/yC24PAF3kQRoezlroHrZ2Z/jODBO8DIL1SGts2sbafweB7g269BRY1pmnC4GmPOoupozRRiyL8nS5DmWdg5hXbexNp4wRuvY8Y0 XdZ3lQRr2V5QydszGRwNQMWwo94uSHSPrIU 3gzDMFYbwAl0rYCyXpYxB2PPk6cbH6IOny0aOsgi6zF6Izz3X91zQpaebGk Xb6QdvfHRCVgW2SGVp4uXKmDngy7aMrEPeboCbJGOkr95gS49UIYXyqA7b56uNQLjeF1IGaMXFYcX7Hi6bULXQ8pYGXTHOdvrH56ApdUDlnG3w04MHbJdv2LLE2Hday64feJ3bCPoCrpWK1OXvUAXFc2dp7tqx/NLGtBUg2W4BeHYCwQASsYLUb9Z8nTtPrDcxIO0NqELe/DlCJ6rDS8wpst1LBnTxf/ZAXMdOvxYB2XQxbbsGLkPhRcE4lhD4 eoDuuVAaw6ViLNwrl6S5uQ lwgDYUdAd40dWpLfFkBT 1g2wa8AJdxnR5e2ZLm6cLwyCWifWM41ljxbMB27EXsF18HI8xXdTzLdd ZxxfxLkWhResjU4qmIId 0GMHNvtd 4NtYLG03Q9OE mD8YD3mAdY7q0lx1lDOvx2eOMq8b2LgovcDuVgvPCGvAGXT5IS52YnSMthu7Q8nTbHE 3CnRxDW32go21pq7vPL/bmG4MXcZ0madbtP8qMd2i/ k3AXguDXiDLr0RljZPlyeY8nQtdK13c8ymx5Z4eWxoHj1dPkjjKGN8SFOUvQCbVHk5YuVdTwVPrs4HaTamy uFuvA6sTzypofCsZuCLo6T8nQJXdYPpTxdwZLabKX0At345ItSxrjNNOiiYeH2HAnsWI6huw9nC3CevTANuhYkNrxgh3Zknu7QoUtPN34jjZpSeEEgphYaL71Al7FWhhcWge4R1zwYvK0i6PI4773nZ0s8ssaNXfEB1iye7is dVPoWFLQtWDGcl2erqfwAq7bNE9X0BVUvbTvZV6gC4NMy9Pl2AsxSDj2AvZR9iCtaLoe7svTa8A4jyoP0lIx3RyebhXocuwF2NheozrFX/QaMI5nx9O1oSass EFDmJOHdgSIag666p9CfxBA56gK1FKlNKANNB7DQi6EnnvRV4xrCM7qC1k0YAX6DLWam/vuFxnni6N2oXsBZ4/ylnydHOEF2jHspLhBQx1iO1wDjiXw9furP22PRXTxXHLwgtYTy1Ye9uxFzSermBcpvOZ13mDLh kpU5kkTxd7pPZC2hkQ0gZO/HuZwLscg/tmAu6i TpMqa76v7nxh0BNAFtpGK6Gk9XECZL5iq9Qdd6G1iuO0839qg9Q9faosjTrfIgjfuo 420qmKzL0egLsg5rvrfWbZLebpV8nSLPF3UtQi6qfF0WdfxEJKaOaKR60w7d7r0At3YiIukjKHBFOXpMnsBU7CzoXmGbh15uoLuvcFrnZYyZvWX8nRT4 nyv3j5A/bGyyD8TaW84iUa8AJdeqAMLywC3VSeLqFLENnSU8pYnXm6eDmi6fBC20M7QtTTPN0q0J13PF0cn28N8jhLGpoe5qkjoga8QBcibTpP1zaELni6tlOYN7zQ5BtptGeb0F00TxfnQC3Q3ujweW4sy8bT5SDm/D9LzZEmL5f6mSg9QXeiYuwVVC4BgBc72bEX9jzzarf19GIv1UMQDhoQdCUEwUAakAYyasALdBnT5a2ZLevK0 1KTJcNALFp2AGjp/E3lPNM11N39oJ9DdheKyxjPAjUM04Zw292JDh7TlrO2Oh19zjRnrJrzxt0 SAtZYg68nS5b6 zAaN VcZeAOBgj2lDO7b9IA31xNgLfDkC3/mwk9dCpaA7GA14gy4apP3UnafLC8uHJ31JGYPNyqZgb2JoR9py2oM0ez25LOgKstTP4Eov0I0Nv0jKGBp2UZ4uj8E30rzPBjxLnq5n6OI1YAzAjjxWhRcEW7bDwZZeoMuYLsMLi0CXXlTXx9OlV8iyaOYIjqdbBt22wwscewGNTNAVdAcLW8bSvUAXFyJHni7h3pdBzGG3spguga0HaYLd4GFH6LVdeoKuRCEwSAPSQO81IOhK5L0XeduejY7fboqWN/t7gS5v 3k7bMu68nQBl/g4HrMXUM qKWPWTjmzF2yeLjNMME8b6hPn6eK3pqbrga3s0I44lp11uGiUMWyz4o7HBQJvMBpKfbxBlw/SUt7XInm6fDkCo4xh/17zdOMBb1K22P 8DQFyK7c/PQGQHIOYV4Eu6m2HdrQwTJ3TrL9z7IXlF26esEFqP6nZgFPb63fdCdauAW/QhRdiP/Si7IlPm4Id2Qt2tgA7BXsfPF3aIgVdrj/5gRcmbFn3IOZ27AVeMzzU4/FZYqhDrG8Sujx 2XEOWr011MNOTMk6qhRcs2nAC3TjE14kZQwNryhPtyuebmwLDhvIlDGuF3QvHcWeLoZWxPW3swHDXuPBxTc uqRToD1VCrxZNOAFuvRAGV5YBLqpPN2hQHfI4YUi6PKu56j1Dwu4Q4mbej5PL9BFD5MzT5e3o118kMbeOOXpeoEuB7yBrdt6kAZbCbryYNlmXJSeoOvCIJ57SNVNnqo00H0NCLryAtTZSQPSQEYNeIEuY7q87bflLHm6EA8GisH/kXoViyk ThfDCxxP19oIObI8V4UX7h7bAjZheIH2SmUvlM2RRtuqzAinvnr13qDLB2kpcZfl6eI/b1qzIwC3CLpdeZAW5 nG2QuEbpUp2JuaI81rnm78II0vR3DCyFSe7h5nXDXWDbSDHO6UBvW7wLuQBrxBl94Iy1nydGmIlKdrocvxdHkcz7MB87xYToMutxtCni7PFeWR6x8O4EzlA6fydGMtCLqCqtVV7cteoBuf2DwpY9zHNOiiUWGUsa6 kUbossNAacMLtANK3Dlgfd2jjGHfHl6O4LmmpmDn lSe7r5nXxfss r 50YKLwi21EujpRfoMtbK8EKT0O3aa8DTwgtlAmkKul7CCzh3jr1w8OqthSEBxnSL8nQJXduBcRkecJlttU6QnksDXqCLyi ap8sBstloWPbtNWB6uozpll34NqGbI0 Xb6TxWrPkG2mM6fJ3lkUD3sjTFUTL2lJt6zxBt7aT6utTT52XPE9poPsaEHTVu6uzkwakgYwa8AJdxnR5 2fLIebpohFgDAnYAWET2yji8EIb0/XY kxbbnKUsWnH1vqMMJEXPtFOk9rzBl0 SEtVeAh5ujj3qoOYwx5l0EWebtMTU6auFX634 miA8FDwbLttU6Q7L0GvEHXerhYrjNP115M5mZ6fCOt6ssRsa1yzhxhbZla5oM0zgb85nXfDp774Wt3CrzyCoerAS/QjRtuEyljPMY zM3c8bzLCy/oytujVlX2UAteoMuYLsMLTUGXx nCFOyxJ8tBzG1MF/ORcbuUp9t0eOH9O38R6rD3WesmOjF6uqwfS3m6PQSJPPcJ7Zd2ll6gi0o2nafL14DZ G3p TXgaS9HlMV0eY5NvJFGYU2DrsILgiy1ovLS0TJP0NUFUeOUBqSB3mtA0PUl8j ZFwq45XV3svPt2S6hoPUQNeoMtYK2 HbVlXnm4XwguELs4fA/ekwPuqf7h1HMvFtnbAmxzj6abqZX9nTDdXeKFslLHUgDeoLzNZrObs0I7HbXtywtbcjh3jYWt3Fq4/9tYfJa ftZOWfTk jV8Pb9Dlg7TUiS Sp2v3yYbmOWUMjfsP1 xY0nDtgzScU1lMt6nxdK0tU8s5octRxmCzeGhHDniDdUdHswFzwBuMMsbzgCawbdGAN8dsfDSsO SSbePtCV2kxHEfKgcG0lk8dm/Qhdjtp4k8Xe8pY2iw9uWIaW kxQ3cerrWllg 4DMbs4Ihx8sRHGWM5xpDF/Yp83Rpv2kD3mDGCRzjoIu2TNiQ0OXxUaIT4H5VCsATGvAC3YlKfejSUVMpYzyOZ0 XdeRrwGjE1ouKPV1uz9JCt01PF/VpGrocZWz5hZtLBzGfBl07cwS0R1vGZZGnG2 DcAqumcILgm2sjfDdC3QZ02V4oQnoMqbrfTxde6GQ00oPqihPF9u2HV5oM2WM0KWNWHJoR9qyDLrsgD/wjV8WwpYx3QM/uymsPyp62ElPlx2joCvYUneFpRfoonJN5 niGIQ7G6fHmG58oZinizpj8Bis9/QgrU3oWlsVPUibNp4uY7rUgy1tTHfFlifGnR 2sTFd1MFeI6xXeEHgtdqcWPYE3YmKzRKYHsC2iFOiMRO6Hmxlp vZ88yrC71ED/VUHQRAVxoQdCVIV4IcQAcqew 8zXmBbnzbb2/z6srThdjj43gML3DAG2sDxgtxDnyQZtcPPU XKWOI3aagptmABw47Lx26N jyQVqq4SySpxs/SEsdo 3fCV2 HMF44bwP0poe8CZlr1x5ujZlLAVdPkhDR4XUL9aZMd2qebr8n0oBfG4NeIOu9d6wXGeeLqFrj9FlT5cTU5ZlL/Bcmxzwpkx8TaeM8dhlnq59OQL2sNDF/5m9QFuxtA/SeByVgu3CGvAC3fhEhpwyVtXTJRxQpsIL3Gao0GX2wttu N4oFV6ItVf2Rlq8rb4LwjNrwAt0GWtleEHQ/f xF8rCCxxPNwXdHNP1eEgZS3m6hC47H5aagl2wnBmWdcWEvUAXBlCe7m8aAj1dAgJl0YO0KuGFHG ktQndqi9HQF8pTzcOL5S9kdZaQ62rwWs/43h a9fSE3RbM4KEOJcQlacrb1Ftdg4NCLpzGE2QngvSaqDSmjTgaOYIxnTtLTWXh5anC2HaUcZS4QXah2VqjjTsb VdT4U32nKOMpYrZQznl4rpqpEL9O404MXTJXT5IC1lqDrzdDFQNYHleY60lC32P29DqP/K7U9PeJ5eRhnLBd0qebopG p3QTm7BrxBlxBkWWeeLoxLuHP/LD1BF/Us83QpkhR0uf7kB14Ydyo4z1d ev0EnLldk6WHPN0mz0/7FrRn1oAX6MYVbyJlLD6GV083rmecMsb106CL7XDnAOAONU XtlIpOLrRgBfo0gNleKFp6DJNyOMbabE4vEO3zZQx2koxXUGVWnBfeoEuDJU7T3fVjuez325XFUQd4QUcK8io/9YAAARhSURBVIen2yZ0Z8nTrWp7bSeAN6oBT9Bt9ESV5lV7B6M8XcFJbXYODQi6cxhNAK8d4Gq80uFgNOAFuozpMpvAlrPk6b5pzY6JJ/aYzyq mF2YDdjWOY7pcjxdvgaMbfc a104b9zq25Qxa8c2shfseTSxXCW8MG2UMdSrysSUqdmA6zivE7/203D9 niN6rBPr/bhDbp8kJYyclmeLqYqB2Qwiy7 j3ms8P2YTY NwWvh7jmma88/BV2cG zBoR3xPYZujrEXbF3bXC6bIw2jjKFuyy 4PWjCDnjDh6qwHz5FYy/YOdLiKdirnPO 51wf9s1jnPLgryeOI gOyNP3Bl2KkuU8ebpoBPRu uzp0ka2HCp0y7IXqAVrJwtd6KVJT3c8EtzXnw3gf8lpa8YA3v30teE3C9133/7jsP61F20ZOwtVwK5tOgJuL9CNBdNkylifwgto0HgjbajhBaubIk/XrsdykaeL371Alx3Dq8 /TcDt67MTL9DlbT/DC/NClzFdpFzFDY7fvUOXQztWna4H55WCLsMLPPcmylTKGI FGYwBE8xozN/qKhnTXX7h5rBvhBFwrEOvuG/JsVJDO6IuXqCLmK483Y54rPN2Cl6gC E3nadbNF0PPYsuvQY8y4O0vkMXurFjLxTB3YYXjt746ASMOUcadWBLTtdz3LYnx EAux77rdp5zBrTfeemx8IxD/n8Vyofo2pdtF3LUPcEXYmhZTHM23PrfwKjNFBdAx6gi1sq60EULe/98S9VPykJQLaSBqQBrxoQdOVd6g5DGpAGMmpA0M1obK89r olr1AayKcBQVfQlZcjDUgDGTUg6GY0tryJfN6EbC1be9WAoCvoysuRBqSBjBoQdDMa22vPq3rJK5QG8mlA0BV05eVIA9JARg14gK4ueMYLLo8mn0cjW8vWRRoQdAU8dXrSgDSQUQOCbkZjF/V6 k3ekDQwLA0IuoKuvBxpQBrIqAFBN6Ox5dEMy6PR9db1LtKAoCvoysuRBqSBjBoQdDMau6jX02/yhqSBYWlA0BV05eVIA9JARg3UAt1ly0bL9JENpAFpQBqoSwOCqjoVaUAakAYyakDGzmjsunpK7UdelzTQXQ0IuoKuNCANSAMZNSBjZzS2vJPueie6drp2dWlA0BV0pQFpQBrIqAEZO6Ox6 optR95XdJAdzUg6Aq60oA0IA1k1ICMndHY8k66653o2una1aUBQVfQlQakAWkgowZk7IzGrqun1H7kdUkD3dWAoCvoSgPSgDSQUQMydkZjyzvprneia6drV5cGBF1BVxqQBqSBjBqQsTMau66eUvuR1yUNdFcDgq6gKw1IA9JARg3I2BmNLe ku96Jrp2uXV0aEHQFXWlAGpAGMmpAxs5o7Lp6Su1HXpc00F0NCLqCrjQgDUgDGTUgY2c0tryT7nonuna6dnVpQNAVdKUBaUAayKgBGTujsevqKbUfeV3SQHc1IOgKutKANCAN5NLA/wGZA993CntAbAAAAABJRU5ErkJggg==] __Antic Forth (1.4S / Team Atari) seems to be in trouble (also, does not empty the stack): __ [data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV0AAADwCAYAAACjfbczAAAgAElEQVR4Ae1deb8VRZJ9H2B62hltW5oWUdRGQUAEFERAQdlEZBOUxQUVGhXct nu6fn19 mv OZ3Ot/pioqXtdx7o/LVvff8cX9ZVZmVS8TJU3Ejo7JW/vHwP1f1kwyEAWFAGCiDgRUJuoygJWfJWRgQBoABka4sff3TEQaEgYIYEOkWFLYsHVk6woAwINIV6crKEQaEgYIYEOkWFLasHFk5woAwINIV6crKEQaEgYIYEOkWFLasHFk5woAwINIV6crKEQaEgYIYEOkWFLasHFk5woAwINIV6crKEQaEgYIYEOkWFLasHFk5woAwINIV6crKEQaEgYIYEOkWFLasHFk5woAwINIV6crKEQaEgYIY6CTdrY9uWf2P369s O/N8yurP/3fyurJCxvflzHIQ30QDoSB8WFg66OPdz7AOkn3l/tb/kV2ILzc7 iZNPDDb9Xzr31SF8jmZ v5rOt3W vl2oD0 tlUx5kr Xu27qi38d1f15f7/Ot6mRdeqZd56916/jvX6vnP7Knn3/ 5nt/Wf advVKv4/Sleh3P76/n//m7ej7r fLHVO6J59fnv/tBvY4T76wvw3py6W83raz 8L/1OrY8V6/jyof1/KOn6/n7jtbzP/xzlf/Ytnoe8YD08e1VuVzf7LWDJ r1fPBp/d5NmXYeeaJeBv2y7e8/WuW/ca6ex3Lvu3Zsn3LHn96v17PnUNUGyh9/p54P/dl6tr1Qz//mf r5LPvZg1Tu2Rfz SyXS7fvrbcBfPlywDtlgBTzwZY5d62e/5Yzkl54uZ5/55vq/oc2V3nUEefrM7urchdvVuXQh9ffrvLQl72H6/mffFnPt/198GsqC36y169 Uq/j8Ml6/oHX6/nox8dfrKyGkS4Ujg5du50aeulIOj91cWUVpHvsTLr 9nvpOgCFTtz4PJ2DFHCeU6IdaJ9jDB51vfN qpv3PL07XacSoTSUw //pjK3vshnT 5M51jgiL/xcPp/MzldP7GmhIPrU3oizdS/nP7Uj6VuOnpdP7tX1I 9KWnn8/3UMlgqjQh3NXUx27Dqbzm3fSOYgO V/9VG/j6zWwIM T7uVb6Z6X30j3gHBRDvpq6xvzHt6SyuOe/3483QPix/lTa1h4fw0Le19L XhwIP/4uXT yvF0fulmOt/ Ujq/fT dk3S//9vK6m8eS9fQ/r3v 5Pua6dSnXww4gGKPtxaI3eQN84f/FLVjwcxrqF9tHf7q3SO/uEc/UX wePpHKSLf1nIO3As5eFhg/O v7vfpvu27Ur3wCBBG/vW5tHJi mcD8aX1yb05bV2QKAoD0JFm48 mc7xUPzPTVU/qCOUnZR0dxxIdX50L9VHIwk44ziBc9QN3OMaSAbnz 9L5xeup/NDb6ZzbyTteTXlX/8s5dNI uKHdN6HdN/7KNWx/1i6h0bSm mc1xHn1AOfaSRBPLmOJACc8AeyuJnSRf9wzX0F2VpJB07m84xPuRjvLZOHIeQrnUveNJlg12ki3JUIgeJlGSI/M cBcpyeKKwHaaYEMjnhMZ1S7qc0KyD7VjSxcRkPkmX9SM94iY0rlnS5YRGHdOSLgiKfciRLgiO Z500Z8mS9eSLic06pmWdNE2 5Ej3bevVvk50t25NqFRhydd1suUE9rqounYku6LaxMa9eRI105olMmR7nsfV Mg6bLttonGMk2pJd3rn1dt5Ej31bUJjT7mSPcPz1T3e9JF 02WLgwiytim59csaku6NJJQrol07XzNkS7dgaiD/0wt6XK Ij9HuraPOKala0mXRhLyc6TL Yp8S7rgA19/E nSSEJ5ki7k7C1dGkmjIl0LyN/ YWX1x7 ngU/iXkAdXZYuhAMltlm6KAMleksX9fsnp 23V Isli6V2GTpIh WRJOli351kS7qgNtnFksXdcCyohXlSRf5sMyaLF3k46 at3StXHnMv6593QskXbSBv5xNli7y6WpqsnRRBn99vaXLviGd1dJFG/gL32TpIv/UpSRPHHvSxTXoocnSRR bSNeOI3dM0kUbcIXQSMqRLsps2d5s6SL/yOmV1SZLF/lw6cxi6aIOuJb8fKWli3zMb2/pgm QB/4BD XcC7R0UQ4uMm/pevnRHRjmXoiydG1HpyVdr0RbJ5 cke4F1A8ljtG9gL51ke68uRemJd2h3QuYfPS7w52C80l8utbShd6aSHdW9wLqnpV0F929QNKFDv1v69raCEm3yb0AOdvfYKR74069k5zQbLxtIc3 XbED5d9 1tGW8u9KW/QCn5xsg9aNrZeOeZaxC2n27wrzkZJ0UQ fnMzfqIU069NFX gv5FjHvpCGfj5ifMeU5yTuBdQx9EIa2oDVxv4hndSnizpKLKTx3wj7umN/nRzQj7afFtIq bQtpNHVRDkjHcy90KYw5VUKkywkC2FgOTEQ4tPVGzR6g0YYEAaEgTgMdMbp0qdr3QsMGdPTfDmf5tK79C4M5DEQYulGkS5XQ60fBMc2eoFxfyzDGNAuBXNlnPcxtT5dxGryei71cX 2jPXpdvVF XkwSi6SyzJgIJR0IbCmON0uYXIhjS9H5KIXGPfHoG6 7ZSL08211xW9ANLF20m4Fy83gFQRAoZzkCpIlwtpfDki146uiTyEAWGgCQOhpEv3wu6Dkwvck26uw5Z0EY5DSzOKdG2bnnRtHuP 2D7DkWwZHU OAclMMlsGDISS7iwCmyfSteP0rwHbPB2LRIQBYcBjYLSk28e94AfTdR7hXvBtiHQ1qTwmdC5MtGFgNKSLTuYW0vzLEX4hDX/x 7gXohbS6NOlawGp3AuaZG2TTHnCh8XAqEjXdkzHAqowIAwsIgZEuh2vPS6i0jUmkZkwsHEYEOmKdFvftdfk3LjJKdkvpuxFuiJdka4wIAwUxIBIt6CwZbkspuUivUqvk2BApCvSlZUjDAgDBTEg0i0o7Emehior60kYWEwMiHRFurJyhAFhoCAGRLoFhS3LZTEtF lVep0EAyJdka6sHGFAGCiIAZFuQWFP8jRUWVlPwsBiYkCkK9KVlSMMCAMFMSDSLShsWS6LablIr9LrJBgQ6Yp0ZeUIA8JAQQyIdAsKe5KnocrKehIGFhMDIl2RrqwcYUAYKIgBkW5BYctyWUzLRXqVXifBgEhXpCsrRxgQBgpiYBDSvfxh lLvy29UT8BjZ6qv99pP3dz4PJXhhyltHo9/tzWV4deAeZ1pn8/1TPIkmrXsM3vWj/Xbv6QxfP 3et7W5ysZod1LN v5HOPpS/Vys/Tx2if5NtDWqYsrq9Ab20VZtLVtV3Xtq59i vLK8apOtof09v2q/ke2rC z6ekqn3J476NUbv x9Xks8 KrqcwHn bLPLS5auuRJ/JlWJdSyWdaDIST7rXbFXA96Z68WClqz6FUzpPulz9WZTAokJUn3WdfrMpcuN7vG2nTCmjS 57bl8aFT7g33fvg11Tmj3/Klzn/fso/fDLlHz2dzs9dzZdvaqft uVbqU6ro6NnEunivpeOpHySLq7hwXj3u7g gHQxVtS980Bq78M/V/U/ti1dw4PqN4 l6/d/Ttce316VA4mStJtIF9dZJke6IFnmIxXpVvJtw5HyJpdTKOneuFMHrp3QVjn7Gia0BT2P7Ycpc5bu3tcmH7TtyxDH3tIFUdh2xkS6lDMI1/YRx7v5YLyTLN1PjQXqy85yvmfNAr3 2fo RFi6B0/UcelJd9MauVMWSEW663Uxi451byXPMNL96IsE7B37V1Zz7gUKnX9dL92qOsE8m Y wW7zcXxlzY0xNveC7Sf CmMS072AvDGRbtODkWPYsWaBfnSvXV8sP206i6WLNpvcC6 dSvLHF5tz7gVYzNDPg19WVuVeGFbH02Jj0e4LJ11rLeD41bcqRR5 KwH8/AfVNQqUPl26F3KkS0uX7oVFIl1YeTtfTnIZg3uBehmSdOnThR8b7W1/KeGDPt2 7gXc20W6Hpe31twYJF2fj3O0TzkolSyiMBBGurZDTZZuG ni/s3PpklnJ4B1L6DMx2sWNcuMzb1Any77h9S6F/xCmi0H0h3DQhp1SfcC ziEe2Hf0brOrU8X/ejjXrA XfT10Ik8QeQsXY4VqSzdvNysjHQ8u4wGIV0pZnbFSIaSoTCwmBgQ6RaMz8MkarN0YaVhUUmTTTIQBhYXA4OQbpd7gX9XfTgSr/vUh4z5/LEtpHVFL3BC3fkm/bV endZgPk4Xbh92CekXOz0co52L9Cn69vxPl2fj/OmkDHkTepeUPRCXf8WCzqOl0046bbF6WJCvP1eGsS0cbpPvZDuf38tNnOsPl3G6froBVi68FMCzJ50r35cztLNxenaCebjdPlyROk4XUR6sF IAAGG7MsRt 6may 8ksohSgFljpyq7sP9TXG6XEhD9ALb e6vqQ4tpFUyoWyUzi6TUNLtitPlQhomBX/ 5QheZ oX0qD0m2vxwLsOzi6AaBBxIQ2kywmNsTBkjO4FP6ERvYBypdwLYyBdyr4tThdlcpEsvNeS7oUbFa4s6XbF6bIuLaSNbz5RN4uUhpFu3zhdCs9burzOtG2ioczYLV0Q6OdfJ6tMpNs9mXNxusQC0zZLFzLee3hl1Vu6XXG6qJvuBVi4bEupZDEUBsJJF C3Pxuny0G0vZE273G61tLFeGdxL5y8kGR54nz8BMhZum2vAQ/lXgBWZonTtZYu5N1EuhaTOPZxuta9gHpw7v NEL9K4/G4TDINI10rtD4Labk30hYhThdyiFpIG4p0/UKaJSS/4Y3Ni15Ig6w2Ok7XuoDsWHEs0hW5Wl6LOh6EdKM6t4j10KfrJzjP6dM9eyVZucfOCviLiAONaXlxLdItHKeryba8k026l 6BgTDS5UIaLTam1qfroxdsnK4F5MNmD1UbvcC9F1g307HE6SJsiX1CioU0Oy4cN1m62HcA XwNGDGsvDd6a8c294LtP46pI/p0cS1qP12Ory16IeI14K7oBS6k2bFrl7EKf9ST0hiZhJMudhmjchCTS9LlJuZNcbq85/dP1YnLk 68xelyXDb1u4xhvwFMeL/3AvbTPX6ukkfUfrogUuyrgD5BH2ibWztCX7hWIk4X7Vufrt/aET5V9A0Pqqb9dPsupGGBDe3xwdi2kKY43WoOW9zqOEYu4aRrrQW7baAlXUYvoCzjdKHQPgtpKDcvcbpNICXpWll5S9fm8TiKdG2/POnavBIb3qC9NkvX9qctZAxk2jdOF/Ik6aJ WboxZGJ1peNmmYaRrhfyux8kK8VbugA8tnb0cbp2a8cm94JtY xxunwjzfaZxyRdfjkiZ nCvYDoBSykRbsX2A kYydd616w/3o4Blq6wFUuTpflmMrSbSYDykjpsDIKI136dOleaCJdTHIotYl0adXZ1O 9MOb9dH2cLsaK/vONNJz3JV2CfyNIt5R74V9YaPhyRM69gPL3vq/2XiDpgkyR5 N0KUOkua0dGTJm43TlXhiWdKxOlvE4jHQhvElfA YijRd8m6U75v10aUXZBwaPSbpjWEijvPlgZB9PvJMmm93whjoaaiHN nTRD7ufLkmX/bMpyJLj6NpP1y6kYbNz3sdU7oX1MqFslMbLJpR0paB4BUmmkqkwsFgYEOkqTvdflh sXFiS/o20oS1dEcpiEYr02a3PMNKlT9f BcQxF9KgjK443T7RC/PkXsjF6RKUX/yQSM7Ky4eM2bzTl7qVybpnTUu5F8ayn 6s8tL95bC5CLIOJ10upEE4WDQj6dqQMeQ1LaQt2oY3OZD4hTRfpsSHKW2bJy9WD4CSli5IF2NFX3K7jMGnC1mxr10hYyjXtJDWtJ8u61ZayVmyGFYW4aRrrbMh4nTHbOkCrLnohRyIvaXLOF2ULU26aNO6F3L9HWohDW11xel2bfM5yUIa8InyuTHqmuRSAgNhpOs7y5Vxb kC9F1xuqgrN9H4GvC8hYx52fhzG6eLPJKufYAN7V7YSNLFmHOWrpfTNJZun/10fTs6F/kOiYEw0qVPl 6FJtLtitNdRPeCj9P1Cm0iXfsacEnSLe3T3cj9dL0udC7CHRoDYaSLjs4ap7toC2nWUmWcLuREn67Np3uBG94wb6g30vwm5tbSLUW6kEVbnC7y7RtplIn9RhrKdLkXUAa/3MsRzFMqsi2FgVDSLdXpZWzn0JtpsevC9bjJwX8jJDMQL2RbknSXUZcacxyG51GWIt3CcbpNb6SR LiJ TyCSX1ebjKR/vvpP4x06dMleTDlQhoVQivKf66HG97wPpv6vRdsHo7Hsp8uxxj1uR7WF53ihQcrQ8RP2zaoI1sGx9Gf6ykVp2tfA8Y4fPSCXgOu699iQcfxsgknXS6kQVk2Thfn9uWIHOne/bYaYFP0wrztpzvLhymHBLz36fq2Smx4UyJO10YvYIzcH4NbO2rDm2rOeQzofBjZhJOutY5gMXnF0YrypGvLtW14g3Lzsp8uJzRkwoU0uhcQ G/HjA28Ua6Ue2EMpMvxzxqny3q4n 6hE3XZeksXcibp4t6cpYsyXkdsR2ldvpLHZPIII10veC7S9HUv8H5 OcJ LYB5Nh37frqYtHgNOGfp5ib0MpMu9DptnC7uZfQC9tO1GMkde0s3V0ZbO3bLMSc3XesntzDSpU X7oVpSJchY1 bVz tIufx5Ygc6SIMCuO6802ybp/enc6vfly3dIf6BDvazlm6 GQPXgNGfin3Ah5AkXG66PvpyyurR06tnwBdIWMPba583fpG2nr5Qbb6zS6DMNKFMqLidJtIF22M/TVg9DFqIW0o0vULaSA /vzeC7yONHohDbKaNU6Xm5jbfuLYkq51L/TZTxfki77pJxkMgYFQ0h2ig4tWJ326niR4Tp/u2SuJCPFyxKLJQOORTpcZAyLdAS0aLqTd/7maZJZ08Y202/crKxNbOy4zGDV26X8ZMBBGuvTp0mJjahfSbMgY8rlBNgTdJ07XKmSsC2ns45M7E5nie168hrQv6dLSpRwj916w7gVGmPA1YLZnU7iN7Biij9uiF/q8Boz wG2APmMLx6b tfl04cPlmOVeaJZhk2x1vb/MwkmXC2lQgo3TnXQ/XSoRoVZ8OYLXGDKGSbL3tf6D5f0l0ibSRdvceyH3NWDkc5cxbHiD8yE TOkX0ki6TQtpQ8nM nQRwWHb4TfSbCQL/jVA703fSGsi3bb9dH3ImEi3rgerEx3PLptw0qW1gJRWlFfUviNp4vSxdP1nt dhIQ3jbSJdWrqMAaV7gRve4F5LusfPVRbYuauzK9zqghEm1Bn3XkAZH71g74s ntTS9aSL/rRZunYhDff6N9JwvyzdWGxFY2SR6gsjXS8UTuicewH76fry/rzpjTRMGuynO6/uBT/O3DlJF2MdapcxtEsdoR38xki6Xj45SxdlmkjXvpEm90L3vPPy1nm8zMJIlz5duhc4oUm63r0AZe44sLJ64/M0KPp0 ynS5JgOra9FzC2Jku3D4hJumNzL0BHd7 LB2GbpWvlldvEnPldpEusMLVvpKEOWbrxeqVulNZlG0a6EGxbnC5Jl6BnStLF/Xw5gnlIvXuBClxkSxdjHNNCmtVHNOlany7awYbu1DFSv5Dm/fsowzfS2E//GjDra7J0vU8X9ejliLoeKEOls8sllHSlkLpCciFjklFdRpKH5LFsGBDpDhinu2xg0nhFoMJANwbCSJc Xf7FY p9urzO1LoXqLCuXcZQbozuhX9vpnK3Enxu7wWO3aaMXvCf67FloqIXbJwu6vf76VIPuw9VkRPsR0n3AkPG2LZNm0LGUMa7F7qiF ReqPBK3SsdTibhpMuFNCjNx meXNtMJRcyRiVzlzFOsJxPd6xxuiRd9P2TL1MsKcfBrR0xzknjdHEPPtcTRbqoz8fpUv5MS4SMcRPztg1vICv2CamPXuDeC5A98t 5lh4U3HvBRi8gnzriQhpdQA9 qdrRLmOVLKzsdRwjl3DSJckgzcXptu2n22chbcxxupzQVgY8noZ0ee J8zHKtpOmi3RR1lu6Q2x4wz5FbO1IeSEl6bJ pE0LaSyjXcbicUbZKq1kG0a6Xqg ZMzm5yxdGzLW5F6wWzuO3b2AkLHcfrqQAy1dSxJ0LyDfh4xZ2UUd9yFd29a2XcmCHMq9cPWTCpS2XRznYrZ9GZ57SxfX6V64eDPfBt0LsHBZj1LJYigMhJEufbp0L3jSZcgYXA4YzJ41fyF9uiRdS0Q8ZpgQSZfXmY4lTpeWLv7yUmHep4vrJF274U0X6ZZwL9j9dNl/pkOQrncvoC3sLYy39NiuDRnLuZpYDmnuyxHevYByz 2rvhyRcy gDNwNfGvQtqHjSjeSxXSyCCNdKKAtThf5bRveWAU2Wbq2zNgtXfbVky5fA YDY vzKTYV59hlbCMW0tgXpH7vBZsX7V4g6do2cDwp6do4Xb/3AknXt F9uj4f5yLd6UiF2Feal18o6UrIeSH3kUvpz/X06ZPKTK9PyU6ya8KASFdxuv/ K0 QcLEzZ/3h2lc/aUJRVkqFhUkxEEa69On6ico4Xdux3EIa8xkyZrfzY55Nx xeoAywkGb7bI / GF9DGybeyFyP132g3539pcb3mwE6eaiFyLidLvcC5SF0masSjaxsgknXS6kQVE2TpeKsxPabu2IfBsy1ka6Y43TxRiwSAMSQ5wux xTu5Dm83DuoxdK76cLHYGQc33b/Ey8pcsNbyA3u/cCSNfG6eY2vJk0ThdjsgtpuTHqWl73kkuMXMJJl1YTUkxeq6g C2ldlu6Y43Qx1j6ki3Le0m2LXhiCdK1e8NIK9GUtXZAu43T55QhGmES6F7o2vEE/20LGLOkyegFjYZxuztLN7adr5aHj ryVPGLlEUa6XjH860r3gg0Zm9a9wJCxMe n25d0rbxg3YEo I00Wrq4xt8Q7gX0Af9G0AbCxdin3L8RhoyhbBTpMnoBERs59wL7w7TN0kW/9h5e/0Ya72X677A t5sZ85VWOJAshpFFGOnSp0v3QhPpkkSYMk6XCm6zdEm6vJfpWOJ0MYYc6SLO2L6RxrEybSJd7KfLL0cMRbrsg01JuniBAtf/tDcRM0LGIt0LJF3qkSlDxujTta6m6NeA7bh1PAzJSK51uYaRLgTbFadL4TdZutanywnYFBA/DwtpHANSS7r06dp8uhd8nO6QX46APpos3ZI XfSjydK1L0dQXoh9JpaQ2jhdlJl0wxtbl47rspU84uURSrpSULyCKFO8kQZCuXB9uDbYFi1dkpxPo9wLbE/p8DqVjMcjY5Gu4nRrVqMm53gmp3SxmLoII136dL1VxIU0C6BZ3Atjjl7gIo2XAfyQHL9/DZhl29wLvLdUai1dhvUNuZBGGTClT9ePt2shjfcjZfQC6 An2PEtNV5TKllsBAbCSZcLaRjMJHG6DEfq82FKRC9shLD6tOkX0vzeC6iDPl1seIPztoW0Pm0OUcbvp0vSjdxljAtp3E8X4/Ab3uCaDRkDoVqfLkLGIHOUY8hYm09XpDveuTMEjsdYZzjpWmsDFpMddFecbtdCWi56Ye9r9TZsextxTNK1crCWLvo0D6SLfjJOl2MpseGNfTkCfeizkIZyTV8DRh5 snTHNU ol2VMw0jXC68pZAzWb869MI2le XDtLg05pCxNkuXZIaU7gXIkXG6/AS7l22p86FJ148DMoAs6F7wIWM594Kto8nSRRmRrkjXYmUjj8NIlz5duheaSNcSDY4Zp7uMpEv3ggdAjnSj99Nlm7mQMeRthHuhiXQ9ZnDOb6TZN9LQ79wm5rgu0hXpEvMbnYaRLgZSIk530RbSsJ uBYGP07WEE/mNNLaZI91SC2noQ5/XgNnXJktXcbp1DFFeSscpl1DSlZLHqeQmvfDfSNPXgJvu0/X50rP0NS59iXQVp1uztDVBxzVBpY/F00cY6dKna/8O43iZ43Tthym9XPx520Ja9C5jiL317TedDxmnS0Lh1o74egavIeVCWq5v9Ona8rmFtNwuY6hPn upy9rKUcfDyiacdLmQBsUNHac79ugFfvRw1pCxIUgXkQnUEUiIu4zhIQm9lVhIQ/vWp5sjXbufLsr7DW9wDT GjGEsNk6XpIsFNpZFWJ8l3Xs/pDx9gr2SEWWlNF4m4aRrrZLoOF0AwC kob0xhoxRDve X6 0vnG6rINpqYU0TrRSIWNNli77wXSahTSSLmWINLef7iNPVNY/yJdtKpUsojEQRrq Y1ykoXuhaz/dPiFjvo0xW7qc5G2kyzJIS7oXrBxz0QvMHwvp2jfSsE0m 4fUhozl3Au2LI75qjYtXZsvS7cuWysbHcfJJox06dOle6GJdC3R4HiSOF2r DFu7Yj 8Y00fK6nr3vBjgvHPk432r1g22si3VLuBfSlzdK1b6Tltvkk6Xpcce8FWrp0L3jSpY4e/FJNqu/ mqxe JStrHQseURgIIx00ZnScbq7Do4LBJzQJAC7kIa/xpCR3/DGx miTCnS5YOR/bWf6 G1oRfSrE8Xbba9BpwjXTsJmizdgycq1wHa8O6FTdvq SgDd4OtW8eSRxQGQkk3qlOLVg/ EpPE8Fd50can8UinwkB/DIh0Faerh4AwIAwUxEAY6dKnS4uOqV9I43Wm3qfL6zb1iyd4qo7Rp5tzLzRZAP5rwBgvPkzZ9BrwRnwjDX3aaPcC5Ne2kGblm3Mv0Kdr8YRju5Am90J/K83KW8fTyS2cdLmQBoXYOF0bvUBl7ThQX0i7 20axMNbqr/jOT/ezTtV/li3dsRCGsfpUx8y5vNL XR9u/a8xEJabj9d2wcc24U0kGXuAYxys8Tpol67kOb7oPNmLEs2k8smnHStRWHjdEm6Np9WlFVc29eAUc7H6c4j6WIc3tLdqJAxK3t/PHTIGEnXYsIvpKFPXZZu24Y3OUvXLqQxetZg2GEAAAoVSURBVMH2AcdaSJucTDx dJ6XYRjpegFzZZzuBZ /51CyVulesPlNli43MceXI8boXsAYbMiYHVPbcdOXIywRlHQvsK lSJdfjvBbO7IfbaTLkDG4dnLuBdbBlC4guhdIutbSVchYniwoQ6WzySeMdOnTpXvBky4tXbgcoDRPun1ejiDpWjLC8RjfSLPuBfwlZshYDrBNpItNzI fSw noUh3I N0aelGkK7HhOJ0ZyOGHE51LUamYaQLhXTF6c76uR6r9DFaurSiPAHg3JIufbq2HN0LfiHt2NmV1dIvR4xpP13v04XM7DfSLCaaLF3F6caQhZW1jqeXaSjpShHTK6JLdvhyBAjnwvW4NvhvRPvpxsm0S4/Kl6xFugXj8/pMOG/pWms4mnT79EdlRBLCQCwGwkiXPl1PElxIo0/X53MhjT5dn49zhgnNo08392HKNhCTdOHvtOUiLV1EjeTkXPo1YPp0fV/4YUqMv8u9wIU0X4f36fp8LqRZGQ9x/MyeuqyxNSXCIG1/ELEzRNuqc5xyDSddLqRB4dFxuiDdp16oBDnmXcbaNrxpmwwgXexHgDInL6TJeeJ8OseCYZR74fKtVDfD kC4IIJTF1NbpeJ0EZOMse48kNq3IWPcxBz7VfzmsVTOyw6ki4gRXvcfpkTI2JnLVT797tGke R06j/JFNhkn57cmfKw4xwMCJT58e8pFI5llFbyWnRZhJMuQYeUExpCzFm608TpUiFjXEhj35DaiWav w1vrLx4PAbSRZ HDhmjXJp2GSPpUi5MJ11IYzsvvpoIz8bpMm W9A0XYYLYcfQVGEW9xAL7bxdVZ2lX984nUYeRrgcAF2noXvD5PmTM5jfF6bIM30gb2y5j7B//UmKXMV5jKtJdLxPIpq l2/XlCHxqnbK26ZCfYBfp5mVu5a/jSkZhpEufLt0LnnRp6c4SpwvF8Y20581fyjEp1L8cMY1P11q6CBnD CJ9uqhvLO4FWH9wqaBP/uUIWrrWvZAjXb6RtvdwBWyLCYaMXVxrx ZFHPclXbkX8vqJ0ME81RFGuhh0iTjdeSBd BkJgmlIF0TEhTS8HBHt0x3LQhpkNMl uvx77t0LG026GEeTT5f/eth3v5CGf3XEitLlkEUo6Qo0s4OG0QucpDYd4htp0tnsOptGhlgYpKtJ0Qsbo4Np9BZxj0h3ZHG6EUpVHcs1iaXv dJ3COn cn9LLe6Q1hmjFxiOxOs2RZzutl1ptdde5zG3doQ/jNdyKXyeb55PZRBqBSDuP5rOr348X0rRJJK hIHFxUAI6W59dMvqpAtpAJXfTxdk uWPSdh ZymQ7pbtKc9HL Bvt0h3cUEqApJuFwkDxUmXVuqlW3Ug8Y20JtK1QvekyzxaumyDqSzduqwpL6WSizBQHgPFSZchY17ZJF0SJVO6F2z5LtKVe6E8kKx dCz5CwPNGNhQ0m1zL7QprQTp4jVeEL99xbStT8prBplkI9kIAxUGQkg3eiHt61 rDnplMU6XlrD9XA/dCxGWrki3WQdeJzqXrISB/hgIIV0spEno/YUuWUlWwsDyYkCkqzhdPTCFAWGgIAbCSJchY/zbzzS34c2 I8lfmttlbCgLgO/1s1/4Gi MpzpPoC7PJaH0PhTvUKUx4DoaT7p71JwJc/TGTGlyNso7hGohuCdF8/W9WPdriZCvrw9O6Ud eblVVupoIvv9r 6VjyEAaEgSExEEa67OS124nYsAk2rzHt jAly02bdi2kkXRJ vaz29O2qfvW61kykUyEgWYMhJMuhJ2zdO3WjkO5F0S6zYrWJJBshIFxYCCMdOnT7dpPl1YmU34jLQIQfUlX7oVxgC9C56pDupw3DISRLgbetZ8uhTOUpYv6m3y6XQtpuTff2F lmtjCgDAQhYFQ0o3qVMl6HtpcLbwpekETqyT21NZy4i2EdJveSKML4eiZ5RSuJpX0LgwIAx4DIt2CQdFe DrXhBQGlg8DIl2R7rrQPhHB8hGBdF5O5yJdka5IVxgQBgpiQKRbUNiyJspZE5K1ZD1WDIh0RbqycoQBYaAgBkS6BYU91iev iWrUBgohwGRrkhXVo4wIAwUxEAI6WoT83JPSVkkkrUwMN8YEOkWfMJpssz3ZJH pL8IDIh0Rbr6aykMCAMFMSDSLSjsiKek6pC1JQzMNwZEuiJdWTnCgDBQEAMi3YLCloUy3xaK9Cf9RWBApCvSlZUjDAgDBTEg0i0o7IinpOqQtSUMzDcGRLoiXVk5woAwUBADIt2CwpaFMt8WivQn/UVgQKQr0pWVIwwIAwUxINItKOyIp6TqkLUlDMw3BkS6Il1ZOcKAMFAQAyLdgsKWhTLfFor0J/1FYECkK9KVlSMMCAMFMSDSLSjsiKek6pC1JQzMNwZEuiJdWTnCgDBQEAMi3YLCloUy3xaK9Cf9RWBApCvSlZUjDAgDBTEg0i0o7IinpOqQtSUMzDcGRLoiXVk5woAwUBADIt2CwpaFMt8WivQn/UVgQKQr0pWVIwwIAwUxINItKOyIp6TqkLUlDMw3BkS6Il1ZOcKAMFAQAyLdgsKWhTLfFor0J/1FYECkK9KVlSMMCAMFMSDSLSjsiKek6pC1JQzMNwZEuiJdWTnCgDBQEAMi3YLCloUy3xaK9Cf9RWBApCvSlZUjDAgDBTEg0i0o7IinpOqQtSUMzDcGRLoiXVk5woAwUBADIt2CwpaFMt8WivQn/UVgQKQr0pWVIwwIAwUxINItKOyIp6TqkLUlDMw3BkS6Il1ZOcKAMFAQAyLdgsKWhTLfFor0J/1FYECkK9KVlSMMCAMFMSDSLSjsiKek6pC1JQzMNwZEuiJdWTnCgDBQEAMi3YLCloUy3xaK9Cf9RWBApCvSlZUjDAgDBTEg0i0o7IinpOqQtSUMzDcGRLoiXVk5woAwUBADIt2CwpaFMt8WivQn/UVgQKQr0pWVIwwIAwUxINItKOyIp6TqkLUlDMw3BkJI9x8P/3NVP8lAGBAGhIEYDKxIkDGClBwlR2FAGOiDAZGuLHn9kxEGhIGCGBDpFhR2n6egyshaEgYWGwMiXZGurBxhQBgoiAGRbkFhy4JZbAtG pV 2BApCvSlZUjDAgDBTEg0i0o7D5PQZWRtSQMLDYGRLoiXVk5woAwUBADIt2CwpYFs9gWjPQr/fbBgEhXpCsrRxgQBgpiQKRbUNh9noIqI2tJGFhsDIh0RbqycoQBYaAgBkS6BYUtC2axLRjpV/rtgwGRrkhXVo4wIAwUxIBIt6Cw zwFVUbWkjCw2BgQ6Yp0ZeUIA8JAQQyIdAsKWxbMYlsw0q/02wcDIl2RrqwcYUAYKIgBkW5BYfd5CqqMrCVhYLExINIV6crKEQaEgYIYEOkWFLYsmMW2YKRf6bcPBkS6Il1ZOcKAMFAQAyLdgsLu8xRUGVlLwsBiY D/Af4vcHxEjgn/AAAAAElFTkSuQmCC]__ \\__ __ \\__ This article describes a Forth program to disassemble 6502 machine code instructions. Using it, you can get a listing of assembler mnemonics to help you figure out how programs written by others are put together. This is one of the best ways of improving your programming skills. The article is divided into two parts. The first part provides some background information on the 6502 instruction set, to help you understand how the disassembler works. It is not necessary to read this part to get the disassembler working, but it will help you to understand the output. The second part describes the program itelf and gives a sample result from running it. Machine instructions can contain up to three bytes, the first of which is the operation code (telling the machine what to do), and the remainder give the operand or its address. These "address" bytes can be interpreted in one of several different ways, depending on the "addressing mode". Imagine that we are considering an instruction with opcode "OP" and the next two bytes contain the two hex numbers AB and CD, respectively (remember that each 8-bit byte contains 2 hex numbers): {{{___________________ : O P : A B : C D : ___________________ }}} The "Table of Address Modes" lists the various 6502 addressing modes and describes how the hex numbers ABCD following the opcode are to be interpreted. In the 6502, absolute addresses require two bytes and the most significint digits of the address are stored in the byte with the highest address. That is why the absolute addresses are shown as CDAB. The notation (X) indicates "the contents of the X register." In this notation (OOAB) + (X) indicates "the contents of the memory byte at address OOAB plus the contents of the X register. A comma is used to separate the high and low bytes of an address where clarity requires. All multiple address mode instructions in the 6502 instruction set can be used in the absolute address mode. The numerical "mode number" shown in the Table of Address Modes is the difference between an instruction's absolute address opcode and its "mode" opcode (plus hex 10 to avoid negative mode numbers). A table of the absolute address opcodes (+10) for the various multiple address instructions, called MULTIMODE, is included in screen 30. Given an arbitrary opcode (say 65) we can find the first entry in MULTIMODE which exceeds the opcode (7D in this case) and subtract to get the mode number (08, corresponding to Zero Page, X). The mnemonic can be read as ADC from the ninth entry in MULTINAME (7D is the Ienth entry in MULTIMODE). The 22 entries in MULTIMODE account for 117 of the 151 valid 6502 opcodes (out of a maximum of 256 possible). The remaining 34 opcodes each identify a single address mode instruction and are dealt with by looking up tables called ONEMODE and ONENAME. These tables also include ten, renegade, multiple-address opcodes that, for reasons best known to the 6502 designers, don't result in correct mode number. The most irregular instruction is LDX, where only two of its five address modes fit the pattern. Th at is why LDX appears three times in ONENAME. Given an arbitrary opcode, the first step in the disassembly process is to check the list of single address mode opcodes. If the wanted opcode is present, the instruction type is known immediately. If not, the list of multiple mode opcodes is used to determine both the instruction type and the addressing mode. Now for the disassembler program itself. The listing appears in screens 30 to 35. As is usual in Forth listings, the interesting part of the program appears last. The first few screens contain the building blocks from which the main program, called "DISASSEMBLE,"' or "DIS" for short, is constructed. Before describing how DISASSEMBLE works, I shall define what each of the words used in the program does.POINTER A variable containing the address of the current opcode.ONEMODE A table containing the opcodes of those instructiclns which have only one addressing mode. Each entry consists of two bytes; the first byte gives the mode number and the second is the opcode.STRING Compile the following text stream into the dictionary.ONENAME A table containing the mnemonics of those instructions which have only one addressing mode.MULTIMODE A table of base codes for those instructions which have multiple address modes. The "base code" for an instruction is its absolute mode opcode plus hex 10.MULTINAME A table containing the mnemonics of those instructions which have multiple address modes.MODE A table containing mnemonics describing the various addressing modes.LENGTH A table giving the number of by which follow the opcode for the various addressing modes.SEARCH OP add len -- I f Searches a table of two-byte words of length "len" beginning at address "add" for a match to the single byte OP. The table must be arranged in ascending order; I is the index number of the first table entry, which is equal to OP (f=1) or exceeds OP (f = 0).PRINTNAME I add - - Prints three characters (i.e, instruction mnemonic) beginning at address add + 3*I.PRINTMODE MODE/4 -- Print the two-character mnemonic corresponding to the addressing mode "MODE".PRINTADD MODE/4--f Prints the one- or two-byte "address" (if one exists) following the opcode. Sets f to 1 (to terminate disassembly) if the opcode is one of five instructions which can cause a jump.CHKMODE I X -- J MODE/4 Calculates the address mode of the current opcode against the Ith base code in the MULTIMODE table and checks whether this is modulo four (i.e, divisible by four with no remainder), if so, J = I, otherwise J = I + 1.DISASSEMBLE add -- Disassemble the code beginning at address "add".DIS A synonym for DISASSEMBLE. Armed with the definitions of the "building blocks," we can now analyze the "main program." I have found the coding form used in the box headed "Description of Disassemble" useful for both analyzing and writing Forth code. The first column is an instruction number(for reference);the second, the contents of the stack; and the third, the instruction (Forth word). The number against a stack entry indentifies the instruction removing that entry from the stack. You can use a form like the one I have just described to analyze the remaining code. Of course, you will need to know Forth or have in front of you the fig-Forth glossary. Finally, here is an example of using the disassembler to see how the Forth word C@ replaces an address on the stack with the contents of that address. The process is started by entering 'C@DIS ~[RETURN]. This sequence puts the parameter field address of C@ on the stack and starts disassembly. The result looks like: {{{13FB LDA X) 0 13FD STA ,X 0 13FF STY ,X 1 1401 JMP ..... F47 OK }}} Note that the address O,X points to the byte on the bottom of the data stack (it grows down!) and 1,X is the next byte up. F47 is the address of the Forth procedure NEXT, which passes execution to the next Forth word. The first instruction loads the accumulator with the byte which was at the 16-bit address on the "top" (physically at the bottom) of the stack. The second instruction at 13FF stores the contents of the Y register (which you can count on being zero) into the high order byte on "top" of the stack. Thus the address on the "top" of the stack is replaced by the byte which was (and still is) stored at that address. A word of warning: DISASSEMBLE will disassemble anything! It does not try to stop you from disassembling data, Forth code or even machine code starting at the wrong point. However, you can easily detect a listing of gibberish. The listing will tend to be long (over a screen), the addresses will be all over the place and rarely used instructions will pop up frequently. ---- Listing: DISASM.4TH {{{SCR #30 0 ( FORTH DISASSEMBLER ANTIC 3/84 ) 1 HEX 0 VARIABLE MULTIMODE -2 ALLOT 2 1D , 1E , 3C , 3D , 3E , 5C , 3 5D , 5E , 7D , 7E , 9C , 9D , 4 9E , BC , BD , BE , DC , DD , 5 DE , FC , FD , FE , 6 7 : SEARCH 1 + 0 DO OVER OVER I 2 8 * + C@ - DUP 0= IF DROP 9 DROP DROP I 1 LEAVE ELSE 10 0 < IF DROP DROP I 0 LEAVE 11 ENDIF ENDIF LOOP ; 12 13 0 VARIABLE POINTER 14 15 -->SCR #31 0 : STRING ( COMPILE TEXT ) 1 BL BLK @ IF BLK @ BLOCK ELSE 2 TIB @ ENDIF IN @ + SWAP 3 ENCLOSE IN +! OVER - >R + 4 HERE R CMOVE R> ALLOT ; 5 6 0 VARIABLE MULTINAME -2 ALLOT 7 8 STRING ORAASLBITANDROLJMPEORLSR 9 STRING ADCRORSTYSTASTXLDYLDALDX 10 STRING CPYCMPDECCPXSBCINC 11 12 : CHKMODE DROP DUP 2 * ' 13 MULTIMODE + @ POINTER @ C@ - 14 4 /MOD SWAP IF SWAP 1+ SWAP 15 ENDIF ; -->SCR #32 0 0 VARIABLE ONEMODE -2 ALLOT 1 2C00 , 2C08 , 280A , 3010 , 2 2C18 , 1020 , 2C28 , 282A , 3 3030 , 2C38 , 2C40 , 2C48 , 4 284A , 3050 , 2C58 , 2C60 , 5 2C68 , 286A , 246C , 3070 , 6 2C78 , 2C88 , 2C8A , 3090 , 7 2096 , 2C98 , 2C9A , 14A0 , 8 14A2 , 2CA8 , 2CAA , 30B0 , 9 20B6 , 2CB8 , 2CBA , 04BE , 10 2CC8 , 2CCA , 30D0 , 2CD8 , 11 2CE8 , 2CEA , 30F0 , 2CF8 , 12 00FF , ( 00FF IS A DUMMY ) 13 14 15 -->SCR #33 0 0 VARIABLE ONENAME -2 ALLOT 1 STRING BRKPHPASLBPLCLCJSRPLPROL 2 STRING BMISECRTIPHALSRBVCCLIRTS 3 STRING PLARORJMPBVSSEIDEYTXABCC 4 STRING STXTYATXSLDYLDXTAYTAXBCS 5 STRING LDXCLVTSXLDXINYDEXBNECLD 6 STRING INXNOPBEQSED??? 7 8 0 VARIABLE MODE -2 ALLOT 9 STRING ,X,Y,X)Y..##0PX).Y().AIMRE 10 11 0 VARIABLE LENGTH -2 ALLOT 12 2 C, 2 C, 1 C, 1 C, 2 C, 1 C, 13 1 C, 1 C, 1 C, 2 C, 0 C, 0 C, 14 1 C, 0 C, 15 -->SCR #34 0 : PRINTNAME SPACE SWAP 3 * + 1 3 TYPE 2 SPACES ; 2 3 : PRINTMODE 2 * ' MODE + 2 TYPE 4 2 SPACES ; 5 6 : PRINTADD POINTER @ C@ DUP 20 7 = OVER 40 = OR OVER 4C = OR 8 OVER 60 = OR SWAP 6C = OR 9 SWAP ' LENGTH + C@ 1 POINTER 10 +! POINTER @ OVER POINTER +! 11 OVER 0= IF DROP DROP ELSE 12 OVER 1 = IF C@ . DROP ELSE 13 @ 0 D. DROP ENDIF ENDIF ; 14 15 --> SCR #35 0 : DISASSEMBLE POINTER ! CR 1 BEGIN CR 2 POINTER @ DUP 0 D. 2 SPACES 3 C@ ' ONEMODE 2D SEARCH 4 IF ( FOUND ) DUP ' ONENAME 5 PRINTNAME 2 * 1+ ' 6 ONEMODE + C@ 4 / 7 ELSE ( NOT ) DROP POINTER @ 8 C@ ' MULTIMODE 16 SEARCH 9 CHKMODE CHKMODE CHKMODE 10 SWAP ' MULTINAME 11 PRINTNAME ENDIF 12 DUP PRINTMODE PRINTADD 13 ?TERMINAL OR 14 UNTIL ; 15 : DIS DISASSEMBLE ;}}} !! DESCRIPTION OF DISASSEMBLER || Step || Stack || Instruction || Comment || | | OPadd (2) | | Address of current opcode | | 1 | | POINTER! | Store OPadd in POINTER | | 3 | | CR | Start a new line. | | 4 | | BEGIN CR | Start a loop with a new line. | | 6 | OPadd (11) | POINTER@ | Fetch the opcode address. | | 7 | OPadd (9) | DUP | | | 8 | O (9) | O | Print the address (double precision - | | 9 | | D. | to avoid negative addresses!) | | 10 | | 2 SPACES | Leave 2 spaces | | 11 | OP (14) | C@ | Fetch the opcode. | | 12 | OMad (14) | ' ONEMODE | Calculate the start address for ONEMODE table. | | 13 | 2D (14) | 2D | ONEMODE is 2D (45) entries long. | | 14 | I (20)(27) | SEARCH | For OP in ONEMODE table. Leave - | | | f (15) | | Index and flag. | | 15 | | IF | Test f. False part starts Step 26. | | 16 | I (18) | DUP | TRUE part (f=1),i.e., OP on ONEMODE table. | | 17 | ONad (18) | ' ONENAME | Start address for ONENAME table. | | 18 | | PRINTNAME | Type the mnemonic | | 20 | 2I + 1 (23) | 2 * 1+ | | | 22 | OMad (23) | ' ONEMODE | Start address of ONEMODE table. | | 23 | OMad+2I+1 (24) | + | Adress of MODE for entry I. | | 24 | MODE (25) | C@ | Fetch MODE. | | 25 | MODE/4 (41) | 4 / | True part jumps to Step 38. | | 26 | | ELSE | FALSE part OP not in ONEMODE | | 27 | | DROP | The index left by SEARCH (Step 14). | | 28 | OP | POINTER @ c @ | Prepare to search MULTIMODE - | | 29 | MMad | ' MULTIMODE | table for opcode. Table is | | 30 | 16 | 16 | 16 (hex) entries long. | | 31 | I (32) | SEARCH | For OP. Leave Index and flag. | | | f (32) | | f is not used in this case | | 32 | J (33) | CHKMODE | Check whether MODE for entry - | | | MODE/4 (33) | | I in MULTIMODE table is - | | 33 | J (34) | CHKMODE | divisible by 4. If it is - | | | MODE/4 (34) | | return J = I otherwise J = I + 1. | | 34 | J (35) | CHKMODE | It may be necessary to - | | | MODE/4 (41) | | increment I twice (3 CHKMODEs). | | 35 | J (37) | SWAP | | | 36 | MNad (37) | ' MULTINAME | Start address for MULTINAME table | | 37 | | PRINTNAME | Start address for MULTINMAE table | | 38 | | ENDIF | terminates the IF at line 15. | | 39 | MODE/4 (40) | DUP | | | 40 | | PRINTMODE | Print address mode mnemonics | | 41 | f (43) | PRINTADD | Print the address part of theinstruction and update the pointer. f = 1 indicates a jump instruction (finish). | | 42 | f (43) | ?TERMINAL | f = 1 indicates a key is pressed (finish). | | 43 | f (44) | OR | | | 44 | | UNTIL | Jump to BEGIN (step 4) if f = 0 | | 45 | | ; | END | 'John Mattes, from Syndney, Australia, is an electrical engineer who has worked in telecommunications for 20 years. He says he is "absorbed" in using Forth with his Atari 800.'