{block 0} [0x4eb56fa] [0x138] [0x8ec0315b] [0xbec08ed8] [0xbf7c00] [0x100b97a] [0xa5f3fc89] [0xb8b4d08e] [0x10fe88e] [0xe87d9816] [0xd1b000db] [0x64e464e6] [0xfa750224] [0x60e64bb0] [0x667d98bf] [0xf608c031] [0x8b660b74] [0x89660847] [0x8b662c45] [0x66d08807] [0xb4304589] [0xcd570608] [0xe8fe7213] [0x75f00c5] [0x80345589] [0x4d893fe1] [0x30558b36] [0x8b324d8b] [0xbb7c0436] < @d7s > [0xd18301] [0x1b842eb] [0x2c78002] [0xef800375] [0xe813cd02] [0xfe720095] [0x45bc0f66] [0x75153c28] [0xbb5308] [0x99e87a] [0x95e85b] [0x3f24c888] [0x7536453a] [0x3ac6fe13] [0x9763575] < p?wfo > [0xc1800375] [0xc0e18040] [0x754ec1fe] [0x7d9ebeb9] < ?yptas > [0x41b52f74] [0xbf57c188] [0x1b87a00] [0x8310cd4f] [0x12754ff8] [0x312458b] [0x45021445] [0x7203d19] [0x8b660475] [0xac5f285d] [0x8966d475] [0x4d88385d] [0x3c5d8b3c] [0x48e99d1e] [0xc0200f01] [0x220f010c] [0x1068c0] [0xc8fea10f] [0x1ec0220f] [0x680ea10f] [0x8f667d54] [0xe000406] [0xe589609c] [0x8010468b] [0xe48001cc] [0x144687fd] [0x61104689] [0xb960cf] [0x66de8901] [0xad285d8b] [0x3896764] [0x2c38366] [0x8966f5e2] [0xc361285d] [0xa80f0660] [0x31e58907] [0xbe0fb4ff] [0xab97de8] < gcg3 > [0xab20b0ab] [0xf5e2abab] [0xbe00a0bf] [0x28b0012] [0xb45004b1] [0xc3c15b07] [0xe3835304] [0xd8878a0f] [0xf1e2ab7d] [0x58abc030] [0x7302ee83] [0xcf6107e1] [0x7d980027] < tors > [0xffff] [0xcf9a00] [0xffff] [0xcf9200] [0xffff] [0x9a00] [0xffff] [0x9200] [0x200000] [0x0] [0x0] [0x0] [0x0] [0x4144] < oootoro > [0x37363534] [0x42413938] [0x46454443] [0x58415049] [0x58445843] [0x50535842] [0x49535042] [0x53454944] < gegne > [0xfdba5052] [0xec000003] [0xfb7420a8] [0x5805ea80] [0x60c35aee] [0x8b9] < d8les > [0xd08904c2] [0xf25] [0xd8808a00] [0xe800007d] < ???* > [0x20b0e9e2] [0xffffc7e8] [0xc3ad61ff] [0xe80db050] [0xffffffbc] [0xb5e80ab0] [0x58ffffff] [0x4f02b8c3] [0xfbba10cd] [0xee83b003] [0xea8003b0] [0xc030ee03] [0xb0ee4266] [0x2c28003] [0x80c030ee] [0xb0ee02ea] [0x3c28003] [0x8041b0ee] [0xe8ee04ea] [0xbc0085] [0xbe000a00] [0x9f400] [0xffffafe8] [0xfc768dff] [0x78b80689] [0xe8123456] [0xffffff77] [0xffff9be8] [0x855ae9ff] [0x8960001f] [0xc40503e5] [0x5000007d] [0x7dcda0] [0xf6c0fe00] [0x7dce25] < ams9t > [0xf3f7d231] [0xd089c189] [0x7dce1d8a] < '*s > [0xc1c1c388] [0x6e1c008] [0xc1fee108] [0x88184d89] [0xc80d8add] [0x8900007d] [0xc361144d] [0xcc0200f] [0xc0220f01] [0xc3c03166] [0x86858] [0xf58cb50] [0x66cb50a0] < ?'olo > [0xb8ffede8] [0x10] [0xd88ec08e] [0x8c66db31] [0x4e3c1d3] [0x8ee30166] < nr6eek > [0x6858c366] [0x18] < mtdxg > [0xc2200fe1] [0xffffede8] [0x20b8ff] [0xc08ed88e] [0xc931d08e] [0x4e9c166] [0x220fcafe] [0x1000bbc2] [0xa9e8dc87] [0x31dc89ff] < m5mr4 nn0bf > [0x60c36661] [0x24b9e589] < + > [0xe85150e1] [0xffffff32] [0x25e8] [0x45d8b00] [0xe7c13b8b] [0x80b902] [0xbe0000] [0xf300007a] [0x2efc1a5] [0x58593b89] < 3irtse > [0x1c45ff58] [0x8be8c361] [0xbbffffff] [0x1b87a00] [0xfa13cd02] [0xc3ff54e8] < woxmtd > [0x24] [0x5d8be1f6] [0xc1338b04] [0x515002e6] [0xbf80b1] [0xf300007a] [0xfed4e8a5] [0x14e8ffff] < ac > [0xe2504058] [0xeec158e6] [0x1c45ff02] [0x89045d8b] [0xe8c36133] [0xffffff3e] [0xb87a00bb] [0x13cd0301] [0xff07e8fa] [0xc3] {block 1} [0x1afae9] [0x0] [0x1aede9] [0x0] [0x66636d63] < ort9lt > [0x64702d62] [0x89fc768d] [0xfca15606] [0x89002027] [0x4c08320] [0x8b58e0ff] < ti,arc > [0xad5e0020] [0xdde857c3] [0x5fffffff] [0xffe8e8c3] [0xfff8ffff] [0xdfe80009] [0xf8ffffff] [0xe80009db] [0xffffffd6] [0x9b7f8] [0xfcbae3eb] [0x890009cf] [0xdbfcb90a] [0x18f0009] [0x89fc498d] [0x4f0d8911] [0xc3002004] [0x9abfcba] < wtrart > [0x9b7fc] [0x498d018f] [0x891189fc] [0x2004580d] < m@ovs > [0x20280005] < ?8ol > [0x15ffffff] [0x202808] [0x280015ff] [0x15ff0020] [0x20280c] [0xdce8eceb] [0xc3ffffff] [0x2800058f] [0x9be80020] [0xffffffff] [0x20280015] < m?m3 > [0x20280405] < ?0we > [0x5ee8ffff] [0xffffffff] [0x20280415] < kiy.s > [0xffffffe3] [0xf404bec3] [0x8bc30009] [0x2027b80d] < csonte > [0x8b002027] [0x2027b40d] [0x980d8900] [0x8b002027] [0x2027a00d] < ysonte > [0xc3002027] [0x279c0d8b] [0xd890020] [0x2027a0] [0x27980d8b] [0xd890020] [0x2027b4] [0x27940d8b] [0xd890020] [0x2027b8] [0x27a805c7] [0x20] < misd > [0x2027b80d] < ohngi > [0x2028388d] < mnr6f > [0x2027b40d] < ohngi > [0x367ffc8d] < g?t,s > [0xffc35ffc] [0x20275425] [0xa0158b00] [0x89002027] [0x2027ac15] [0xad02c600] [0x27a005ff] [0x8bc30020] [0x2027a015] < raoccs > [0x2027ac] [0x3a800c75] [0x890775ad] [0x2027a015] < ramisd > [0x2027a0] [0x768d02c7] [0x42c689fc] [0x5830604] [0x2027a0] [0x768dc305] [0xc30689fc] [0x27c8058f] [0xe8c30020] [0xfffffff4] [0xb80d8b50] [0xff002027] [0x2027b805] < mlotoe > [0x20283c] [0x218b8] [0xe81eeb00] [0xffffffd4] < fsont2 > [0xff002027] [0x2027b405] < mlotoe > [0x368000] [0x2800b8] < wlattd > [0xfffffffc] [0x89f0e283] [0xa0158b11] [0x89002027] [0x148d0114] [0x2eac101] [0x27a41589] [0x89580020] [0x2027ac25] [0x9005c700] [0xb6002027] [0xf7002005] [0x2027a805] < ???8 > [0xff0674ff] [0x2027a825] [0x768dc300] [0x8b0689fc] [0x80048d04] [0xe8c30036] < ???' > [0x280081c7] [0x6460000] [0x5ff0020] [0x2027b4] [0x47047989] [0x9005c7c3] [0xb6002027] [0xe8002005] [0xffffff07] [0x27ac158b] [0x15890020] [0x2027b0] [0x27a0158b] [0x15890020] [0x2027ac] [0x89b802c6] [0x5830142] [0x2027a0] [0x15ffc305] [0x202790] [0xbd048b] < ei > [0x15ff10eb] [0x202790] [0xfcbd048b] [0xc1ffffff] [0xb0e805f8] [0xadffffff] [0xffff31c3] [0x2027840d] < glir0 > [0x5c7f5eb] [0x202790] [0x20066d] [0x89fc768d] [0xbd048b06] [0xfffffffc] [0xe8f0e083] [0xfffffe5f] [0xfe6d850f] [0xffadffff] [0xa8008d24] [0x15ff0036] [0x202790] [0xfcbd048b] [0x83ffffff] < tqeis8 > [0x75fffffe] [0x24ffad08] [0x202a548d] < ?rn! > [0x48bffff] [0x36a8008d] < oeslod > [0x8bfffffe] [0x2027a015] < gsante > [0xc6002027] [0xc283e802] [0x89d02905] [0x1589fc42] [0x2027a0] [0x15ffc3ad] [0x202790] [0xfcbd048b] [0x83ffffff] < 6ieis8 > [0x8bfffffd] [0x2a548d04] [0xbdeb0020] [0x279005c7] [0x66d0020] [0x768d0020] [0x8b0689fc] [0xfffcbd04] [0xf8c1ffff] [0x5c7c305] [0x202790] [0x20066d] [0x89fc768d] [0xbd048b06] [0x0] [0x4b9c347] < mn > [0x2027a015] [0x8b028900] [0x11148d06] [0x8904768d] [0x2027a015] [0x1b9c300] < .s > [0x2b9e2] < 5!d > [0x3b9] < migogs > [0x2027a015] [0x5ea8300] [0x27ac1539] [0x8750020] < iakr2 > [0xc302fe03] [0xc30542c6] [0x27a005ff] [0x89c30020] [0x2027ac25] [0xa0158b00] {block 2} [0x29002027] [0xff5088c2] [0x2589c3ad] [0x2027ac] [0x89fc768d] [0x27a0a106] [0x8bc30020] [0x2027a015] < *gtml > [0x27ac1539] [0x33750020] [0x75b83a80] [0xfc768d2e] [0xb0a10689] [0xa3002027] [0x2027ac] [0x8101428b] [0x768dfb7a] [0xb7489fc] [0x27a01589] [0x16e90020] [0x83fffffd] [0x2027a005] < orv*s > [0x639c3d2] [0xc9310278] [0xbd04f7c3] [0xfffffffc] < ???? > [0x5f5f0275] [0xc2015ac3] [0x582548d] [0xadfc5203] [0x503e2ff] [0x202744] [0x5708e0c1] [0x8badc789] [0xbd14] < snmd > [0x14ff0fe2] [0x2027bc95] [0xeceb00] [0x28140d8b] [0xe1c10020] [0x3c18310] [0x28100d89] [0xd890020] [0x20281c] [0xd8b66c3] [0x202812] [0x180d3b66] [0x78002028] [0x140d8b19] [0xc1002028] [0x8b6610e1] [0x2028100d] [0x1ec18300] [0x28100d89] [0x8dc30020] [0x689fc76] [0xffffffb8] < tsnren > [0xc3ad0020] [0xcf8ba] < atmwws > [0x8dc3ed04] [0x689fc76] [0x80001b8] < crtrsd crtrtrt crtrtrt crtrtrt crtrtrt crtrtrt crtrtrt crtrtrt crtrtrt crtrtrt > [0xb89090] [0xe8030000] [0xffffffc3] [0xb110408d] [0xfc768d06] [0xa9e80689] [0x24ffffff] [0x740834fb] [0x408dad16] [0xe9754904] [0x8de8408d] [0x689fc76] [0xffff8fe8] [0xa3f024ff] [0x20282c] [0xc3adc3ad] [0x28358b56] [0x57002028] [0x7dd03d8b] [0xb90000] [0xf3000c00] [0xc35e5fa5] [0xffffe3e8] [0xfa9fe9ff] [0x3d8bffff] [0x202810] [0x8566f989] [0x310279c9] [0xffe181c9] [0x890000ff] [0x2028380d] [0xc96900] [0xc1000010] [0x27910ff] [0x3d89ff31] [0x202834] [0x3b93c8d] [0x2028243d] < ggynrs > [0x10b9c486] < nn > [0x273e0d1] [0xc7831789] [0xf3754904] [0x86ad66c3] [0x10b9c4] < 8nm > [0x17891173] [0x89045789] [0x100097] [0x4978900] [0x83000010] [0x754908c7] [0xaee8c3e5] [0x56fffffe] [0xc06b5257] [0xb08d30] [0xe8002030] [0xffffff76] [0x2830158b] [0x18b90020] < ar > [0xffff9de8] [0xc0c781ff] [0x5900000f] [0x5af07549] [0x81ad5e5f] [0x20281005] < rn aianvs > [0x30c06b52] [0x3000b08d] [0x3be80020] [0x8bffffff] [0x20283015] [0x18b900] < ktm > [0xffffff79] [0x1f80c781] < ecfe > [0x5f5af075] [0x1005815e] [0x2028] [0xad002c00] [0xfe5de8c3] [0x5c7ffff] [0x202814] [0x3] [0x281805c7] [0x3f40020] [0x1e90000] [0xe8fffffe] [0xfffffeee] [0xe1d10e8b] [0xcf29e1d1] [0x30a1c189] [0xf3002028] [0x1005ffab] [0xad002028] [0xcfe8c3ad] [0x3dfffffe] [0x301] [0xb80578] [0x89000003] [0x380d2bc1] [0x7e002028] [0x13e8131] [0x78000004] [0x6c706] [0xa1000004] [0x202834] [0x1a7e0629] [0x400ba] < dmntf > [0x30a102e2] [0x51002028] [0xabf30e8b] [0x4959d701] [0xadadf575] [0xfc768dc3] [0xffb80689] [0xe90000ff] [0xfffffdd1] [0x89fc768d] [0xffb806] [0xc2e900ff] [0x8dfffffd] [0x689fc76] [0xc0c0c0b8] < ,4*t > [0x768dffff] [0xb80689fc] [0x4040ff] [0xfffda4e9] [0xfc768dff] [0xb80689] [0xe900ff00] [0xfffffd95] [0x89fc768d] [0xff00b806] < s6y > [0xfffffd] [0x0] [0x0] < wtgs > [0xa] [0xb6f3d8d] [0x778d0020] [0x5ea4f301] [0x200b79a2] [0x8dc3ad00] [0x689fc76] [0xbb9] < n'zoe > [0x3100200b] < gfgiyd > [0xfc768dc3] [0xd2310689] [0x1eb9] < mo9+s > [0xe5c281d0] [0x8900037f] [0x20281015] < wrstre > [0x0] [0xc3400175] [0x89fc768d] [0xa3c03106] [0x202810] [0xfffd14e8] [0xfc768dff] [0xb80689] [0x8d000004] [0x689fc76] [0x300b8] < ?nnies > [0x14a3ffff] [0xad002028] {block 3} [0x2818a3c3] [0xc3ad0020] [0x2810a366] [0x66ad0020] [0x202812a3] < nnv3e > [0x28100501] [0x66ad0020] [0x28120501] [0xc3ad0020] [0x89fc768d] [0x43b806] < anmn > [0x79d28504] [0x89daf707] [0x1340456] [0x279163b] [0x18c30434] [0x1c1b1a19] [0x201f1e1d] [0xa130521] [0x8d0e0410] [0x689fc76] [0x47808a51] [0xe800200c] [0xfffffda6] [0xc0c1c359] [0xfc768d04] [0xe0830689] [0xc289c30f] [0xc8dd8f7] [0x2085] < dnygl > [0x5ebd189] [0x8b9] < ?zol > [0xc5e8ffff] [0x49ffffff] [0xc3adf375] [0x7b9] < ?9ol > [0x1975ffff] [0xf57549ad] [0xffb8e841] [0xa5e8ffff] [0x49ffffff] [0x84e8f375] [0xadfffffd] [0xeeeb41c3] [0x276c3d83] [0x750a0020] [0x85c289cf] [0xf71179d2] [0xfc768dda] [0x23b80689] < k > [0xfffffd2a] [0x8b9] < or0ees > [0x8d34f7d2] [0x202700] [0x1075c085] [0xebee7949] [0x31d08913] [0x8d34f7d2] [0x202700] [0xffff4ae8] [0xed7949ff] [0x40e8d089] [0xe8ffffff] [0xfffffd27] [0xc783c3ad] [0x8e80c] < rm0 > [0x83fffffd] [0x4b910ef] < ar > [0x89fc768d] [0x8ac03106] [0xe8470447] [0xfffffcca] [0xeb754959] [0xf3fcbfc3] [0x158b0009] [0x200446] [0x11733a39] [0x89fc768d] [0x83078b06] [0x5de804ef] [0xebffffff] [0x1ae8c3e5] [0x8bfffffd] [0x2027643d] < ,ofml > [0x74a10689] [0xe8002027] [0xfffffb71] [0x20275ca1] [0xc08300] [0x202814a3] < sosles > [0xc6c2] < rstfte > [0xc1002028] [0x50310e0] [0x202760] [0x202810a3] < ?fqe > [0x67e8ffff] [0xe8ffffff] [0xffffff62] [0xfffb10e8] [0x100581ff] [0x2028] [0x8b005800] [0x2027683d] [0xcc78300] [0x3b9] < ?gak > [0x5c7ffff] [0x202814] [0x3] [0x1205c766] [0x3002028] < ?gok > [0xc766ffff] [0x20281205] [0x8d024b00] [0x200b6b3d] [0xbb900] < teks > [0xdffffff] [0x140c010a] [0x13080602] [0x12110f09] [0x5070e0b] [0x17160403] [0x19101524] [0x1c001b1a] [0x1f181e1d] < tcajrt > [0x262c2a28] [0x2d2e2522] [0x19232b27] [0x1c001b1a] [0x1f181e1d] [0x2120] [0x0] [0x0] < rc > [0x1c001b1a] [0x1f181e1d] [0x2120] [0xa1305] [0xe0410] < od > [0x8b097804] [0x20276415] [0x10048a00] [0x121110c3] [0x4000013] [0x70605] < re > [0x171615] [0xa090800] [0xb] < rloto > [0xc01001b] [0xf0e0d] [0x8d020300] [0x689fc76] [0x86e8c031] [0xe4fffff5] [0x7401a864] [0xa860e4fa] < oqlie; > [0x8af0733a] [0x200e6d80] [0x90c300] [0x1902180b] [0x1b041a03] [0x1d061c05] [0x1f081e07] [0x210a2009] [0x1330051e] [0x10200a2e] [0xe210412] [0x14230d22] [0x22240717] [0xc262425] [0x6310932] [0x12190318] [0x1131710] [0x214081f] [0x112f1616] [0x152d0f11] [0x262c0b15] [0x2534230c] [0x28272735] [0x2a822928] [0x2c832b8d] [0x2e332d89] [0x80392fb5] [0x820e811c] [0x843b8301] [0x768d3029] [0x310689fc] < !iwkn > [0x64e4ffff] [0xfa7401a8] [0xc18960e4] [0x807fe180] [0x5742af9] < iaon@d > [0x3480240b] < timrei > [0xdeeb0020] [0xda78c008] [0x50b7f24] [0x202788] [0x200eccba] [0x35b900] [0x2380000] [0xc2830874] [0x31f7e202] < etmas; > [0xccea8101] [0xd100200e] [0x8c1589ea] [0xa9002027] [0x80] [0x2011d7c3] [0x2011d700] [0x2011d700] [0x20122900] [0x5000000] [0x2010e400] [0x20107c00] [0x20102200] [0x20124e00] [0x5251500] [0x2011d700] [0x2011d700] [0x20111500] [0x20123b00] [0x2d210000] [0x2010e400] [0x20107c00] [0x20102200] [0x20126000] < t1tma > [0x2011d700] [0x20110b00] [0x20122800] [0x2011b300] [0xe052300] {block 4} [0x20111200] [0x2011cf00] [0x20116800] [0x20111200] [0x251500] [0xd8a1c00] [0x201015] < 1sedd > [0xefe8c326] [0xadffffff] [0xffe8e8c3] [0x5ffffff] [0x202784] [0x101505c6] [0x281c0020] [0x2010152d] < mwette > [0x689fc76] [0x50c083c3] [0xdeb07b1] [0xf573103c] [0x8a804b1] [0x34410374] [0x88c28918] [0x150d38cd] [0x73002010] [0x72e8d008] [0xebc9febc] < ortn1@ > [0x150d2806] [0xc3002010] [0xfffb12e8] [0x2784a1ff] [0x348d0020] [0x25ffad86] [0x20274c] [0xfffafee8] [0x8405c7ff] [0x1002027] < bs > [0x20277805] [0x100] < ,ofml > [0x6c70689] [0x0] [0x101505c6] [0xe81c0020] [0xfffffdaf] [0x158b0979] [0x202768] [0x848224ff] < mlaa1s > [0x689fc76] [0xfffaa1e8] [0xff72e8ff] [0x5ffffff] [0x202778] [0xfdbde8ad] [0xcfebffff] [0xa0e] [0xc0000] [0xf0000] [0xb00000d] [0x0] [0x3020100] [0x7060504] [0xa2000908] [0x20110a] [0xebad49eb] [0x7015ff0f] [0xc6002027] [0x20110a05] < drm > [0xfffd7ee8] [0xfd41e8ff] [0x979ffff] [0x2768158b] [0x24ff0020] [0x74c08482] [0xe8808ad5] [0xf6002010] [0x20110a05] [0x2741f00] [0x168bd8f7] [0x6c15af0f] [0x1002027] [0xad1689c2] [0x276805c7] [0x10010020] [0xbceb0020] [0x8015ffad] [0xff002027] [0x20274c25] < ndt9d > [0xa002027] < bs > [0x20276805] [0x200fed00] [0x6405c700] [0x3b002027] [0xc300200e] [0x276c05c7] [0x100020] [0x5c70000] [0x202768] [0x200fed] [0x276405c7] [0xe530020] [0x81c30020] [0x20277035] [0xe100] < ?yas > [0x2f00200f] [0x277015ff] [0x43e90020] [0xadffffff] [0x4c25ffad] [0xad002027] [0x5c716eb] [0x202768] [0x200fc5] [0xe0b3d8d] [0x3d890020] [0x202764] [0x275005f7] [0xffff0020] [0x674ffff] [0x275025ff] [0xa0e80020] [0x3cfffffc] [0x8b097904] [0x20276815] < seey, > [0x27680583] [0xe8140020] < ???q > [0x277c15ff] [0xb2eb0020] [0x6805c7ad] [0xc5002027] [0x8d00200f] [0x200e0b3d] [0xc710eb00] [0x20276805] [0x200f9d00] < too4ns > [0xad00200e] [0x5c79ceb] [0x202768] [0x200fd9] [0xe0b3d8d] [0x10eb0020] [0x276805c7] [0xfb10020] [0x3d8d0020] [0x200e23] [0x27643d89] [0x69e90020] [0x8dfffffe] [0x689fc76] [0xa78c085] [0xc10426c1] < 8ersed > [0xe0d1c307] [0x26c10c78] [0x4c0c105] [0x3407e083] [0x26c1c308] [0x6c0c107] [0x2c3fe083] [0x768dc310] [0xff0689fc] [0x303d3906] [0x75002027] [0x2730a305] [0x53b0020] [0x202730] [0x6790a74] [0x27383d89] [0xc3ad0020] [0x27343d89] [0x2d810020] [0x202810] [0x160000] [0x89fc768d] [0x4000b806] [0x6e800e0] [0xb8fffff6] [0x30] [0x120d8b66] [0x66002028] [0x28180d3b] [0x10780020] [0xfff705e8] [0x102d81ff] [0x2028] [0xc3001600] [0xfff6f5e9] [0xf5cde8ff] [0x768dffff] [0x8b0689fc] [0xfffcbd04] [0xe083ffff] < ?ly0; > [0x774ffff] [0xfff6d5e8] [0xe8f2ebff] [0xfffff703] [0x66c3adad] [0x28120d8b] [0x3b660020] [0x2028140d] [0xe8057400] [0xfffff579] [0xfff7f4e8] [0xe8bfebff] [0xfffff7fc] [0xaae8b8eb] [0xebfffff7] [0xfc768db1] [0xb80689] [0xe800ffff] [0xfffff579] [0x68e8a0eb] [0x8dfffff5] [0x689fc76] [0xfcbd048b] [0x83ffffff] < jieis8 > [0x4fffffe] < +oskrs > [0x8debffff] [0xfff546e8] [0xfc768dff] [0x48b0689] [0xfffffcbd] [0xf0e083ff] [0xfffec2e8] [0x48074ff] < +tniers > [0xf0ebffff] [0x28102d81] [0x20] [0x4f70016] [0xfffffcbd] [0xfffff0ff] [0x3f850fff] [0x4fffffff] [0x273c3d89] [0x58e80020] [0xe8fffff6] [0xfffffeba] [0x8bc3ad5a] [0xfffcbd14] [0xfac1ffff] [0xc71ceb05] {block 5} [0x20272405] [0x200ccd00] < +mnk > [0xbe8ffff] [0x8bffffff] [0xbd14] < mgrd > [0x689fc76] [0xf800b8] [0x243d8100] [0xcd002027] [0x7400200c] [0xc000b836] < t?as > [0xfcbd148b] [0xc1ffffff] [0x8eb05fa] [0xbd148b] < ei > [0x89fc768d] [0xff00b806] [0x3d8100ff] [0x202724] [0x200ccd] [0xb80574] [0xe800c0c0] [0xfffff489] [0x89fc768d] [0xffd08906] [0x20272425] < wlattd > [0xfffffffc] [0x8d05fac1] [0x689fc76] [0xffffffb8] [0x243d8100] [0xcd002027] [0x7400200c] [0xc0c0b805] < b!drs > [0x2013c4] [0x20136d] [0x201444] [0x201343] [0x20135f] [0x201413] [0x2013f3] [0x201366] [0x201438] [0x201319] [0x20137e] [0x2013a0] [0x2013ff] [0x200492] [0x200492] [0x201479] [0xfff5a4e8] [0xfc768dff] [0x3ca10689] [0xa3002027] [0x202734] [0x3d8bc031] [0x202728] [0x27443d03] [0xe7c10020] [0x383d8908] [0xf7002027] [0xbd04] [0xf0000] [0x5740000] [0xfffd8de8] [0xbd148bff] [0x0] [0x2405c747] [0xcd002027] [0xf600200c] [0xa7410c2] [0x272405c7] [0xc9c0020] [0xe2830020] [0x9514ff0f] [0x2014a0] [0x44e8c1eb] [0xe8ffffef] [0xfffff67c] [0xffff87e8] [0xf80ce9ff] [0xffff] [0xffff00] [0x0] [0xff0000] [0xc000] [0x0] [0x0] [0xffff] [0x0] [0xffffff] [0xffffff] [0xffffff] [0x8080ff] [0xc0c0c0] [0xff] [0x0] [0x0] [0x300dff01] [0x79002027] [0x3005ff06] [0xc3002027] [0x27302d83] [0x79080020] [0x3005c70a] [0x2027] < vs > [0x27300583] [0xc3080020] [0x27280583] [0xc3020020] [0x27283d83] [0x78140020] [0x282d8307] [0x2002027] [0x280d8bc3] [0x87002027] [0x20272c0d] < tsrfte > [0xc3002027] [0x27283583] [0xc3010020] [0x273c0d8b] [0xd030020] [0x202784] [0x273c0d33] [0xe1810020] < ???8 > [0xd8b0b74] [0x202784] [0xfc7549ad] [0x358b56c3] [0x20273c] [0x894ef189] [0x843d03f7] [0xc1002027] [0xd2b02e7] [0x202734] [0xe6c10778] [0xa5f3fd02] [0xefc15efc] [0x3d894702] [0x202730] [0x27840d8b] [0x894f0020] [0xbd04] < eyal > [0xe8c3f475] [0xffffff94] [0x15a00d8a] [0xc300020] [0xbd] [0x3f98000] [0x5c61175] [0x2015a0] [0x7405c704] [0x2027] [0xc30000c0] [0x277c058f] [0x5c70020] [0x20277c] [0x2006c9] [0x7c05c7c3] [0x90002027] [0xe9002016] [0xfffffb2a] [0x89fc768d] [0x1b806] < o4 > [0x2015a0] [0xb0027404] [0x6c3d8303] [0xa002027] [0x10340274] [0x5c70687] [0x202784] [0x2] [0x5f689eb] [0x2015a0] [0x893c750a] [0xe281c2] < ie, > [0xfa8108] < ia, > [0x5e0c1b7] [0x3d800234] [0x2015a0] [0x34027404] [0x6c3d830b] [0xa002027] [0x10340274] [0x278405c7] [0x10020] < eeks > [0x80ffffff] [0x2015a03d] [0xc750900] [0xe2c1c289] [0x5fac105] [0x274c239] [0xe0c1c3ad] [0xeb063405] [0xfc768dc8] [0x34a10689] [0x2b002027] [0x20273805] < mte/e > [0x8b5692c1] [0x20273435] < fl1rl > [0xfffffffc] [0x27403d8b] [0xadfd0020] [0x7549abfc] [0x89ab92f9] [0x2027403d] < v3ais > [0xffffc0e8] [0x383d8bff] [0x8b002027] [0x20273c0d] < d,els > [0x8b5602e7] [0x20273435] [0x2e6c100] [0xe95ea5f3] [0xfffffdfd] [0xffff98e8] [0xfdf3e9ff] [0x1b0ffff] [0x3b01eeb] [0x4b01aeb] [0x9b016eb] [0xab012eb] [0xbb00eeb] [0xdb00aeb] [0xeb006eb] [0x7b002eb] [0x2015a0a2] < idt9d > [0x67002027] [0x8b002016] [0x155c8504] [0x74a30020] [0x58002027] [0xf9e8e9ad] [0x768dffff] [0x310689fc] < ssri?s > [0xe9002027] {block 6} [0xfffffe63] [0x15a005c6] [0xb80c0020] [0xff00ff] [0x277c05c7] [0x17f20020] [0xcaeb0020] [0x5c7ad58] [0x20277c] [0x2006c9] [0x278005c7] [0x4920020] [0x5c60020] [0x200fd5] < hsabs > [0xd700200f] [0xc7002011] [0x20277405] < ??d @pols > [0x158bffff] [0x202740] [0x4c00fa81] [0x1750009] [0x8ea83c3] [0x89044a8b] [0x2027840d] < ,ofml > [0x28b0689] [0x4904ea83] [0xc283f375] [0x40158904] [0xe9002027] [0xfffffd78] [0x200492] [0x20177c] [0x20181c] [0x201852] [0x2017ae] [0x2017b2] [0x2017b6] [0x2015f8] [0x2015a1] [0x2015b0] [0x2015c4] [0x2015a9] [0x2015d4] [0x201804] [0x2017ce] [0x2015cc] [0x200492] [0x2017c2] [0x2017be] [0x2017ba] [0x200492] [0x200492] [0x200492] [0x2015e5] [0x2017c6] [0x2017ca] [0x200492] [0x2017a4] [0x72515] [0x2d0d010b] [0x110160c] [0x2b0a0923] [0x23a3800] [0x220e1000] [0x24001305] [0x201c32] [0x8b38ebad] [0x2027280d] < tdnpe > [0xa3002027] [0x202728] [0xfc18e8ad] [0x15ffffff] [0x201914] [0x278005c7] [0x16de0020] [0x5c60020] [0x200fd5] [0xc905c725] [0x1800200f] [0xc7002019] [0x20276805] [0x2018e800] [0x6405c700] [0xf8002027] [0xc7002018] [0x20277405] < ??d !yrk > [0x14ffffff] [0x20188885] < ;!.l > [0x9c15895a] [0x81002015] [0x8cc2] < neramt > [0x83002027] [0x158910ea] [0x202768] [0xfff506e8] [0x9c158bff] [0x1002015] [0x82548dc2] [0xfc520305] [0xebd2ffad] [0xe7] [0x0] [0x0] [0x40f1700] [0x1] [0x0] [0x70358100] [0xe1002027] < s > [0x200ff935] < ra?c; > [0x202770] [0x19b505c7] [0x20] < o4rs > [0x20276c] < bsl.r > [0x2019b505] [0x15041400] [0x6405c700] [0xb1002027] [0xc7002019] [0x20276805] [0x2019b500] < fa0vs > [0xebffffff] [0x20116879] [0x20116800] [0x2011cf00] [0x201a9600] [0x201a1600] < ;g7e > [0x5c7ffff] [0x2019b9] [0x91606] [0xffff99e8] [0xa05c6ff] [0x2011] [0x20278ca1] [0xf4e0e800] [0x774ffff] [0x1d8524ff] [0x85002018] < ovyiz > [0xa1277423] [0x20278c] [0x276c053b] [0x18790020] [0x110a05f6] [0x74ff0020] [0x8bd8f702] [0x15af0f16] [0x20276c] [0x1689c201] [0x53108eb] [0x20110a] [0xebad1ef7] [0x201022b8] [0x20102200] [0x20107c00] [0xb905c700] [0x2002019] [0xe8021504] [0xfffff0df] [0x278405c7] [0x10020] [0x5c70000] [0x202778] [0x1] [0x89fc768d] [0x6c706] < b > [0x20101505] [0xe741c00] [0x833d] < ?siic > [0x18998524] [0xc0850020] [0x303d1c7e] < ic > [0xfc768d15] [0x7be80689] < ki??8 > [0xfffff54c] [0x277805ff] [0xe8ad0020] [0xfffff426] [0xb6e8c8eb] [0xe9fffffe] [0xfffff6bb] [0xfc925ff] [0x11d70020] [0x11d70020] [0x11d70020] [0x1b1c0020] [0x1b120020] [0x5c70020] [0x2019b9] [0x0] [0x276805c7] [0x19b50020] [0x5c70020] [0x202764] [0x2019b1] [0xfff3dde8] [0xff0774ff] [0x19228524] [0x303c0020] [0x5c70d75] [0x2019b9] [0x2150402] [0x85e1ebad] [0xf7307ec0] [0x2019b905] < ???8 > [0x800d75ff] [0x20278c3d] [0x880f0a00] [0xfffffea1] [0x303d] [0xe8107900] [0xffffff09] [0x277c15ff] [0x768d0020] [0xad0689fc] [0xfff62de9] [0x5005c7ff] [0x36002027] [0xc300201b] [0x1200ef81] [0x29720008] [0x1200c781] < @ees > [0xff25] [0x8efc100] [0x5a0ff81] < rrio > [0x202730a3] < tsifte > [0xff002027] [0x20275815] [0xbc00] [0xfe81000a] [0x9f400] [0xbe0572] [0xc70009f4] [0x2027c805] {block 7} [0x2005e800] [0xcc05c700] [0x2002027] [0xc7002007] [0x2027d005] [0x2006a200] [0xd405c700] [0xb2002027] [0xb8002006] [0x2f] [0xffef4de8] [0xf5a8e9ff] [0xbc59ffff] [0xa0000] [0x768de1ff] [0xb80689fc] [0xa0000] [0xe8d1e029] [0xb0c3e8d1] [0xeb64e6fe] [0xc1c189fe] [0x57ad08e1] [0xe7c1c789] [0xf3c0310a] [0xc3ad5fab] [0xf0cf883] [0xffe8fa82] [0xc78957ff] [0x560ae7c1] [0x2728358b] [0xe6c10020] [0x200b90a] < lwu > [0x28a35f5e] [0xad002027] [0x1005c7c3] [0xb5002028] [0x8d000302] [0x689fc76] [0x200446a1] < krs?s > [0xffffeff4] [0x89fc768d] [0xe9e85806] [0x8dffffef] [0x689fc76] [0x20044fa1] < /zwe > [0x768dffff] [0x890689fc] < /-we@ > [0xdffffff] [0x202784] [0xebad0374] [0xc2e8c3f5] [0xe8fffff9] [0xffffffea] [0xffe86ae8] [0x78850fff] [0x8bffffe8] [0xa8008d04] [0x25c30036] < ???? > [0xffe852e8] [0x8d048bff] [0x36a800] [0xfc768dc3] [0xb80689] [0x9000000] [0xc3c0] [0x1] [0x2010000] [0xff1b12] [0x3f4ba66] [0xd0e1e6ec] < et@wo8 > [0x8dc3c084] [0x201d1a15] [0x56028800] [0xe1e8d689] [0x79ffffff] [0xe1e6ec05] [0xb4acf4eb] [0xe1e6ee1e] [0xfa75ccfe] [0xc35ee8e2] [0x1b108b0] [0xffffd2e8] [0xffbee8ff] [0xe6ecffff] [0xc3803ce1] [0xe5e80be6] [0x75ffffff] [0xb10fb0f9] [0xffb5e803] [0xd5e8ffff] [0x74ffffff] [0x5c7c3f9] [0x202740] [0x94c00] [0xba660cb0] [0xfb403f2] [0xfee1e6ee] [0xc3fa75cc] [0xebe81cb0] [0xb9ffffff] [0x47868c0] [0x7b0fee2] [0xc5eb02b1] [0xe08805e6] [0xb805e6] [0xe600094c] [0xe6e08804] [0x10e8c104] [0xbb081e6] [0xc7660fe6] [0x201d1b05] [0xb002a100] [0xe803b103] [0xffffff53] [0x1b05c766] [0x201d] [0x1805c600] [0x201d] [0xe809b1c3] [0xffffff3b] [0x1d1c05fe] [0x21e80020] [0x79ffffff] [0x16b0c3f9] [0xffff5fe8] [0xe8e6b0ff] [0xffffffdd] [0x4c00be56] [0xb90009] [0xf3000012] [0xbfc35ea5] [0x94c00] [0x1200b9] < frewu > [0xff36e81a] [0xc5b0ffff] [0x1ca2b7eb] [0x8d00201d] [0x689fc76] [0x3f2ba66] [0xa8e1e6ec] < ksaiar > [0xffffff4c] [0xf6c931c3] [0x201d1805] [0x1074ff00] [0x89fc768d] [0x47ffb806] < eak > [0xadffffff] [0xffdfe8c3] [0xbfe8ffff] [0x57ffffff] [0xc1047e8b] [0x7fe802e7] [0x5fffffff] [0x68140ad] [0x1200] [0xffbfe8c3] [0x9fe8ffff] [0x56ffffff] [0xc104768b] [0x7ce802e6] [0x5effffff] [0x768ddeeb] [0xe80689fc] [0xfffffed2] [0x1ab0c3ad] [0xfffeafe8] [0xb1f289ff] [0xfe75e806] [0x59e8ffff] [0x79fffffe] [0xb850c3f9] [0x47] [0xd9e8c931] [0x58fffffe] [0xffff59e8] [0x768b56ff] [0x2e6c104] [0xffffc9e8] [0xffb85eff] [0xe8000047] [0xfffffebc] [0x768dc3ad] [0x310689fc] [0x909090c9] [0xffe5a9e8] [0xe5d5e8ff] [0x97e8ffff] [0xc6ffffff] [0x201d1805] [0x5c70100] [0x2027b4] [0x5e] [0x27b805c7] [0x60020] [0x5c70000] [0x202740] [0x94c00] [0x6c358d56] [0xbf00202c] [0x368000] [0x27b40d8b] [0xa5f30020] [0x2de4358d] [0xbf0020] [0x8b0036a8] [0x2027b40d] < a.t@d > [0x27a005c7] [0xd0000020] [0x5c70036] [0x202758] [0x200492] [0x275005c7] [0x20] [0x5c70000] [0x202744] [0x800] [0x12b8] < kilk > [0x43e9ffff] [0xfffff2] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x89fc768d] [0x9d2b806] [0x8dc30008] [0x689fc76] [0x80a04b8] [0x768dc300] [0xb80689fc] [0x80a08] [0xfc768dc3] [0xefb80689] [0xc3000809] [0x89fc768d] [0x9e9b806] [0x8dc30008] [0x689fc76] {block 8} [0x809cab8] [0x768dc300] [0xb80689fc] [0x809cc] [0xfc768dc3] [0x22b80689] [0xc3000806] [0x89fc768d] [0x9d6b806] [0x8dc30008] [0x689fc76] [0x809e1b8] [0x768dc300] [0xb80689fc] [0x809e3] [0xfc768dc3] [0x58b80689] [0xc3000805] [0x89fc768d] [0x9e8b806] [0x8dc30008] [0x689fc76] [0x809d1b8] [0x768dc300] [0xb80689fc] [0x80a0a] [0xfc768dc3] [0x75b80689] [0xc300001f] [0x89fc768d] [0x9d0b806] [0x8dc30008] [0x689fc76] [0x25300b8] [0x768dc300] [0xb80689fc] [0x809cd] [0xfc768dc3] [0xceb80689] [0xc3000809] [0x89fc768d] [0x7e6b806] [0x8dc30008] [0x689fc76] [0x80528b8] [0xc300] {block 9} [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xa] [0x64] [0x3e8] [0x2710] [0x186a0] [0xf4240] [0x989680] [0x5f5e100] < owoacs > [0x200ccd] [0x12] [0x288] [0x0] [0x0] [0x0] [0x0] [0x94c00] [0x0] [0x50] [0x2011da] [0x0] [0x201bb8] [0x0] [0x33d] [0x28b] [0x200e0b] [0x200fc5] [0xa] [0x201175] [0xffff00] [0x1] [0x2006c9] [0x200492] [0x1] [0x0] [0x0] [0x2005b6] [0x6] [0x5e] [0x100000] [0x100000] [0x0] [0x0] [0x0] [0x0] [0x5e] [0x6] [0x200869] [0x2006d6] [0x20078a] [0x2005e8] [0x200702] [0x2006a2] [0x2006b2] [0x200752] [0x200770] [0x200492] [0x200492] [0x200492] [0x200653] [0x200492] [0x200492] [0x200492] [0x200446] {block 10} [0x200492] [0x200492] [0x200977] [0x200990] [0x30003] [0x3] [0x3f4] [0x0] [0x4b00] [0x1f00000] [0x1f00000] [0x0] [0xf7de] [0x0] [0x0] < ; dup ?dup drop then begin > [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x2007d3] [0x20059e] [0x200583] [0x20056d] [0x2007f7] [0x20080a] {block 11} [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] < boot warm pause macro forth c stop read write nc format show serve load here ?lit 3, 2, 1, , less jump pci nsec accept pad erase copy mark empt emit digit 2emit . h. h.n cr space down edit e lm rm graph switch freeze text top keybo debu at +at xy fov fifo box line color octant sp last unpac blk curs word ekt abort h buffe offset tic winver aper vesa trash hsvv tsim cpoint words qkey digin qwert no-ret r? nul cad pcad displ actc +list itick lis +e > [0x0] [0x201c4b] [0x201efa] [0x200439] [0x2005c3] [0x2005e3] [0x2004e9] [0x201eaa] [0x7f63] [0x7fb0] [0x201fc4] [0x201ece] [0x200493] [0x2004cb] [0x200886] [0x200810] [0x20081b] [0x2007cc] [0x2007c5] [0x2007be] [0x2007a2] [0x200862] [0x200879] [0x2008fc] [0x200907] [0x2011da] [0x201980] [0x201c51] [0x201c64] [0x2004ef] [0x200514] [0x200a0e] [0x200c5c] [0x200a4e] [0x200ccd] [0x200c88] [0x200c76] [0x2008d1] [0x200a43] [0x200ba9] [0x20191b] [0x20192d] [0x200bfa] [0x200c01] [0x200977] [0x200978] [0x2004b8] [0x200a89] [0x2008a8] [0x200d6a] [0x201c8d] [0x200c08] [0x200c17] [0x201fcf] [0x201fda] [0x200976] [0x200ac6] [0x200aa7] [0x2008f5] [0x200c28] [0x201fe5] [0x201ff0] [0x20127b] [0x201ffb] [0x202006] [0x2016a1] [0x202011] [0x200567] [0x202048] [0x20207f] [0x202053] [0x201cda] [0x201d09] [0x20205e] [0x202069] [0x202074] [0x2020a0] [0x201fc4] [0x20201c] [0x202027] [0x200f36] [0x202032] [0x201bad] [0x201c32] [0x201c3a] [0x200492] [0x20208a] [0x202095] [0x2020ab] [0x20203d] [0x2014e0] [0x201cf7] [0x20154a] [0x201932] {block 12} [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfef7f8e3] [0x7fcffff] [0xf001f8] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0x0] [0x0] [0xc003c003] [0xc003c003] [0xfc3ffc3f] [0xc003fc3f] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfe7ff81f] [0x1ff8fe7f] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xfe7f1ff8] [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfe7ff81f] [0xff0fe7f] [0x1ff00ff0] [0xfcfffeff] [0xf000f0] [0xfe7f00f8] [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfe7ff81f] [0x1f00fe7f] [0xf000f00] [0xff7fff3f] [0xff00ff8] < ?w;?d > [0xf71fff7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfef7f8e3] [0x1ffcfeff] [0xff00ff8] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0x0] [0x0] [0xc003c003] [0xc003c003] [0x0] [0xc0030000] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfe7ff81f] [0x2f8fe7f] [0xf000f0] [0xfe3ffc7f] [0xf000f00] < ?o@i0 > [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x7efe3cdc] [0xffffffff] [0x87e1cff3] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfe7ff81f] [0xff8fe7f] [0xf001f0] [0xf000f0] [0x1f000f0] [0xfe7f0ff8] [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xff007e0] [0x3e7c1ff8] [0xf81f7c3e] [0xe007f00f] [0x800fc007] [0x3e001f] [0xf8007c] [0xe000f0] [0x8000c0] [0x80070007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0xc007c007] [0xe001e003] [0x0] [0x0] [0x0] [0x0] [0x0] [0xf77fe71f] [0x1ff8ff7f] [0xff00ff0] [0xff00ff0] [0xff7f1ff8] [0xff1fff7f] [0xf000f00] < ?o@i4 > [0xf81ffe7f] [0xf803f001] [0x80078807] [0xf03fe03f] [0x8007f03f] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x80078007] [0x0] [0x0] [0x0] [0x0] [0x0] [0x7e003c0] [0x7e007e0] [0x8e718ff1] [0xde7b8e71] [0xfc3fdc3b] [0x781e781e] [0x300c300c] [0x0] [0x0] [0xf000f00] [0xf000f00] [0xf000f00] [0xff7fef1f] [0x1ff8ff7f] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff7f1ff8] [0xef1fff7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x7e007e0] [0xe700ff0] [0x1c381e78] [0x381c3c3c] [0x700e781e] [0xe007f00f] [0x8001c003] [0x0] [0x0] [0x0] [0x0] [0x0] [0xfef7f8e3] [0x1ffefeff] [0xff80ffc] [0xff00ff0] [0xfeff1ff8] [0xf8f7feff] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xfefff8f7] [0x1ff8feff] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xfeff1ff8] [0xf8e7feef] [0x0] [0x0] [0xf000f0] [0xf000f0] [0xf000f0] [0xfef7f8f3] [0x1ffcfeff] [0xff00ff8] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0x0] [0x0] [0x0] [0x0] [0x0] < r?do, > {block 13} [0x7c3e3e7c] [0xf00ff81f] [0xe007e007] [0xf81ff00f] [0x3e7c7c3e] [0xff01ff8] [0x0] [0x0] [0x0] [0x0] [0x0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xfe7f1ff8] [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xef7fc71f] [0x3ff8ff7f] [0xff01ff0] [0xff00ff0] [0xff7f1ff8] [0xef1fff7f] [0xf000f00] [0xf000f00] [0xe000f00] [0xfe7ff81f] [0x1ff8fe7f] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xfe7f1ff8] [0xf81ffe7f] [0x0] [0x0] [0xe003e001] [0xe007e003] [0xe005e007] [0xe001e001] [0xe001e001] [0xe001e001] [0xe001e001] [0xe001e001] [0xe001e001] [0xe001e001] [0x0] [0x0] [0xfe7ff81f] [0x1ff0fe7f] [0xf000f00] [0xf000f00] [0xfe1f1f00] [0xf87ffe7f] [0xf000f8] [0xf000f0] < ??dr8 > [0xffffffff] [0x0] [0x0] [0xfe7ff81f] [0x1ff0fe7f] [0xf000f00] [0xf000f00] [0xfe071f00] [0xfe07fc07] [0xf001f00] [0xf000f00] < ?o@i, > [0xf81ffe7f] [0x0] [0x0] < ;is;os ;is;is ;is;is ;is;is ??,r8 > [0xffffffff] [0xf000f000] [0xf000f000] [0xf000f000] [0xf000f000] [0x0] [0x0] [0xffffffff] [0xf0ffff] [0xf000f0] [0xf000f0] [0xf8ff00f0] [0xfefffeff] [0xf001f00] [0xf000f00] < ?o@i, > [0xf81ffe7f] [0x0] [0x0] [0xfe7ff81f] [0xff8fe7f] [0xf000f0] [0xf000f0] [0xf8ff00f8] [0xfefffeff] [0xff01ff8] [0xff00ff0] [0xfe7f1ff8] [0xf81ffe7f] [0x0] [0x0] [0xffffffff] [0x700ffff] [0x1f000f00] [0x7c003e00] [0xf001f800] [0xc007e003] [0x1f800f] [0x7c003e] [0xf000f8] [0xc000e0] [0x0] [0x0] [0xfe7ff81f] [0x1ff8fe7f] [0xff00ff0] [0xff00ff0] [0xfe7f1ff8] [0xfe7ffc3f] [0xff01ff8] [0xff00ff0] [0xfe7f1ff8] [0xf81ffe7f] [0x0] [0x0] [0xfe7ff81f] [0x1ff8fe7f] [0xff00ff0] [0xff00ff0] [0xff7f1ff8] [0xef1fff7f] [0xf000f00] [0xf000f00] < ?o@i, > [0xf81ffe7f] [0x0] [0x0] [0x78007800] [0x78007800] [0x0] < is > [0x78007800] [0x78007800] [0x78007800] [0x78007800] [0x78007800] [0x78007800] [0xf01ff81c] [0xc007f00f] [0x0] [0x0] [0x0] [0x0] [0x0] < ?w; > [0xfeffff7f] [0xfeff] [0x0] [0x0] [0x0] [0x0] [0xf000f0] [0xf000f0] [0xf000f0] < ,isoqs > [0xe0fffcf3] [0xff80ff] [0xc0ff00ff] [0xfcf3f0ff] < o?s?@ > [0x3f00ff0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xf0006] [0x801f801f] [0x6000f] [0x0] [0x0] [0x0] [0x0] [0x0] [0xffffffff] [0x1f00ffff] [0xfe003f00] [0xe00ff803] [0xfe803f] [0xffff00f8] [0xffffffff] [0x0] [0x0] [0x1f000f00] [0x3e001f00] [0x7c007c00] [0xf001f800] [0xe003f001] [0xc007c007] [0x1f800f] [0x3e001f] [0x7c007c] [0xf800f8] [0x0] [0x0] [0x0] [0x70000] [0xc01f800f] [0xc01fc01f] [0x7800f] [0x0] [0x70000] [0xc01f800f] [0xc01fc01f] [0x8007800f] [0x78003] [0x1c000e] [0x0] [0x70000] [0xc01f800f] [0xc01fc01f] [0x7800f] [0x0] [0x70000] [0xc01f800f] [0xc01fc01f] [0x7800f] [0x0] [0x0] [0xc0038001] [0xe007c003] [0xe007e007] [0xe007e007] [0xc003c003] [0x80018001] [0x8001] {block 14} [0xc003c003] [0xc003c003] [0x0] [0x0] [0x0] [0x0] [0x0] [0xc003c003] [0xc003c003] [0xfe7fc003] [0xfe7ffe7f] [0xc003fe7f] [0xc003c003] [0xc003c003] [0x0] [0x0] [0xfe7ff81f] [0xff0fe7f] [0x7e007e0] [0xe7e3c7e1] [0xe7e3e7e3] [0xfee3ffe3] [0xf8e1fee3] [0xe000e0] < ?o@o, > [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x30080000] [0xf01e781c] [0xc007e00f] [0xf007e003] [0x381e780f] [0x100c] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x70000] [0xc01f800f] [0xc01fc01f] [0xc007c00f] [0x78003] [0x1c000e] [0xfe7ff81f] [0xff0fe7f] [0x7000700] [0x7e000f00] [0xf801fe01] [0xc003e003] [0xc003] [0x0] [0xc003c003] [0xc003c003] [0x0] [0x0] [0xfcfff0ff] [0xfe7ffeff] [0xff1fff3f] [0xff07ff0f] [0xff01ff03] [0xff00ff00] [0xff00ff00] [0xff03ff01] [0xff0fff07] [0xff3fff1f] [0xfefffe7f] [0xf0fffcff] [0xfefff8ff] [0xfffffeff] [0xff01ff0] [0xff00ff0] < ??b? > [0xfefffeff] [0xc0fff8ff] [0xf0f3e0f7] [0xfcf0f8f1] < o?si/s > [0xff01ff0] [0x0] [0xffffffff] [0xffffffff] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0xfe7ff81f] [0xfffffe7f] [0xff01ff8] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] < r?do, > [0xfe7fffff] [0xf81ffe7f] [0x0] [0xffffffff] [0xffffffff] [0xf000f0] [0xf000f0] [0xe0ff00f0] [0xe0ffe0ff] [0xf0e0ff] [0xf000f0] [0xf000f0] [0xffffffff] [0xffffffff] [0x0] [0x80018001] [0xc003c003] [0xe007e007] [0xf00fe007] [0x700e700e] [0xf81f781e] [0xfc3ff81f] [0x1c38fc3f] [0xe701e78] [0xff00ff0] [0x7e007e0] [0x0] [0xffc0ff8] [0xffe0ffc] [0xfff0ffe] [0xff70ff7] [0x8ff38ff7] [0xcff3cff3] [0xeff1cff1] < /@ow@ i?s?@ o?si?s r?so?s > [0x0] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0xfe7ff81f] [0xfffffe7f] [0xf003f8] [0xf000f0] [0xf8ff00f8] [0xfe7ffe7f] [0x1f00ff1f] [0xf000f00] [0x1fc00f00] [0xfe7fffff] [0xf81ffe7f] [0x0] [0x7e007e0] < r?do, > [0x3ffc1ff8] [0x77ee7ffe] [0xe7e7e7e7] [0x87e1c7e3] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x0] [0xfe7ff81f] [0xfffffe7f] [0xff01ff8] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] < r?do, > [0xfe7fffff] [0xf81ffe7f] [0x0] [0xff007e0] < r-do, > [0x3c3c1e78] [0x781e3c3c] [0xf00ff00f] [0xc003e007] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0xffffffff] [0xffffffff] [0x0] [0xfe7ff81f] [0xfffffe7f] [0xff01ff8] [0xf000f0] [0xf000f0] [0x3ff000f0] < o?so?s > [0xff00ff0] < r?do, > [0xfe7fffff] [0xf81ffe7f] [0x0] [0xffffffff] [0xffffffff] [0xf000f0] [0xf000f0] [0xe0ff00f0] [0xe0ffe0ff] [0xf0e0ff] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0x0] [0x7e003c0] [0x7e007e0] [0xe7007e0] [0xe700e70] [0xe700e70] [0x8e718e71] [0xdc3b9c39] [0xfc3ffc3f] [0x781ef81f] [0x381c381c] [0x18181818] {block 15} [0xf8ffe0ff] [0xfefffcff] < r?so/s > [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] < o/sr?s > [0xfcfffeff] [0xe0fff8ff] [0x0] [0x7e007e0] [0xff00ff0] < r?do, > [0x1e781ff8] [0x3e7c3e7c] [0x3c3c3c3c] [0x781e781e] [0xf00ff00f] [0xe007e007] [0xc003c003] [0x80018001] [0x0] [0xfefff8ff] [0xfffffeff] [0xff01ff0] [0xff00ff0] < ??b? > [0xfefffeff] [0xf0f8ff] [0xf000f0] [0xf000f0] [0xf000f0] [0xf000f0] [0x0] [0xf8ffe0ff] [0xfefffcff] < r?so/s > [0xff00ff0] < ?i@i, > [0xfcfffcff] [0x1ff0feff] [0xff00ff0] < o/sr?s > [0xfcfffeff] [0xe0fff8ff] [0x0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] < ??v? > [0xffffffff] [0xff0ffff] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0x0] [0xff007e0] [0x1e781ff8] [0x7c3e3e7c] [0xf81f781e] [0xe007f00f] [0xe007e007] [0xf00fe007] [0x781ef81f] [0x3e7c7c3e] [0x1ff81e78] [0x7e00ff0] [0x0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] < r?do, > [0xfe7fffff] [0xf81ffe7f] [0x0] [0xfe7ff81f] [0xfffffe7f] [0xff01ff8] [0xff00ff0] [0xff00ff0] [0xff00ff0] [0xff00ff0] < /@oo, o?v?8 > [0xfe7fffff] [0xfb1fff7f] [0x0] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0x80018001] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0x7000700] [0x7000700] [0xfe7ffe1f] [0xf87ffe7f] [0xe000e0] [0xe000e0] [0xe000e0] [0xffffffff] [0xffffffff] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0x7000700] [0x7000700] [0xfe07fe07] [0xfe07fe07] [0x7000700] [0x7000700] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0xe0e0e0e0] [0xe0e0e0e0] [0xe0e0e0e0] [0xe0e0e0e0] [0xe0e0e0e0] [0xffffffff] [0xffffffff] [0xe000e000] [0xe000e000] [0xe000e000] [0xe000e000] [0xe000e000] [0xffffffff] [0xffffffff] [0xe000e0] [0xe000e0] [0xe000e0] [0xfefff8ff] [0xfefffeff] [0x7000700] [0x7000700] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0xe000e0] [0xe000e0] [0xfefff8ff] [0xfefffeff] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0xffffffff] [0xffffffff] [0x1e000f00] [0x3c001e00] [0x78007800] [0xe001f000] [0xc003e001] [0x80078007] [0x1e000f] [0x3c001e] [0x780078] [0xe000f0] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0xfe7ffe7f] [0xfe7ffe7f] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0xfe7ff81f] [0xfe7ffe7f] [0x7e007e0] [0x7e007e0] [0x7e007e0] [0xff7fff7f] [0xff1fff7f] [0x7000700] [0x7000700] [0x7e007e0] [0xfe7ffe7f] [0xf81ffe7f] [0xf000f00] [0xf000f00] [0xf000f00] [0xf000f00] [0xf000f00] [0xf000f00] [0xf000f00] [0xf000f00] [0x1ff00f00] [0xfe7fffff] [0xf81ffe7f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xffffffff] [0xffffffff] [0x0] [0x0] [0x0] [0x0] [0x0] [0x1ff00ff0] < i/so?s > [0xf0f3f8f1] [0x80ffe0f7] [0xfe00ff] [0xfc00fc] [0xff00fe] [0xe0f780ff] [0xf8f1f0f3] < o?si/s > [0xff01ff0] {block 16} [0x0] [0x0] [0xe01fc00f] [0xe01fe01f] [0xe01fe01f] [0xc00fe01f] [0x0] [0x0] [0xffffffff] [0xf00ffff] [0x3c001e00] [0xf0007800] [0xc003e001] [0xf8007] [0x3c001e] [0xf00078] < ??drd > [0xffffffff] [0x0] [0x0] [0x3000100] [0xf000700] [0x1e000f00] [0x38003c00] [0xf0007800] [0xc003e001] [0x8007c003] [0x1e000f] [0x3c001c] [0xf00078] [0xe000e0] [0x8000c0] [0xe007e007] [0x60006] [0x60006] [0x60006] [0x60006] [0x60006] [0x60006] [0x60006] [0x60006] [0xe007e007] [0x0] [0x0] [0xe007e007] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0xe007e007] [0x0] [0x0] [0xc0038001] [0xf00fe007] [0xf00ff00f] [0xf00ff00f] [0xf00ff00f] [0xf00ff00f] [0xe007f00f] [0x8001c003] [0xc0030000] [0xe007e007] [0xe007e007] [0xc003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xffffffff] [0xffffffff] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0xc003c003] [0x0] [0x0] [0xfe7ffc3f] [0x3c003c0] [0xe3c7c3c3] [0x3c603c6] [0x3c603c6] [0xc3c3e3c7] [0x3c003c0] [0xfc3ffe7f] [0x0] [0x0] [0x0] < seer > [0x88088410] [0xa0029004] [0xff7fc001] [0xa002c001] [0x88089004] [0x82208410] [0x8000] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xe0010000] [0xf003f003] [0x1000d001] [0x60003000] [0xc000] [0x0] [0x0] < ?o@ > [0x660fe7f] [0x6000660] [0x6000600] [0x6000600] [0xfe03fe03] [0x30003] [0x30003] [0x30003] [0x30003] [0x30000] [0x3] [0xff3fff0f] [0xfc7fff7f] [0xf0fff8ff] [0xc0ffe0ff] [0xff80ff] [0xfc00fe] [0xfe00fc] [0x80ff00ff] [0xe0ffc0ff] [0xf8fff0ff] [0xff7ffc7f] [0xff0fff3f] [0x0] [0x0] [0x0] [0x61e0000] [0xffff8f7f] [0x7860fef1] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x80010000] [0x6006c003] [0x1818300c] [0xc300c30] [0xfc3f0c30] [0xfc3f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x60066006] [0x60066006] [0x60066006] [0x60066006] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x300c300c] [0x300c300c] [0x300c300c] [0xfc3ffc3f] [0x300c300c] [0xfc3ffc3f] [0x300c300c] [0x300c300c] [0x300c300c] [0x0] [0x0] [0x25a2ffff] [0xffff25a2] [0x25a225a2] [0x25a225a2] [0x25a2ffff] [0x25a225a2] [0x25a2ffff] [0xffff25a2] [0x0] [0x0] [0x0] [0x0] [0x3c1fffe] [0x99105a1] [0x21851189] [0xfe814183] [0xc182817f] [0x9188a184] < sfseeh > [0x7fff83c0] [0x0] [0x0] [0x0] [0x0] [0x38001800] [0xf8007800] [0xf803f801] [0xf80ff807] [0xff3ff81f] [0xffffff7f] [0xff7fffff] [0xf81fff3f] [0xf807f80f] [0xf801f803] [0x7800f800] [0x18003800] [0x0] [0xc000000] [0x24001400] [0x4410c41f] [0x44104410] [0x44104410] [0x44104410] [0x2400c41f] [0xc001400] [0x0] [0x0] [0x0] [0x0] [0xfc00180] < tvsrnn > [0x741cdc1f] [0xc413e416] [0xc413c411] [0x741c6416] [0x2c30dc1f] [0xfc01660] [0x180] [0x0] [0x0] [0x0] [0x70003800] [0xc001e000] [0x78003] [0x1c000e] [0x1c0038] [0x7000e] [0xc0018003] {block 17} [0x7000e000] [0x3800] [0x0] [0x0] [0x0] [0xe001c] [0x80030007] [0xe000c001] [0x38007000] [0x38001c00] [0xe0007000] [0x8003c001] [0xe0007] [0x1c] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] < ?o@ > [0xfe7f] < ?o@ > [0xfe7f] [0x0] [0x0] [0x0] [0x0] < i > [0x8003c001] [0x60007] [0x60006] [0x60006] [0x60006] [0x60006] [0x60006] [0x80030007] [0x7000c001] [0x0] [0x0] [0xe0000] [0xc0018003] [0x6000e000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0x60006000] [0xc001e000] [0xe8003] [0x0] [0x0] [0x80018001] [0xf81ff00f] [0x80198019] [0x80198019] [0xf01f8019] [0x9801f80f] [0x98019801] [0x98019801] [0xf00ff81f] [0x80018001] [0x0] [0x0] [0x3e0000] [0x3410141] [0xc410641] [0x303e1841] [0xc0006000] [0x38001] [0x7c0c0006] [0x82308218] [0x82c08260] [0x7c008280] [0x0] [0x0] < n > [0xe01fe00f] [0x60306030] [0x60186030] [0xfc0f600c] [0x600cfc0f] [0x60306018] [0x60606060] [0x60306060] [0xff0f6018] [0x9e07] [0x0] [0x0] [0x80010000] [0x80018001] [0x80018001] [0x8001] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xc00080] [0xf000e0] [0x7c00f8] [0x1f003e] [0xc007800f] [0xf001e003] [0x7c00f800] [0x1f003e00] [0x7000f00] [0x1000300] [0x0] [0x0] [0x0] [0x0] [0x80010000] [0x6006c003] [0x300c300c] [0x18181818] [0x1818] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] < ??d > [0xffffffff] [0x0] [0x0] [0x0] [0x180030] [0x6000c] [0x80010003] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] < ; > [0x8001c001] [0x80018001] [0x80018001] [0x80038001] [0x60006] [0x80018003] [0x80018001] [0x80018001] [0xc0018001] [0xf000] [0x0] [0xf0000] [0x80018003] [0x80018001] [0x80018001] [0xc0018001] [0xe000e000] [0x8001c001] [0x80018001] [0x80018001] [0x80038001] [0xf] [0x0] [0x80030000] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x80038003] [0x0] [0x0] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x65776f48] [0x4f206472] [0x6f666b61] [0x32206472] [0x20353030] [0x206e614a] [0x20203132] [0x20202020] [0x20202020] < nbifot > [0x6f46726f] [0x20687472] [0x6c707845] [0x7265726f] [0x20202020] [0x20202020] [0x70736944] [0x2079616c] [0x3031203a] [0x37783432] [0x31203836] [0x69622036] [0x69642074] [0x616c7073] [0x20202079] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x706f6c46] [0x64207970] [0x206b7369] [0x76697264] [0x69772065] [0x73206874] [0x626f7274] [0x79622065] < itnaaet > [0x4c207972] [0x6165766f] [0x20206c6c] [0x20202020] [0x20202020] [0x20202020] [0x20202020] [0x6d696c53] [0x73202c65] [0x646e756f] [0x4d202c73] [0x65646e61] [0x6f72626c] [0x77202c74] [0x2c646f6f] < ien-ec > [0x75727265] < tbyiei nritnit nonc0i > [0x55202c73] [0x202c5044] [0x6566694c] {block 18} :var ns [0xb40] :var nblk [0x5a0] :var nc [0x50] | cr ( colorforth Jul31 Chuck Moore Public Domain) 20 load 22 load 24 load 26 load 28 load 30 load ] : dump 32 load ; : icons 34 ld ; : print 38 ld ; : north 46 ld ; : rtc 50 ld ; : lan 52 ld ; : colors 56 ld ; : wood 60 ld ; : mand 64 ld ; : sound 68 ld ; : gr 72 ld ; : eth 130 ld ; : life 226 ld ; : ed [ 206 ] ld ; : slime 200 ld ; : int 242 ld ; : xx 232 load ; ( New!) : hlp logo pause cal e ; mark empt hlp ] : press ( the key marked ^^ P to see the shadow block) ; {block 19} ( HPO 2005 Jan 21 colorforth explorer) : ... ( This block gets loaded at power up.) : dump ( instant compile version of DUMP) : icons ( edit the character font icons) : print ( save screen image as a PNG file to block 270 on the floppy) : north ( North Bridge PCI chip display) : rtc ( Real Time Clock display) : colors ( 3-axis rgb colour display) : wood ( imitation pine blockboard) : mand ( display the Mandeldrot set) : sound ( control the PC speaker) : gr ( graphics - type ok to run the demo) : life ( Conways game of life) : ed ( the editor partly converted to colorforth) : slime ( watch out for the slugs!) : int ( 1000 Hz timer interrupt) : xx ( colorforth explorer) : help ( press the space bar to leave the editor, then type the keys indicated in the keypad in the bottom right of the screen, then the space bar to execute the word. Type) [ e ( or) 18 edit ( to run the editor.) {block 20} macro ] : /dup [compile] ?dup ; : ?f $c021 2, ; : 0if $75 2, here ; : +if $78 2, here ; : 1- ( n-n) $48 1, ; : ?f $c021 2, ; : 2/ ( n-n) $f8d1 2, ; : time ( -u) [compile] /dup $310f 2, ; : shl ( uc-u) ?lit $e0c1 2, 1, ; : shr ( uc-u) ?lit $e8c1 2, 1, ; : r@ [compile] /dup $8b 1, $c7 1, ; : sti $fb 1, ; ( enable interrupts) : cli $fa 1, ; ( disable interrupts) forth ] : emp cli empt ; : empt emp ; : cli cli ; : sti sti ; : nul ; : time time ; : /flop stop ; {block 21} ( Pentium macros') : ?f ( set flags to reflect tos) : 0if ( if zero ... then jnz aids in clarity) : +if ( js, this complements the set) : 1- ( subtract 1) : ?f : 2/ ( divide by 2) : /dup ( new name for ?dup . Warning ?dup is not the ANS version) : time ( return Pentium instruction counter) : lshift ( shift u left c places) : rshift ( shift u right c places) : r@ ( copies the top of the return stack to TOS) : sti ( enable device interrupts) : cli ( disable them) : a, {block 22} ( more macros) macro ] : swap $168b 2, $c28b0689 , ; : 0 [compile] /dup $c031 2, ; : if $74 2, here ; : -if $79 2, here ; : a [compile] /dup $c28b 2, ; : a! ?lit if $ba 1, , ; ] then $d08b 2, [compile] drop ; : 1@ $8a 2, ; : 1! [compile] a! $288 2, [compile] drop ; : p@ ( a-n) [compile] /dup [compile] a! $ec 1, ; : p! ( na-) [compile] a! $ee 1, [compile] drop ; : 2* $e0d1 2, ; : a, 2* 2* , ; : @ ?lit if [compile] /dup $58b 2, [compile] a, ; ] then $85048b 3, $ 0 , ; : ! ?lit if ?lit if $5c7 2, swap [compile] a, , ; ] then $589 2, [compile] a, [compile] drop ; ] then [compile] a! $950489 3, $ 0 , [compile] drop ; : nip $4768d 3, ; : + ?lit if $5 1, , ; ] then $603 2, [compile] nip ; : xor $633 : binary ?lit if swap 2 + 1, , ; ] then 2, [compile] nip ; : and $623 [compile] binary ; : or $60b [compile] binary ; : u+ ?lit if $681 2, , ; ] then $44601 3, [compile] drop ; : ? ?lit $a9 1, , ; {block 23} ( Pentium macros' 1, 2, 3, , compile 1-4 bytes) : drop ( lodsd, flags unchanged, why sp is in ESI) : over ( sp 4 + @) : swap ( sp xchg) : 0 ( 0 0 xor, macro 0 identical to number 0) : a ( 2 0 mov, never used?) : a! ( 0 2 mov, unoptimized) : 1@ ( fetch byte from byte address) : 1! ( store byte to byte address) : p@ p-n ( fetch byte from port) : p! np ( store byte to port) : @ ( EAX 4 *, unoptimized) : ! ( EDX 4 *) : nop ( used to thwart look-back optimization) : - ( ones-complement) : 2* : 2/ : if ( jz, flags set, max 127 bytes, leave address) : -if ( jns, same) : then ( fix address - in kernel) : push ( EAX push) : pop ( EAX pop) : u+ ( add to 2nd number, literal or value) : ? ( test bits, set flags, literal only!) {block 24} ( even more macros) : over [compile] /dup $4468b 3, ; : push $50 1, [compile] drop ; : pop [compile] /dup $58 1, ; : invert ( n-n) $d0f7 2, ; : for [compile] push [compile] begin ; : *next swap : next $75240cff : 0next , here invert + 1, $4c483 3, ; : -next $79240cff [compile] 0next ; : i [compile] /dup $24048b 3, ; : *end swap : end $eb 1, here invert + 1, ; : +! ?lit if ?lit if $581 2, swap [compile] a, , ; ] then $501 2, [compile] a, [compile] drop ; ] then [compile] a! $950401 3, $ 0 , [compile] drop ; : nop $90 1, ; : align here invert 3 and drop if [compile] nop [compile] align ; ] then ; : or! [compile] a! $950409 3, $ 0 , [compile] drop ; : * $6af0f 3, [compile] nip ; : */ $c88b 2, [compile] drop $f9f72ef7 , [compile] nip ; : /mod [compile] swap $99 1, $16893ef7 , ; : / [compile] /mod [compile] nip ; : mod [compile] /mod [compile] drop ; {block 25} : - n-n ( ones complement negate , xor) : for n ( push count onto return stack, falls into) begin : begin -a ( current code address - byte) : *next aa-aa ( swap) for ( and) if ( addresses) : next a ( decrement count, jnz to) for, ( pop return stack when done) : -next a ( same, jns - loop includes 0) : i -n ( copy loop index to data stack) : end a ( jmp to) begin : +! na ( add to memory, 2 literals optimized) : align ( next call to end on word boundary) : or! na ( inclusive-or to memory, unoptimized) : * mm-p ( 32-bit product) : */ mnd-q ( 64-bit product, then quotient) : /mod nd-rq ( remainder and quotient) : / nd-q ( quotient) : mod nd-r ( remainder) : time -n ( Pentium cycle counter, calibrate to get actual clock rate) {block 26} ( Compiled macros) forth ] : block ( n-n) [ offset ] @ + ( fall through to blks) : blks 256 * ; : r@ ( -n) r@ ; : @ ( a-n) @ ; : ! ( an-) ! ; : + ( nn-n) + ; : invert ( n-n) invert ; : */ ( nnn-n) */ ; : * ( nn-n) * ; : / ( nn-n) / ; : 2* ( n-n) 2* ; : 2/ ( n-n) 2/ ; : dup ( n-nn) dup ; : swap ( nn-nn) swap ; ( Arithmetic) : negate ( n-n) invert 1 + ; : - ( nn-n) negate + ; : min ( nn-n) less if drop ; ] then swap drop ; : abs ( n-u) dup negate : max ( nn-n) less if swap then drop ; : v+ ( vv-v) push u+ pop + ; : writes ( acn) cli for write next drop drop ; : reads ( acn) cli for read next drop drop ; : h ( -a) sp [ 20 ] + ; : save empt 0 dup [ nc ] @ writes /flop ; {block 27} ( These macros may be) yellow, ( others may not) : block n-a ( block number to word address) : blks n-n ( size in blocks to words) : r@ ( copies the top of the return stack to stack) : @ etc ( Arithmetic) : negate n-n ( when you just cant use) - : min nn-n ( minimum) : abs n-u ( absolute value) : max nn-n ( maximum) : v+ vv-v ( add 2-vectors) : nc -a ( number of cylinders booted) : save ( write colorforth to bootable floppy) : oadf ( save as spelled by qwerty. For typing with blank screen) {block 28} ( Relative load blocks) : nload r@ $100 / 2 + load ; : +load ( n-) r@ $100 / + load ; : blk ( -a) [ $a86 ] ; : ll blk @ load ; : sect blk @ 18 / dup 18 * block swap ; : ss sect 1 writes /flop ; : uu sect 1 reads /flop ; :var lblk [0x44] : ld ( n-) dup lblk ! load ; : vv lblk @ edit ; : help lblk @ 1 + edit ; ( Real Time Clock) :var khz [0x124fa9] : rtc@ ( t-c) $70 p! $71 p@ ; : rtc! ( ct-) $70 p! $71 p! ; : hi 10 rtc@ $80 and drop 0if hi ; ] then ; : lo 10 rtc@ $80 and drop if lo ; ] then ; : cal hi lo time invert hi lo time + 500 + 1000 / khz ! ; : ms ( n-) khz @ * time + begin dup time invert + drop -if drop ; ] then end drop ; : secs ( n-) for pause lo hi next ; macro ] : swapb ( w-w) $e086 2, ; forth ] : split dup swapb $ff and swap $ff and ; : vframe [ $1e80000 ] ; {block 29} : nload ( loads the next source block ' b+2) : +load ( loads the source block ' b+n) : blk ( where the current blk happens to be kept) : ll ( load the current edit blk) : ss ( save the sector containing the current edit block to the floppy disc) : lblk ( holds the last block loaded by) : ld : vv ( edits the last block loaded by ld) : rtc@ reg-n ( fetch reg from rtc) : rtc! n reg- ( store in rtc register) : hi ( wait till Update In Progress bit is high) : lo ( wait till UIP bit is low) : cal ( calibrate the processor clock) : ms ( wait for n milliseconds) : secs ( wait for n seconds) : swapb ( swap the two low bytes) : split ( split the low two bytes) : vframe ( byte address of the video frame buffer) {block 30} ( Colors etc) : white $ffffff color ; : red $ff0000 color ; : green $ff00 color ; : blue $ff color ; : silver $bfbfbf color ; : black 0 color ; : screen 0 dup at 1024 768 box ; : 5* 5 for 2emit next ; : cf 25 dup at red $1 $3 $c $3 $a 5* green $14 $2 $1 $3 $3e 5* ; : logo show black screen 800 710 blue box 600 50 at 1024 620 red box 200 100 at 700 500 green box text cf keyboard ; : noshow show keyboard ; : empty empt logo ; : lshift ( uc-u) $1f and ?f 0if drop ; ] then for 1 shl next ; : rshift ( uc-u) $1f and ?f 0if drop ; ] then for 1 shr next ; : rand32 ( -n) time dup 16 lshift xor ; : string pop ; : 1@ ( a-c) 1@ $f and ; : 1! ( ac-) 1! ; {block 31} : colors ( specified as rgb' 888) : screen ( fills screen with current color) : at xy ( set current screen position) : box xy ( lower-right of colored rectangle) : 5* ( displays 5 large characters) : cf ( displays) [ colorforth : logo ( displays colorforth logo) : empty ( also displays the logo) : lshift ( shift u left c places) : rshift ( shift u right c places) : show ( background task executes following code repeatedly) : keyboard ( displays keypad and stack) : string ( returns the address of the string following) : rand32 ( returns a 3 bit random number) {block 32} ( Dump ASCII) 48 load ( names) 208 load :var x [0x11c0] :var y [0x204040] : .cell ( a-a) blue dup @ 4 for dup $ff and chc emit $100 / next drop white ; : one dup dup @ dup push h. space dup h. pop space swap .cell drop space space space space dup .word drop white cr ; : lines for one 1 + next drop ; : dump x ! : r show black screen x @ 15 text lines cr x @ 16 for .cell $1 + next drop keyboard ; : it @ + @ dup h. space ; : lines for white i [ x ] it i [ y ] it xor drop if red then i . cr -next ; : cmp show blue screen text 19 lines red [ x ] @ h. space [ y ] @ h. keyboard ; : u 16 : +xy dup [ x ] +! [ y ] +! ; : d -16 +xy ; : ati $f4100000 ( ff7fc000) xor : byte 4 / dump ; : fix for 0 over ! 1 + next ; : ver [ 18 ] block [ $40 ] - dump ; dump {block 33} ( Does not say empty, compiles on top of application) : x -a ( current address) : one a-a ( line of display) : lines an : dump a ( background task continually displays memory ' decodes the value as a name and ASCII) : u ( increment address) : d ( decrement) : ati ( address of AGP graphic registers) : byte a ( byte address dump) : fix an-a ( test word) : ver ( show the kernel version information) {block 34} ( App' Icons font editor) empt macro ] : @w $8b66 3, ; : !w [compile] a! $28966 3, [compile] drop ; : *byte $c486 2, ; forth :var ic [0x4c] :var cu [0x11] : sq [ xy ] @ $10000 /mod 16 + swap 16 + box 17 0 +at ; : loc [ ic ] @ [ 16 24 8 */ ] * [ 12 block 4 * ] + ; : 0/1 $8000 ? if green sq ; ] then blue sq ; : row dup @w *byte 16 for 0/1 2* next drop [ -17 16 * ] 17 +at ; : ikon loc 24 for row 2 + next drop ; : adj 17 * swap ; : cursor [ cu ] @ 16 /mod adj adj over over at red 52 u+ 52 + box ; : ok show black screen cursor 18 dup at ikon text blue 80 450 at 96 474 box 80 450 at white [ ic ] @ dup emit space dup green . 24 emit 21 emit 2 h.n keyboard ; nload ok h {block 35} ( Draw big-bits icon) : @w a-n ( fetch 16-bit word from byte address) : !w na ( store same) : *byte n-n ( swap bytes) : ic -a ( current icon) : cu -a ( cursor) : sq ( draw small square) : xy -a ( current screen position, set by) at : loc -a ( location of current icons bit-map) : 0/1 n-n ( color square depending on bit 15) : row a-a ( draw row of icon) : +at nn ( relative change to screen position) : ikon ( draw big-bits icon) : adj nn-nn ( magnify cursor position) : cursor ( draw red box for cursor) : ok ( background task to continually draw icon, icon number at bottom) {block 36} ( Edit icon) : +ic 1 [ ic ] +! ; : -ic [ ic ] @ -1 + 0 max [ ic ] ! ; : bit [ cu ] @ 2/ 2/ 2/ 2/ 2* loc + $10000 [ cu ] @ $f and 1 + for 2/ next *byte ; : toggle bit over @w xor swap !w ; : td toggle : d 16 : wrap [ cu ] @ + [ 16 24 * ] dup u+ /mod drop [ cu ] ! ; : tu toggle : u -16 wrap ; : tr toggle : r 1 wrap ; : tl toggle : l -1 wrap ; : nul ; : h pad nul nul xx nul tl tu td tr l u d r -ic nul nul +ic nul nul nul nul nul nul nul toggle nul nul nul nul [ $2500 , $110160c dup , , $2b000023 , 0 , $2000000 , 0 , {block 37} ( Edit icon) : t ( toggles the current pixel) : ludr ( left up down right) : . ( top row toggles and moves) : -+ ( select icon to edit) {block 38} ( Print PNG to disk) :var w [0x400] :var h [0x300] :var d [0x1] : frame $1e80000 ; 6 +load 4 +load 2 +load ] : -crc ( a) here over negate + crc . ; : crc -crc ; : wd ( -a) here 3 and drop if 0 1, wd ; ] then here 2 2/s ; : bys ( n-a) . here swap , ; : plte $45544c50 48 bys $0 3, $ff0000 3, $ff00 3, $ffff00 3, $ff 3, $ff00ff 3, $ffff 3, $ffffff 3, $0 3, $c00000 3, $c000 3, $c0c000 3, $c0 3, $c000c0 3, $c0c0 3, $c0c0c0 3, crc ; : png ( awh) [ d ] @ / [ h ] ! [ d ] @ / [ w ] ! wd swap $474e5089 , $a1a0a0d , ( ihdr) $52444849 13 bys [ w ] @ . [ h ] @ . $304 , $0 1, crc plte ( idat) $54414449 0 bys swap deflate crc ( iend) $444e4549 0 bys crc wd over negate + ; : at 1024 * + 2* [ frame ] + ; : full 4 [ d ] ! 0 dup at 1024 768 png ; : pad 1 [ d ] ! [ 46 -9 + 22 * ] nop [ 25 -4 + 30 * ] at [ 9 22 * ] nop [ 4 30 * ] png ; : go 1 [ d ] ! 1024 [ w ] ! 768 [ h ] ! 0 0 at 1024 768 png raw ; go e {block 39} ( Print PNG to disk) : frame ( the video frame buffer) : -crc ( a) : crc : wd ( -a) : bys ( n-a) : plte : png ( awh) : at : full : pad : go ( copy the screen image as a PNG file to the floppy disk block 270 and up.) {block 40} ( lz77) macro ] : @w $8b66 3, ; : *byte $c486 2, ; : !b [compile] a! $289 2, [compile] drop ; forth ] : *bys dup 16 2/s *byte swap $ffff and *byte $10000 * + ; : . *bys , ; : +or over invert and or ; : 0/1 $10 ? if $1e and $1e or drop if 7 ; ] then $f ; ] then 0 and ; : 4b dup 0/1 9 and over 6 2/s 0/1 $a and +or swap 11 2/s 0/1 $c and +or $8 or ; : pix dup @w [ d ] @ 2* u+ 4b ; : row 1, dup [ w ] @ 2/ dup 1 + dup 2, invert 2, 0 dup 1, +adl for pix 16 * push pix pop or dup 1, +adl next drop +mod [ d ] @ [ 1024 2 * ] * + ; : deflate $178 2, 1 0 adl! [ h ] @ -1 + for 0 row next 1 row drop [ ad2 ] @ *byte 2, [ ad1 ] @ *byte 2, here over 4 + negate + *bys over -4 + !b ; {block 41} {block 42} ( Crc) macro ] : 2/s ?lit $e8c1 2, 1, ; : 1@ $8a 2, ; forth :var ad1 [0x8cd6] :var ad2 [0xd44b] : array ( -a) pop 2 2/s ; : bit ( n-n) 1 ? if 1 2/s $edb88320 or ; ] then 1 2/s ; : fill ( nn) for dup 8 for bit next , 1 + next drop ; : table ( -a) align array [ 0 256 fill ] : crc ( an-n) -1 swap for over 1@ over or $ff and [ table ] + @ swap 8 2/s or 1 u+ next invert nip ; : +adl ( n) $ff and [ ad1 ] @ + dup [ ad2 ] @ + : adl! [ ad2 ] ! [ ad1 ] ! ; : +mod [ ad1 ] @ 65521 mod [ ad2 ] @ 65521 mod adl! ; {block 43} {block 44} ( DOS file) : w/c [ 18 blks ] ; : buffer [ 604 block ] ; : size ( -a) [ buffer ] 0 1 reads [ buffer $98f + ] ; : set ( n) ! [ buffer ] 0 1 writes ; : cyls ( n-nn) 1 swap [ w/c -1 + ] + [ w/c ] / ; : put ( an) dup 2* 2* size set cyls writes /flop ; : raw ( an-) [ 15 ] swap 2* 2* [ w/c -1 + ] + [ w/c ] / writes /flop ; : get ( a) size @ 3 + 2/ 2/ cyls reads /flop ; : .com 0 63 blocks put ; {block 45} : w/c -n ( words per cylinder) : buffer -a ( 1 cylinder required for floppy dma) : size -a ( locate size of 2nd file. Floppy has first FILLER then FILE allocated. FILLER is 2048 bytes, to fill out cylinder 0. Names at most 8 letters, all caps. Directory starts at) [ buffer $980 + ] : set n ( size. FILE must be larger than your file.) : cyls n-nn ( starting cylinder 1 and number of cylinders) : raw an ( write raw data to cyl 15 , block 270) : put an ( write file from address) : get a ( read file to address) {block 46} ( North Bridge) empty macro ] : 4@ [compile] dup $ed 1, ; : 4! $ef 1, [compile] drop ; forth :var dev [0x800] : nb $0 [ dev ] ! ; : sb $3800 [ dev ] ! ; : agp $800 [ dev ] ! ; : ess $6800 [ dev ] ! ; : ric $7800 [ dev ] ! ; : win $8000 [ dev ] ! ; : ati $10000 [ dev ] ! ; : add $cf8 a! 4! $cfc a! ; : q $80000000 + add 4@ ; : en $8004 q -4 and xor 4! ; : dv dup $800 * q swap 1 + ; : regs [ dev ] @ [ 19 4 * ] + 20 for dup q h. space dup h. cr -4 + next drop ; : devs 0 33 for dup q dup 1 + drop if dup h. space drop dup 8 + q dup h. space over h. cr then drop $800 + next drop ; : ok show black screen text regs keyboard ; : ko show black screen text devs keyboard ; : u $40 [ dev ] +! ; : d -64 [ dev ] +! ; : test $ff00 + a! 4@ ; ok {block 47} ( Display the PCI interface chip registers) {block 48} [0x5849dc0b] [0x95b9bb83] [0x810bb544] [0xd1f74689] [0x12] < n+lit > [0xfc000001] [0x12] [0x696e6165] [0xfc000001] [0x12] [0x79636d73] [0xfc000001] [0x12] [0x7766676c] [0xfc000001] [0xd1f74e89] [0x12] [0x62707664] [0xfc000001] [0x12] [0x71757868] [0xfc000001] [0x12] < oootoro > [0xfc000001] [0x12] [0x37363534] [0xfc000001] [0xd1f75689] [0x12] [0x2d6a3938] [0xfc000001] [0x12] [0x2f7a2e6b] [0xfc000001] [0x12] [0x2b213a3b] [0xfc000001] [0x12] < o'nrat > [0xfc000001] [0xd1f75e89] [0x12] < e!lat > [0xfc000001] [0x96400003] [0xfffffe16] [0x56c00004] [0xccd89644] < k > [0x95b9bb81] [0xf6000004] [0xd3f00004] [0x1ff6] [0x56c00004] [0xf0000004] [0x77e72b03] [0x810bb544] [0xd1975689] [0x12] < nenotl > [0xfc000001] [0x12] [0x7271706f] [0xfc000001] [0x12] [0x2b2d6e6d] [0xfc000001] [0x12] [0x2725232e] [0xfc000001] [0xd1975e89] [0xd7ab4e89] [0x12] [0x1b1a1918] [0xfc000001] [0xdfbb6ec9] [0x12] [0x1f1e1d1c] [0xfc000001] [0xebd78f09] [0x12] < tsatete > [0xfc000001] [0x12] [0x2f6c6b6a] [0xfc000001] [0xd1976689] [0x9635f80b] [0x12] [0x3a43352c] [0xfc000001] [0xad93000b] [0x12] < o1;0s > [0xfc000001] [0xe9c9f20b] [0x12] [0x54523744] [0xfc000001] [0x368d000b] [0x12] [0x3336393c] [0xfc000001] [0xd1976e89] [0x80e7c40b] [0x12] [0x38314742] [0xfc000001] [0xbe1cc40b] [0x12] [0x3f414632] [0xfc000001] [0xebda794b] [0x12] [0x58563b45] [0xfc000001] [0x12] [0x75745973] [0xfc000001] [0xd1977689] [0x9635ea09] [0x12] [0xa130576] [0xfc000001] [0xad930009] [0x12] [0xd0e0410] [0xfc000001] [0xe9c9f209] [0x12] [0x24220714] [0xfc000001] [0x368d0009] [0x60c12198] [0xfc000001] [0xd1977e89] [0x80e7c409] [0x12] [0x8011712] [0xfc000001] [0xbe1cc409] [0x12] [0xf111602] [0xfc000001] [0xebda7949] [0x12] [0x77260b15] [0xfc000001] [0x12] [0x62617879] [0xfc000001] [0x96490003] [0xfffffc16] [0xf6000004] [0x77e72b01] [0xf6000004] [0xd3f00004] [0x1ff6] [0x56c00004] [0xf0000004] [0x28100003] [0xfa06] [0xc7439744] [0xc19b1004] [0x86] [0xfa000004] [0xffffffe6] [0xf6000004] [0xc16] [0xb1880004] [0x36] [0xf6000004] [0x1016] [0x70000004] [0x64aa9204] [0xf6000004] [0x3c282004] [0xd3e80004] [0x64ca4004] [0xc0278804] [0xc19a3884] [0xf0000004] [0xcf2c800c] [0x33] [0x10000003] [0x97390009] [0xcf2c8004] [0xf4000004] [0x416] [0xc16] [0xb1880004] [0x36] [0xf6000004] [0xc19b1004] [0x96490004] [0xcf2c8004] [0xf8000004] [0x64aa9204] [0xf6000004] [0xc0278804] [0xd0f60004] [0xc4788004] [0xc0278804] [0xf0000004] [0x2c88c004] [0x64ca4004] [0xff6] [0x56c00004] [0xf0000004] [0x76b18003] [0x246] [0xc7439744] [0xfffff806] [0x10] [0xf6000004] [0xc19a3884] [0xf0000004] {block 49} ( Convert colorforth chars to and from ASCII) : cf-ii ( conversion table) : ch ( convert colorforth character to ASCII) : ii-cf ( conversion table) : chc ( convert ASCII to colorforth) : tst ( create a table of ASCII characters) : r ( scan the ii-cf table to perform cf-ii . Used to cross-reference the two tables) : info ( display the CFDOS ASCII information in the last 256 bytes of block 17 . Type u to see more) : . ( note that dump takes a cell address) {block 50} ( App' RTC Real Time Clock) empt ] : bcd ( -c) rtc@ 16 /mod 10 * + ; : hms ( -n) lo 4 bcd 100 * 2 bcd + 100 * 0 bcd + ; : ymd ( -n) lo 9 bcd 100 * 8 bcd + 100 * 7 bcd + ; : day ( -c) lo 6 bcd ; : crlf ( Port Dump) : one ( n-n) dup rtc@ h. space dup . cr ; : lines ( sn-) for one -1 + next drop ; : ok show black screen text 15 16 lines cr ymd . hms . keyboard ; : h pad nul nul xx nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul [ $250000 , 0 , 0 , 0 , 0 , 0 , 0 , ok h {block 51} ( RTC Real Time Clock) : . ( displays the PC clock registers) : bcd bcd-n ( bcd to binary) : hms -n ( hours+mins+secs) : ymd -n ( year+month+day) : day -n ( day of the week) : rtc ( display the Real Time Clock registers) : one ( display one line) : lines ( display n lines starting at s) : ok ( display task) {block 52} ( LAN) empt $3f8 nload init ] : no block 4 * 1024 ; : send no for dup 1@ xmit 1 + next drop ; : receive no for rcv over 1! 1 + next drop ; : no 18 [ 7 18 * ] ; : backup no for dup send 1 + next drop ; : accept no for dup receive 1 + next drop ; {block 53} {block 54} ( Serial 3f8 2e8 1050) macro ] : 1@ $8a 2, ; : 1! [compile] a! $288 2, [compile] drop ; forth ] : r [ 0 + ] + ; : 9600 12 ; : 38400 3 ; : 115200 1 ; : b/s $83 [ 3 r ] p! $ 38400 [ 0 r ] p! 0 [ 1 r ] p! 3 [ 3 r ] p! ; : init b/s ( 16550) 1 [ 2 r ] p! 0 [ 4 r ] p! ; : xmit ( n) [ 5 r ] p@ $20 and drop if [ 0 r ] p! ; ] then pause xmit ; : cts [ 6 r ] p@ $30 and $30 xor drop if cts ; ] then xmit ; : st [ 6 r ] p@ : xbits $30 and $10 / dup 1 and 2* 2* + 2/ ; : st! [ 4 r ] p! ; : ?rcv [ 5 r ] p@ 1 and drop if [ 0 r ] p@ then ; : rcv ?rcv if ; ] then pause rcv ; lblk @ edit {block 55} : 1@ a-n ( fetch byte from byte address) : 1! na ( store byte to byte address) : r n-p ( convert relative to absolute port address. Base port on stack at compile time. Compiled as literal at yellow-green transition) : 9600 : 115200 ( baud-rate divisors. These are names, not numbers) : b/s ( set baud rate. Edit to change) : init ( initialize uart) : xmit n ( wait for ready and transmit byte) : cts n ( wait for clear-to-send then xmit) : st -n ( fetch status byte) : xbits n-n ( exchange status bits) : st! n ( store control byte) : ?rcv ( fetch byte if ready. Set flag to be tested by) if : rcv -n ( wait for ready and fetch byte) {block 56} ( App' Hexagon) empt :var col [0x404040] :var del [0x404040] : lin dup 2/ 2/ dup 2* line ; : hex [ xy ] @ 7 and over 2/ for lin 7 + next over for lin next swap 2/ for -7 + lin next drop ; : +del [ del ] @ nop : petal and [ col ] @ + $f8f8f8 and color 100 hex ; : -del [ del ] @ $f8f8f8 xor $80808 + ; : rose 0 +del -176 -200 +at $f80000 -del petal 352 -200 +at $f80000 +del -264 -349 +at $f800 -del petal 176 -200 +at $f8 +del -176 98 +at $f8 -del petal 176 -200 +at $f800 +del ; : ok show black screen 512 282 at rose text [ col ] @ h. space [ del ] @ $ff and h. keyboard ; nload ok h {block 57} ( Draws 7 hexagons. Colors differ along red, green and blue axes.) : col ( color of center hexagon) : del ( color difference) : lin n ( draws 1 horizontal line of a hexagon) : hex n ( draws top, center and bottom. Slope 7 x to 4 y is 1.750 compared to 1.732) : +del n ( increment color) : -del n : petal n ( draw colored hexagon) : rose ( draw 7 hexagons) : ok ( describe screen. Center color at top) {block 58} ( Pan) : in [ del ] @ 2* $404040 min [ del ] ! ; : out [ del ] @ 2/ $80808 max [ del ] ! ; : r $f80000 : +del [ del ] @ : +col and [ col ] @ + $f8f8f8 and [ col ] ! ; : g $f800 +del ; : b $f8 +del ; : -r $f80000 -del +col ; : -g $f800 -del +col ; : -b $f8 -del +col ; : nul ; : h pad nul nul xx nul -r -g -b nul r g b nul out nul nul in nul nul nul nul nul nul nul nul nul nul nul nul [ $250000 , $130d01 dup , , $2b000023 , 0 , 0 , 0 , {block 59} : in ( increment color difference) : out ( decrement it) : r : g : b ( increment center color) : -r : -g : -b ( decrement it) : +del ( redefine with ;) : +col ( change center color) : nul ( ignore) : h ( describe keypad) {block 60} ( App' Wood) empt :var x [0x77fb5aa] :var y [0xbd02c5b6] :var inc [0x7e710d] :var frame [0x2000000] :var dep [0x27] :var hole [0xfe20] : home 125810090 [ x ] ! -1123891786 [ y ] ! 8286477 [ inc ] ! vframe frame ! 36 dep ! 65056 hole ! ; macro ] : 2! [compile] a! $28966 3, [compile] drop ; : f* $2ef7 2, 26 [compile] shr $e2c1 2, 6 1, $c20b 2, [compile] nip ; : w! [compile] a! $28966 3, [compile] drop ; forth ] : wf+ [ frame ] @ 2! 2 [ frame ] +! ; : om negate $ff + ; : o5 om $3 shr $7e0 xor ; : o4 $fc and 3 shl $1f xor ; : o3 om $f8 and 8 shl $1f xor ; : o2 3 shr $f800 xor ; : o1 om $fc and 3 shl $f800 xor ; : o0 $f8 and 8 shl $7e0 xor ; : order jump o0 o1 o2 o3 o4 o5 o0 : hue 8 shl 26 / dup $ff and swap 8 shr order ; : vlen dup f* swap dup f* + ; : vdup over over ; : vndup push push vdup pop pop ; : itr over dup f* over dup f* negate + push f* 2* pop swap v+ over 2* + 2/ vndup + + ; : data ; 6 +load ok draw h {block 61} ( Display an imitation pine blockboard screen) : . ( This is based on a skewed Mandelbrot set with modified colors) {block 62} ( Timing) empt macro ] : out $e1e6 2, ; forth ] : tare time invert 1000 for next time + ; : tare+ time invert push 1000 for dup next c pop time + ; : test tare time + invert 1000 for out next time + ; ( next 3 loop 5.7 /next 2 /swap 25 swap 7.2) macro ] : c! $c88b 2, [compile] drop here ; : loop $49 1, $75 1, ( e2) here invert + 1, ; forth ] : try time invert 1000 c! loop time + ; {block 63} {block 64} ( App' Mandelbrot Set) empt :var x [0xf554718f] :var y [0x8000000] :var inc [0x5571d] :var dep [0x1a] :var frame [0x2000000] :var hole : home [ $10000000 767 / ] dup 1023 * 2/ negate [ x ] ! $8000000 [ y ] ! [ inc ] ! [ 26 ] dep ! ; macro ] : f* $2ef7 2, 26 [compile] shr $e2c1 2, 6 1, $c20b 2, [compile] nip ; : 2! [compile] a! $28966 3, [compile] drop ; forth ] : wf+ [ frame ] @ 2! 2 [ frame ] +! ; : hue 31416 * ; ] dup dup + dup dup + + + dup dup + dup dup + + + ; ] 3142 * ; ] @ ; : vlen dup f* swap dup f* + ; : vdup over over ; : vndup push push vdup pop pop ; : itr over dup f* over dup f* negate + push f* 2* pop swap v+ ; : x' ( c-) emit 108 emit ; : data text 0 0 at 21 x' x @ . 11 x' y @ . 7 x' inc @ . 6 x' dep @ . ; 2 +load ok draw ( PRINT) h {block 65} ( Display the Mandelbrot set with modified colors to update quickly) {block 66} ( Mandelbrot Set) : o $ 0 $ 0 dep @ 1 max for vndup itr vdup vlen $f0000000 + drop -if *next drop drop hole @ ; ] then drop drop pop hue ; : mh [ x ] @ swap 1024 for o wf+ [ inc ] @ u+ next nip ; : mv [ y ] @ 768 for mh [ inc ] @ negate + next drop ; : +d 2 dep +! : -d -1 dep +! dep @ 1 max dep ! : draw [ vframe ] frame ! mv data ; : ok c show keyboard ; : l [ inc ] @ 1023 8 */ negate [ x ] +! draw ; : u [ inc ] @ 767 8 */ [ y ] +! draw ; : d [ inc ] @ 767 8 */ negate [ y ] +! draw ; : r [ inc ] @ 1023 8 */ [ x ] +! draw ; : +z [ inc ] @ 3 max dup 1023 8 */ [ x ] +! dup 767 8 */ negate [ y ] +! 3 4 */ 3 max [ inc ] ! draw ; : -z [ inc ] @ 10000000 min dup 1023 8 */ negate [ x ] +! dup 767 8 */ [ y ] +! 4 3 */ [ inc ] ! draw ; : hh home draw ; : h pad nul nul xx nul -d nul nul +d l u d r -z hh nul +z nul nul nul nul nul nul nul nul nul nul nul nul [ $2500 , $2b000023 , $110160c , $2b001423 , 0 , 0 , 0 , {block 67} ( Convert colorforth chars to and from ASCII) {block 68} ( App' Sounds make a noise) :var tempo [0x14] :var mute :var period [0x70f] : tn ( ft-) tempo @ * swap [ 660 ] 50 */ : hz ( tf-) push 1000 1193 pop */ : osc ( tp-) dup period ! split $42 p! $42 p! : tone ( t-) mute @ 0 + drop if drop ; ] then $4f $61 p! ms $4d $61 p! 20 ms ; : click 1 90 osc ; : t 3 tn ; : q 8 tn ; : c 16 tn ; : 2tone 75 q 50 q ; : h1 50 c 54 q 50 q 45 c 60 c ; : h2 40 c 45 q 50 q 50 c 45 c ; : h3 54 c 60 q 54 q 50 c 45 q 40 q 50 t 45 t 50 t 45 t 45 12 tn 40 q 40 32 tn ; : hh : handel h1 h2 h3 ; : piano 55 7 for dup q 3 2 */ next drop ; : cetk 6 c 10 c 8 c 4 c 6 32 tn ; : bomb mute @ 0 + drop if ; ] then $4f $61 p! 500 for 1000 i invert + split $42 p! $42 p! 1 ms next $4d $61 p! 1 32 tn ; 2tone xx {block 69} ( Sounds ' using the PC internal speaker) : tempo ( in ms per 1/8 quaver) : mute ( equals -1 to disable sound) : period ( test only - value sent to hardware) : tn ( ft- play f Hz for t * 11 ms) : hz ( tf- play t ms at f Hz) : osc ( tp- play t ms of period p) : tone ( t- play the current tone for t ms) : click ( makes a click) : t ( triplet) : q ( quaver) : c ( crotchet) : 2tone ( 2 tones) : h1 : h2 : h3 : hh : handel ( part of Handels Gavotte) : piano : cetk ( Close Encounters of the Third Kind) : bomb ( - well sort of ....) {block 70} ( Relative load blocks) : nload r@ $100 / 2 + load ; : +load ( n-) r@ $100 / + load ; : blk ( -a) [ $a86 ] ; : ll blk @ load ; : myblk ( -n) blk @ 18 / dup 18 * block swap ; : ss myblk 1 writes /flop ; : uu myblk 1 reads /flop ; :var lblk [0xd4] : ld ( n-) dup lblk ! load ; : vv lblk @ edit ; : help lblk @ 1 + edit ; ( Real Time Clock) :var khz [0x124fa6] : rtc@ ( t-c) $70 p! $71 p@ ; : rtc! ( ct-) $70 p! $71 p! ; : hi 10 rtc@ $80 and drop 0if hi ; ] then ; : lo 10 rtc@ $80 and drop if lo ; ] then ; : cal hi lo time invert hi lo time + 500 + 1000 / khz ! ; : ms ( n-) khz @ * time + begin dup time invert + drop -if drop ; ] then end drop ; : secs ( n-) for pause lo hi next ; macro ] : swapb ( w-w) $e086 2, ; forth ] : split dup swapb $ff and swap $ff and ; : vframe [ $1e80000 ] ; {block 71} : nload ( loads the next source block ' b+2) : +load ( loads the source block ' b+n) : blk ( where the current blk happens to be kept) : ll ( load the current edit blk) : ss ( save the sector containing the current edit block to the floppy disc) : lblk ( holds the last block loaded by) : ld : vv ( edits the last block loaded by ld) : rtc@ reg-n ( fetch reg from rtc) : rtc! n reg- ( store in rtc register) : hi ( wait till Update In Progress bit is high) : lo ( wait till UIP bit is low) : cal ( calibrate the processor clock) : ms ( wait for n milliseconds) : secs ( wait for n seconds) : swapb ( swap the two low bytes) : split ( split the low two bytes) : vframe ( byte address of the video frame buffer) {block 72} ( Graphics demo) empt ( macros) 2 +load ( stack) 16 +load ] : utils 84 load ( copy) ; : circles 86 load ; : rand 90 load ( random) ; : lines 92 load ; : htm 102 load ( html) ; 6 +load {block 73} ( ^ A graphics extension package) : . ( Type) [ ok ( after loading this block) {block 74} ( added macros) macro ] : 1+ $40 1, ; : 1- $48 1, ; : @b $8a 2, ; : @w $8b66 3, ; : @l $8b 2, ; : !b [compile] a! $288 2, [compile] drop ; : !w [compile] a! $28966 3, [compile] drop ; : !l [compile] a! $289 2, [compile] drop ; forth ] : fill 24 for cr space 5 for rand32 h. space next next ; : matrix show black screen green fill keyboard ; {block 75} ( added macros) : 1+ ( increment tos) : 1- ( decrement tos) : @b ( fetch byte from absolute addr.) : @w ( fetch word from absolute addr.) : @l ( fetch long from absolute addr.) : !b ( store byte in absolute addr.) : !w ( store word in absolute addr.) : !l ( store long in absolute addr.) : matrix ( What is the Matrix?) : ver ( returns the address of the CFDOS version - use as) [ ver dump {block 76} {block 77} {block 78} ( new logo) : .co 1 3 $c $3 $a 5* ; : .fo $14 $2 $1 $3 $3e 5* ; : cf 27 dup at silver .co .fo 25 dup at red .co green .fo ; : log1 show black screen text cf keyboard ; : ckb black 0 740 at 1023 767 box 800 650 at 1023 740 box ; : grads 0 128 for i 2* 1- color dup 10 at 5 + dup 120 box next -400 + 128 for 257 i 2* negate + dup 256 * + color dup 10 at 5 + dup 100 box next drop ; circles lines ( areafill) 28 +load ( demos) 16 +load ] : lnes framed 20 for i 2* 40 + 250 584 $ff07 circle next filled 30 250 584 $f800 circle framed $ffff pen ! art 620 120 at 1020 300 frame 5 120 at 405 300 frame ; : ok black screen grads lnes text cf show dotty fillit ckb keyboard ; {block 79} ( New logo) : log1 ( a simple text demo) : ok ( the graphics demo) {block 80} {block 81} ( ASCII corrections to) : cf-ii ( and) : ii-cf ( regarding the decimals and the letters k j z) {block 82} {block 83} {block 84} ( Utils) : copy ( sf st) [ $e7c1f88b , $368b560a , $b90ae6c1 , $100 , $ad5ea5f3 , $c3ad 2, ] : rcopy ( sf sl st) push dup push swap negate + pop swap pop over + swap for over over copy push 1- pop 1- -next drop drop ; {block 85} ( Utils) : copy [ from to- ( copy from to block numbers. Unlike orig copy; no change to blk) : rcopy [ first last to- ( multiple block copy routine) {block 86} ( Circles) :var c-cd [0xfffffffc] :var c-ff [0x1] : point4 4096 * swap 4 * 2dup + 2/ negate [ bs ] @ + [ pen ] @ over !w over push + [ pen ] @ over !w + [ pen ] @ over !w pop negate + [ pen ] @ swap !w ; : opnts 2dup point4 2dup swap point4 ; : d? [ c-cd ] @ ?f drop -if ; ] then dup invert [ c-cd ] +! 1- 1 [ c-ff ] ! ; : cfl 1+ 1+ push [ pen ] @ swap pop 2/ for over over !w 1+ 1+ next drop drop ; : cfl4 4096 * swap 4 * 2dup + 2/ negate [ bs ] @ + swap 2dup cfl push + pop cfl ; : fvrt ?f drop if cfl4 0 [ c-ff ] ! ; ] then point4 ; : fpnts 2dup [ c-ff ] @ fvrt 2dup swap cfl4 ; : points opnts ; : pntst addr points opnts fpnts ; : framed pntst 1 select ; : filled pntst 2 select ; : circle 0 [ c-ff ] ! [ pen ] ! 1024 * + 2* [ vframe ] + [ bs ] ! 0 swap dup negate [ c-cd ] ! : crcl less if points 1 u+ over [ c-cd ] +! d? crcl ; ] then points drop drop ; {block 87} ( Circles) : point4 ( .. all other words are internal.) : points ( acts like a deferred word.) : pntst ( table of calls to different point routines. Select alters) points : framed ( set) circle ( to draw outlined circles.) : filled ( set) circle ( to draw filled circles.) : circle rxyc- ( draw circle with radius) r ( center) xy ( in color) c {block 88} ( Stack juggling + misc.) : addr pop ; : rot [ $8b045e8b , $46e892e , $c38b0689 , $c3 1, ] : -rot [ $8b045e8b , $446892e , $c58b1e89 , $c3 1, ] : tuck swap over ; : 2swap [ $87085e8b , $85e891e , $c3044687 , ] : 2over [ $89f8768d , $5e8b0446 , $8b1e8910 , $c30c46 3, ] : 2dup over over ; : v- push invert 1+ u+ pop invert 1+ + ; : vn push rot less if rot pop -rot ; ] then -rot pop ; :var pen [0xffff] :var bs [0x1ec9a42] : vloc 2048 * over + + [ vframe ] + ; : point [ pen ] @ swap !w ; : at? [ xy ] @ $10000 /mod swap ; : @r 1+ dup 4 u+ @l + ; : !r 1+ dup push negate -4 + + pop !l ; : select 5 * over + @r swap @r !r ; {block 89} ( Stack juggling words. small and fast.) : addr -a ( absolute address) : rot abc-bca ( stack pictures are best ..) : -rot abc-cab ( ..described with letters, in) : tuck ab-bab ( ..this case.) : 2swap abxy-xyab : 2over abxy-abxyab : 2dup ab-abab : v- v1v2 - v1-v2 ( vector subtract.) : vn vv-vv ( sort vectors so x1 is less x2) : vframe -addr ( address of screen.) : pen -addr ( current color.) : bs -addr ( base for elements) : vloc xy-a ( convert xy into addr.) : point xy- ( set point at xy to current pen.) : at? -xy ( return current screen location.) : @r a-a ( get absolute addr from jump/call) : !r aa- ( set jump/call to absolute addr.) : select an- ( select call n from table a. Store it in table call 0) {block 90} ( random) :var rsav [0x10692733] :var rseed [0xe09a0e87] : rand time [ rsav ] ! $e09a0e87 rseed ! ; : ror [ $d3adc88b , $c3c8 2, ] : random push [ rseed ] @ 0 32 for 2* swap 2* swap -if [ rsav ] @ xor then next nip 15 ror dup [ rsav ] ! abs pop mod ; rand {block 91} ( random) : rand - ( set random variables) : ror nm-n ( rotate n m times right) : random n-0..n-1 ( return a random number range 0..n-1 limited to a 16 bit number.) {block 92} ( lines) :var ax [0xfffffe98] :var ay :var sx [0x800] :var sy [0x2] :var lbase [0x1ebc00a] macro ] : lp $8b02e2c1 , $c88bade8 , $205a8bad , $232b8966 , $30578c0 , $185a0302 , $3084203 , $ece2105a , ; forth ] : !base 2048 * over + + [ vframe ] + [ lbase ] ! ; : bline abs 2* dup [ ay ] ! over 2* negate [ ax ] ! over negate + swap 1+ pen @ [ ax ] a! lp drop ; : ?xd 2over 2over v- abs swap abs swap less drop drop -1 if 1+ then ?f drop ; : !sy push ?f pop -if negate then [ sy ] ! bline ; : xdom 2swap !base 2 [ sx ] ! 2048 !sy ; : ydom swap 2swap swap !base swap 2048 [ sx ] ! 2 !sy ; : aline ?xd if vn 2over v- xdom ; ] then push push swap pop pop swap vn 2over v- ydom ; : line at? 2over aline at ; : frame at? 2over drop over line 2over line 2swap push drop over pop line line ; {block 93} ( line drawing Do Not Mess With Variables. They are indexed by lp.) : lp ( macro inner loop for speed. Draws point and moves location.) : !base x y -- ( set base address) : bline dx dy -- ( draw a line using bresenham x dominant) : ?xd v1 v2 -- v1 v2 ( set flag if line is x-dominant) : !sy dy n -- dy ( store n in sy set sign to match sign of dy) : xdom x y dx dy ( draw an x-dominant line) : ydom x y dx dy ( draw a y-dominant line) : aline v1 v2 ( draw any straight line) : line x y ( draw line from current at to xy. Moves at to given xy.) : frame xy- ( trace outline of rectangle with corners at and xy. Pen position is not altered.) {block 94} ( demos) : xlate 384 + 512 u+ ; : xat xlate at ; : xline xlate line ; : 4lines over 0 xat 0 over xline over invert 1+ 0 xline invert 1+ 0 swap xline 0 xline ; : art 70 for 71 i invert 1+ + 5 * i 5 * 4lines next ; rand ] : radius [ 8 ] ; : lrc push dup dup + negate pop + random + ; : shade 2over 1+ 1+ 2over drop 1+ 1+ 1+ 0 circle circle ; : dotty filled 100 for [ radius ] random dup [ 397 ] lrc [ 621 ] + over [ 176 ] lrc [ 121 ] + $ffff random shade next ; : blbx black 6 121 at 404 299 box ; :var xyzz [0xffffff53] : fillit -1 [ xyzz ] +! [ xyzz ] @ 200 + drop -if blbx $ 0 [ xyzz ] ! then framed 3 for 8 random 2 + dup [ 398 ] lrc [ 6 ] + over [ 178 ] lrc [ 121 ] + $ffff circle next 6 210 $fff0 random afill ; {block 95} {block 96} ( html0) 80 load :var h-dd [0x21e827] :var ppt macro ] : 2/s ?lit $e8c1 2, 1, ; forth ] : temit [ h-dd ] @ !b 1 [ h-dd ] +! ; : tspc $20 temit ; : .dc ?f 1 -if - then swap abs : dcl 10 /mod swap $30 + push ?f 0if drop ?f drop -if $2d temit then pop temit ; ] then dcl pop temit nop ; : .hx $39 over 15 and $30 + less nip if $27 + then push 4 2/s 0if drop pop temit ; ] then .hx pop temit nop ; : strt dup @b $ff and if temit 1+ strt ; ] then drop drop ; : str' pop strt ; : header str' [ $6d74683c , $3c0a3e6c , $6b6e696c , $6c657220 , $7974733d , $6873656c , $20746565 , $65707974 , $6574223d , $632f7478 , $20227373 , $66657268 , $3d 1, $6c6f6322 , $6f66726f , $2e687472 , $22737363 , $703c0a3e , $a3e 3, ] : trailer str' [ $74682f3c , $a3e6c6d , $0 1, {block 97} ( html0. Block 80 has ascii conversion tables.) : h-dd ( data destination.) ppt ( pre- parsed type.) : 2/s ( macro, right shift by n.) : temit c- ( emit char to target.) : tspc ( emit space) : .dc n- ( signed decimal print. Recursive!) : dcl ( dec print loop.) : .hx n- ( unsigned hex print. Also recursive. Both routines have no leading zeroes.) : strt a- ( Print bytes from address until first null byte.) : str' ( Output what follows up to null byte.) : header ( Lay down html header to display blocks. The header is very minimal. It expects colorforth.css in the same directory.) : trailer ( Closing html stuff.) {block 98} ( html1) : .code 1- drop -if ; ] then str' [ $6f632f3c , $3e6564 , ] : .all str' [ $646f633c , $6c632065 , $3d737361 , $0 1, ] : same? [ ppt ] @ over [ ppt ] ! swap over - 1+ + drop ; : comn same? 0if drop tspc pop drop ; ] then .code .all ; : .def str' [ $3e666564 , $20 2, ] : .com 2 comn str' [ $3e6d6f63 , $20 2, ] : .chx 3 comn str' [ $3e786863 , $20 2, ] : .exe 4 comn str' [ $3e657865 , $20 2, ] : .xhx 5 comn str' [ $3e786878 , $20 2, ] : .cpm 6 comn str' [ $3e6d7063 , $20 2, ] : .var 7 comn str' [ $3e726176 , $20 2, ] : .txt 8 comn str' [ $3e747874 , $20 2, ] : .txc 9 comn str' [ $3e637874 , $20 2, ] : .tac 10 comn str' [ $3e636174 , $20 2, {block 99} ( html1) : .code n- ( output /code in brackets if n is larger then 0.) : .all ( common part to start a new code tag.) : same? n-o ( set ppt to the new type. Return the old type with flags set from comparison.) : comn n- ( if this is a new tag, close prev tag and print common part. If not' print space AND EXIT CALLER) : .def ( Each of these words correspond to a) : .com ( .. code tag as defined in colorforth.css) : .chx ( .. The numbers are positional, and bare) : .exe ( .. no correspondence to the pre parsed) : .xhx ( .. types. They will output if a change) : .cpm ( .. in tag is required. Comn will exit) : .var ( .. by doing a pop-drop if the tag is the) : .txt ( .. same.) : .txc : .tac {block 100} ( html2) : .str ch if temit .str ; ] then drop drop ; : bs1 0 [ ppt ] ! str' [ $3e72683c , $6c627b0a , $206b636f , $0 1, ] : bs2 str' [ $643c0a7d , $63207669 , $7373616c , $786f623d , $a3e 3, ] : bend ppt @ .code str' [ $69642f3c , $a3e76 , ] : .br 1- drop -if ; ] then str' [ $3e72623c , $a 2, ] : pp0 .str ; : pp1 .exe .str ; : pp3 [ ppt ] @ dup .code .br 1 [ ppt ] ! .all .def .str ; : pp4 .com .str ; : pp7 .cpm .str ; : pp9 .txt .str ; : ppa .txc .str ; : ppb .tac .str ; : ppc .var .str 1+ dup @ .com .dc ; {block 101} ( html2) : .str n- ( Unpack n and print as ascii.) : bs1 ( clear the type and print html stuff for the start of a block.) : bs2 ( second half of block header.) : bend ( Block end html stuff.) : .br n- ( Html line break, if n larger then 0) : pp0 ( The preparsed words in a block are) : pp1 ( .. printed by the ppn words. Eg pp0 is) : pp3 ( .. word continuation pp1 is for executed) : pp4 ( .. words, etc. They unpack and print.) : pp7 ( .. They also print html tags.) : pp9 : ppa : ppb : ppc {block 102} ( html3) 96 load 98 load 100 load ] : dbn push 1+ dup @ pop ?f drop ; : sln dup 2/ 2/ 2/ 2/ 2/ swap 16 and drop ; : xnb if .xhx .hx ; ] then .exe .dc ; : cnb if .chx .hx ; ] then .com .dc ; : pp2 dbn xnb ; : pp5 dbn cnb ; : pp6 sln cnb ; : pp8 sln xnb ; : ppdo jump pp0 pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9 ppa ppb ppc ; : index dup 15 and dup push or pop ; : dblk dup bs1 .dc bs2 block begin dup @ ?f 0if drop drop bend ; ] then index ppdo 1+ end : hbuf 2000 block ; : html hbuf 4 * [ h-dd ] ! header swap over for over i - 1+ + over + dblk next drop drop trailer hbuf [ h-dd ] @ 3 + 4 / over - 1+ + 3 for tspc next ; {block 103} ( html3) : dbn an-an ( Fetch next word. Set hex flag.) : sln n-n ( Make full word and set hex flag.) : xnb n- ( print n as hex/dec executed number.) : cnb n- ( print n as hex/dec compiled number.) : pp2 an-a ( ^ A double executed number.) : pp5 an-a ( ^ A double compiled number.) : pp6 n- ( ^ A single compiled number.) : pp8 n- ( ^ A single executed number.) : ppdo ( Table of words. The index is the pre- parsed type type.) : index n-ni ( extract index from n.) : dblk b- ( print block b in html.) : hbuf -a ( start of buffer.) : html bn-al ( Output n blocks starting with block b in html. Leaves addr and length on the stack, so it can be saved using) [ file put ( on a floppy.) {block 104} ( simpler and slower bresenham line drawing. For reference.) :var ax [0xfffffe98] :var ay :var sy [0x2] :var sw : bpoint push 2dup sw @ ?f drop if swap then point pop ; : bline abs 2* dup ay ! over 2* negate ax ! over negate + swap 1+ for bpoint ?f +if sy @ u+ ax @ + then ay @ + push 1 u+ pop next drop drop drop ; : ?xd 2over 2over v- abs swap abs swap less drop drop -1 if 1+ then ?f drop ; : !sy push ?f pop -if negate then sy ! bline ; : xdom 0 sw ! 1 !sy ; : ydom 1 sw ! 1 !sy ; : aline ?xd if vn 2over v- xdom ; ] then push push swap pop pop swap vn 2over v- ydom ; {block 105} {block 106} ( area filling) 108 2 +load :var tfc [0x3753] :var fc [0x2dd3] : pset dup dup @w $ffff and tfc @ negate + drop if drop $ 0 ; ] then fc @ swap !w $ 0 1+ ; : bcup dup 2047 and 2- begin -if drop ; ] then push 2- pset drop pop if 2- *end then drop 2+ ; : ispan pset if ; ] then push enstak pop ; : xgr dup negate 3 pick + drop ; : nispan ( dlrlx) xgr -if 5drop pop pop pop drop drop drop ; ] then pset if push nip dup pop then ; : dosp ( dlrlx) jump nispan ispan ( dlrlxi) ; : sha2 over rtre begin ( dlrlxic) -if drop ; ] then push dosp 2 u+ pop 2- end : sha1 ( dlr) over pset over ( dlrxil) if bcup ( dlrxil) then swap push swap 2+ pop ( dlrlxi) sha2 ?f drop if enstak then 5drop ; : sha begin fst? if fpop sha1 *end then ; : fsln dup bcup swap dup rtre begin -if drop ; ] then push pset drop if 2+ pop 2- *end then pop drop 2- ; : afill fstini fc ! vloc dup @w $ffff and tfc ! fsln over over -2048 u+ -2048 + -2048 -rot fpsh 2048 u+ 2048 + 2048 -rot fpsh sha ; {block 107} ( area filling) : pset a-0/1 ( set pixel at a, if pixel equals tfc. Return 0 if not, 1 if pixel was set.) : bcup a-a ( adjust a until left edge is found. Limited to screen edge.) : ispan ( stack if the right edge is found.) : xgr ( Set neg flag if x is greater then parent-r) : nispan ( exit if beyond right edge of span, else start a new span.) : dosp dlrlx - dlrlxi ( jump table.) : sha2 ( let x go over each pixel and set it or start/end new spans.) : sha1 ( starting at left edge, find the new left edge and init x to next pixel. stack if run into right screen edge while in span.) : sha ( pop the next span and color it.) : fsln a-lr ( Starting at screen address a, find the left edge and right edge of the seed line. Color it in the process.) : afill xyc ( starting with screen location xy, and color c, fill the color found there with c until the color found changes.) {block 108} ( fillstack) :var fstak [0x56db1] :var fstakn : fstini here 2/ 2/ 1024 + [ fstak ] ! $ 0 fstakn ! ; : fpop [ fstak ] @ 3 for dup @ swap 1- next [ fstak ] ! -3 [ fstakn ] +! ; : fpsh 3 for 1 [ fstak ] +! [ fstak ] @ ! next 3 [ fstakn ] +! ; : fst? [ fstakn ] @ ?f drop ; fstini macro ] : pick $86048b 3, ; : 2- [compile] 1- [compile] 1- ; : 2+ [compile] 1+ [compile] 1+ ; forth ] : 5drop drop drop drop drop drop ; : rtre 2047 and negate 2048 + ; : enstak ( dlrlr - dlrlr) 2- 4 pick dup 3 pick + over 3 pick + fpsh over 4 pick negate + 2+ drop -if 4 pick negate dup 3 pick + over 6 pick 2- + fpsh then 2 pick over negate + drop -if 4 pick negate dup 4 pick 2+ + over 3 pick + fpsh then 2+ ; {block 109} ( fillstack' stack of spans to fill.) : fstini ( initialize) : fpop ( pop the next element from the stack) : fpsh ( push element on the stack) : fst? ( set 0 flag if emtpy.) : pick ( copy n from the stack.) : 2- ( screen pixels are 2 bytes.) : 2+ : 5drop ( unload forth stack.) : rtre a-n ( return remaining to right screen edge.) : enstak dlrlr-dlrlr ( push a span or element onto the stack. Also push a left hand direction reversal and a right hand reversal if needed.) {block 110} {block 111} {block 112} {block 113} {block 114} {block 115} {block 116} ( Spy) empt $3f8 54 load init ] : ry [ 5 r ] p@ ; nload init ] : buffer [ 2000 block ] ; 2000 1 erase :var buf 0 buf ! ] : b! swap $ff and + [ buf ] @ [ buffer ] + ! 1 [ buf ] +! ; : dev r2 if dup xmit $100 b! dev ; ] then ; : pc ?rcv if dup x2 $ 0 b! pc ; ] then ; : relay s2 st s2! st! dev pc ; : .1 $f and digit ; : .byte dup $10 / .1 .1 ; : traffic text [ buffer ] buf @ 1 max 400 min for dup @ green $100 ? if red then .byte 1 + next drop ; : ok show black screen relay traffic keyboard ; : k show black screen relay keyboard ; : q 6000 for relay next ; : test st! st ; 84 load {block 117} {block 118} ( Serial 2) : r $2f8 + ; : b/s $83 [ 3 r ] p! $ 9600 [ 0 r ] p! 0 [ 1 r ] p! 3 [ 3 r ] p! ; : init b/s ( 16550) 1 [ 2 r ] p! 0 [ 4 r ] p! ; : x2 [ 5 r ] p@ $20 and drop if [ 0 r ] p! ; ] then x2 ; : c2 [ 6 r ] p@ $30 and $30 or drop if c2 ; ] then x2 ; : s2 [ 6 r ] p@ xbits ; : s2! [ 4 r ] p! ; : r2 [ 5 r ] p@ 1 and drop if [ 0 r ] p@ ; ] then ; {block 119} {block 120} ( Dynapulse 200m) : send pop swap for dup 1@ x2 1 + next drop ; : reset 2 send [ $2323 , ] : 1st 12 send [ $37269a12 , $39027afd , $23c75680 , {block 121} {block 122} [0x857bf] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x85888] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857ab] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857b4] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x857aa] [0x108e00] [0x8838a] [0x108e00] [0x8838a] [0x108e00] [0x8838a] [0x108e00] [0x8838a] [0x108e00] [0x8838a] [0x108e00] [0x8838a] [0x108e00] {block 123} ( This block is used by the next block as the interrupt vector table.) {block 124} ( Interrupts) : idt [ 122 block ] ; macro ] : 1ld ( n) ?lit $b9 1, , ; : p! ( na) [compile] a! $ee 1, [compile] drop ; : lidt ( b) $18010f 3, [compile] drop ; : 2push $5250 2, ; : 2pop $585a 2, ; : forth' [compile] 2push $be5651 3, [ idt $100 + [compile] a, ] ; : ;forth $595e 2, [compile] 2pop ; : clear $20e620b0 , ; : 8clear $a0e620b0 , $20e6 2, ; : i; $cf 1, ; forth ] : !idt ( a) lidt ; here $3b7 2, idt 2* 2* , !idt ] : interrupt ( n) 2* [ idt ] + here $ffff and $80000 + over ! here $ffff0000 and $8e00 + swap 1 + ! ; : fill ( an) for dup interrupt 1 + next drop ; $0 $70 fill ] : ignore i; [ $20 $8 fill ] : ignore 2push clear 2pop i; [ $28 $8 fill ] : ignore 2push 8clear 2pop i; [ $0 interrupt ] : 0div $7fffffff 1ld i; {block 125} : idt -a ( table of 2-word interrupts. Edit convenient block number) : 1ld n ( load register 1 with literal) : lidt ( load interrupt descriptor table from byte address on stack) : 2push ( save registers 0 and 2) : 2pop ( restore 2 and 0) : forth' ( save registers used by Forth) : ;forth ( restore registers used by Forth) : clear ( store 20 to port 20 to clear irq 0-7) : 8clear ( also 20 to port a0 to clear irq 8-f) : i; ( return from interrupt - restore flags) : !idt b ( execute lidt) : interrupt n ( construct interrupt to) here. ( Avoid yellow-green literal with red comment) : fill an ( n entries in default interrupt table) : ignore ( clear the interrupt. Doesnt clear the device) : 0div ( make divisor +infinity, quotient 0) {block 126} ( Admtek Comet An983b) macro ] : align here 7 and 3 xor drop if [compile] nop [compile] align ; ] then ; forth ] : array pop 2/ 2/ ; : us ( n) [ khz @ 1000 3 * / ] * for next ; : r ( n-a) $db000000 + 2/ 2/ ; : rom ( a-n) $a4 + r @ ; : 3rom ( nnn) 4 rom 0 rom dup 16 for 2/ next swap ; : reset 1 [ $0 r ] ! 1000 us ; : frag 0 , $2000000 , $0 , here 4 + , ; : tx align array [ frag frag frag frag frag frag ] : n [ tx 1 + ] ; : a [ tx 2 + ] ; :var f [0x10] : fr! [ f ] @ + ! ; : first ( an) 0 [ f ] ! $20000000 or : send ( an) $1000000 or [ n ] fr! [ a ] fr! $80000000 [ tx ] fr! 4 [ f ] +! ; : last ( an) $42000000 or send 1 us : poll -1 [ $8 r ] ! ; {block 127} : array -a ( returns word-aligned address in dictionary) : us n ( delay n microseconds. Edit cpu clock rate) : r n-a ( word address of register. Edit base address from) north ( PCI device configuration) : rom a-n ( fetch 2 bytes of ethernet id) : 3rom -nnn ( 3 byte-pairs of id.) : reset ( controller) : tx -a ( transmit descriptor ring) : n -a ( fragment length/control) : a -a ( fragment address) : send an ( fragment into descriptor queue) : first an ( fragment.) : last an ( fragment. Start transmission) {block 128} ( Receive) :var rxp [0x44d18] : rx align array [ $80000000 , $1000600 , $2000 block 4 * dup , here 4 + , $80000000 , $1000600 , $600 + , rx 4 * , ] : init reset [ rx 2 * ] 2* [ $18 r ( receive) ] ! 1 us [ tx 2 * ] 2* [ $20 r ( transmit) ] ! 1 us $202002 ( start) [ $30 r ] ! 1 us $10040 [ $38 r ] ! sti -1 [ $28 r ] ! ; : link 3 + @ 2/ 2/ ; : own? @ 0 or drop ; : /int [ rxp ] @ $80000000 over ! link own? -if -1 [ $28 r ] ! then ; : rcvd [ rx ] nop : wait dup own? -if link wait ; ] then dup [ rxp ] ! 2 + @ ; : reg dup r @ h. space 2 h.n cr ; : regs $b8 reg $a0 reg $98 reg $94 reg $78 reg $60 reg $48 10 for dup reg -8 + next drop ; : ok show red screen text regs keyboard ; : rx1 $2000 block dump ; : rx2 $2000 block $180 + dump ; ok {block 129} : rx -b ( receive descriptor ring) : init ( ialize controller. Set tx/rx address/on and perfect match) : link a-b ( next link in descriptor ring) : own? a ( is this descriptor owned?) : /int ( give up ownership of received packet , clear interrupt if no packet remains) : rcvd -a ( return address of recieved packet) : wait -b ( till packet received) : reg a ( display register and address) : regs ( display interesting registers) : ok ( diagnostic display) {block 130} ( Ethernet) empty 124 load ] : empty empt logo cli ; macro ] : w $66 1, ; : w@ $8b 2, ; : w! $289 2, [compile] drop ; : *byte $c486 2, ; forth 126 load 128 load ] : n@ w w@ $ffff and *byte ; : 2! a! w w! ; : n! a! *byte w w! ; : n, *byte 2, ; : string pop ; : packet string [ -1 dup , 2, 3rom 2, 2, 2, 0 n, ] : length ( n) [ packet 12 + ] n! ; : broadcast -1 dup dup [ packet ] nop : 3! swap over 2! 2 + swap over 2! 2 + 2! ; : ethernet ( n) length [ packet ] 14 first ; : +ethernet ( -a) rcvd 14 + ; 132 load 134 load 136 load 138 load 140 load 142 load 146 load $2a interrupt ] : serve forth' receive /int 8clear ;forth i; [ init ok discover {block 131} : empty ( redefined to disable interrupts) : w ( 16-bit prefix) : w@ b-n ( fetch 16-bits from byte address) : w! nb ( store 16-bits) : *byte n-n ( swap bytes 0 and 1) : n@ b-n ( fetch 16-bit network-ordered number) : 2! nb ( store 16-bit number) : n! nb ( store 16-bit number in network order) : n, n ( compile 16-bit number in network order) : string -b ( returns byte address) : packet -b ( ethernet packet header) : dest -b ( destination field in packet) : src -b ( source field) : length n ( store length into packet) : 3! nnnb ( store 3-word MAC) : ethernet n ( send header with type/length) : @ethernet -b ( return payload address of received packet) {block 132} ( ARP for a single correspondent) macro ] : move ( sdn) $c189 2, [compile] drop $c78957 3, [compile] drop $c68956 3, $a4f3 2, $5f5e 2, [compile] drop ; forth ] : . ( n) 1, ; : message string [ $1 n, $800 n, $6 . $4 . $1 n, ] : me [ 3rom 2, 2, 2, ( IP) 0 . 0 . 0 . 0 . ] : to [ 0 0 0 2, 2, 2, ( IP) 0 . 0 . 0 . 0 . ] : sender 8 + ; : target 18 + ; : dir 6 + ; : ip 6 + w@ ; : ar ( n) [ message dir ] n! $806 ( ARP) ethernet [ message ] 28 last ; : arp cli broadcast 1 ar sti ; : -arp ( b-b) dup -2 + n@ $806 or drop if ; ] then pop drop : me? dup target ip [ message sender ] ip or drop if ; ] then dup sender [ packet ] 6 move : query? dup dir n@ 1 or drop if ; ] then sender [ message target ] 10 move 2 ar ; {block 133} ( Set ip addresses with Edit. Normal order, net bytes first) : move sdn ( move n bytes from source to destination. Register 1 is used, 6 and 7 are saved) : . n ( compile byte. Resembles URL punctuation) : message -b ( 28-byte string) : me ( comment marking my mac/ip address) : to ( comment marking correspondent) : sender : target : dir -b ( fields in either) message ( or received message) : ip b-n ( fetch ip address) : ar n ( send query 1, or reply 2) : arp ( broadcast query) : -arp b-b ( return if not ARP. Otherwise process and skip out.) : me? b ( return if broadcast not for me. Save sender only in packet) : query? b ( if a request, reply) {block 134} ( ipv4) : header align string [ $4500 n, 0 n, 1 n, 0 n, $ff11 n, 0 n, 0 , 0 , ] : length ( n) [ header 2 + ] n! ; : +id [ header 4 + ] dup n@ 1 + swap n! ; : -sum for dup n@ u+ 2 + next drop dup $10000 / + invert ; : sum [ header 10 + ] n! ; : checksum $ 0 sum 0 [ header ] 10 -sum sum ; : source [ header 12 + ] ; : destination [ header 16 + ] ; : ip ( n-n) dup 20 + $800 ethernet length +id checksum [ header ] 20 send ; : +ip dup -2 + n@ $800 or drop if pop ; ] then 20 + ; {block 135} ( Set ip addresses with Edit. Normal order, net bytes first) : header -a ( 40-byte ipv6 header) : length n ( store 2-byte length in header) : dest -a ( 4-byte destination ip address) : src -a ( source ip) : ip n ( send ip header embedded in ethernet packet) : +ip b-b ( skip out if not IP. Otherwise return payload address) {block 136} ( UDP) : xid [ 3rom + + ] ; : b@ ( b-n) w@ $ff and ; : header string [ xid n, 0 n, 8 n, 0 n, 0 n, ] : length ( n) 8 + [ header 4 + ] n! ; : port [ header 2 + ] n! ; : from? over -8 + n@ or drop ; : udp ( n) dup 8 + ip length ; : +udp ( b-b) dup -11 + b@ 17 or drop if pop ; ] then 8 + ; {block 137} : b@ b-n ( fetch byte) : header -a ( 8-byte udp header) : length n ( store length in header) : port p ( set destination port) : from? ap ( udp packet from port) p ( ?) : udp n ( send ip header for n-byte packet) : +udp b-b ( skip out if not UDP. Otherwise return payload address) {block 138} ( DNS resolver) :var server [0xcf42a44] :var host [0x63a7e940] : msg string [ 0 , 1 n, 0 2, 0 , 1 n, 1 n, ] : ptr? dup n@ $c000 and $c000 or drop ; : skip ptr? if dup b@ if + 1 + skip ; ] then drop 1 + ; ] then 2 + ; : length dup negate swap skip + ; : 4! a! w! ; : query [ server ] @ [ destination ] 4! 53 port dup length dup 16 + udp drop [ header ] 8 send [ msg ] 12 send send [ msg 12 + ] 4 last ; : answer dup 12 + skip 4 + swap 6 + n@ ; : resolve ( a-h) 0 [ host ] ! query : wait [ host ] @ 0 or if ; ] then drop wait ; : rr+ 8 + dup n@ + 2 + ; : -dns 53 from? if ; ] then pop drop answer : rr -1 + -if -1 [ host ] ! ; ] then swap skip dup n@ 1 or drop if rr+ swap rr ; ] then : address 10 + dup w@ [ host ] ! ; {block 139} ( Assumtions) : 1 ( a response contains one entry in the question section) : 2 ( the first address in the answer section, if any, sufficiently resolves the query) : server ( name server) : host ( the resolved IP address) : skip a-b ( skip past a domain field) : length a-n ( length of a domain in bytes) : query a- ( send DNS query to the DNS server) : answer a-bn ( give the answer section and the number of resource records) : resolve a-h ( resolve domain name to host address) : wait -h ( wait for a response from the server) : rr+ a-b ( skip a resource record) : -dns ( dns packet recieved , search for address) : rr a-b ( process resource record) : address a-b ( set the host address) {block 140} ( Domain names) 48 load macro ] : 1! [compile] a! $288 2, [compile] drop ; : interp [compile] /dup $f889 2, ; forth ] : word ch if 1, 1 u+ word ; ] then drop drop ; : . here 0 1, interp 0 over @ -16 and word 1 u+ : words over @ $f ? if drop nip swap 1! ; ] then word 1 u+ words ; : end 0 1, ; : cf string [ . ( www) . ( colorforth) . ( com) end ] : google string [ . ( www) . ( google) . ( com) end ] : none string [ . ( none) end {block 141} : 1! xa- ( write byte at byte address) : interp -a ( word address of next word to be interpreted) : word w- ( compile packed word as ASCII characters) : . ( compile counted ASCII string) : words an- ( compile extentions words as ASCII) : end ( of domain) : none ( test of a non-existant domain) {block 142} ( DHCP client) : fill for 0 , next ; : msg align string [ $60101 , xid , 5 fill 3rom 2, 2, 2, 0 2, 50 fill $6382 n, $5363 n, $10135 3, $6030237 , 12 1, . ( colorforth) $ff 2, 0 , $3204 n, 0 , $ff 1, ] : eq over over or drop ; : skip over 1 + b@ 2 + u+ ; : find over b@ if eq if $ff or if drop skip find ; ] then then drop drop 2 + ; ] then drop 1 u+ find ; : your 16 + w@ ; : ack dup 6 find w@ [ server ] ! 3 find w@ [ message target 6 + ] 4! your dup [ source ] 4! [ message sender 6 + ] 4! 1 ar ; : -dhcp 67 from? if ; ] then dup 4 + w@ [ xid ] or drop if ; ] then dup 240 + dup 53 find w@ : type 2 or if 7 or drop if ack then drop ; ] then drop : offer 54 find w@ [ msg 261 + ] 4! your [ msg 267 + ] 4! : request 272 $3604 $103 [ msg 241 + ] n! : bootp [ msg 259 + ] n! broadcast -1 [ destination ] 4! 67 port udp [ header ] 8 send [ msg ] swap last ; : discover 260 $ff00 bootp ; {block 143} : xid -v ( a unique identifier used in all DHCP correspondence with this client) : fill n ( fill) n ( words) : msg ( the DHCP message , both discover and request are contained , discover is ends at) [ $ff 2, ] : eq xy-xy ( test equality) : skip at-bt ( skip DHCP option) : find at-b ( find option of type) t ( in option list) : your a-h ( IP address) : ack ao ( server acknowledge , assign your IP , router IP , and DNS server IP) : -dhcp a ( receive DHCP packet with) xid : type aot ( recieve offer) $ 2 ( or ack) $ 5 : offer ao ( recieved an offer , send a request) : request ( request the offered parameters) : bootp nt ( send a discover or request message) : discover ( broadcast a discover message) {block 144} ( ICMP) : header string [ $800 n, $0 n, $0 , ] : icmp dup -34 + b@ 1 or drop if ; ] then ; : ping 8 ip [ header ] 8 last ; {block 145} ( Client can get or put blocks to server) : payload n-bn ( 2 bytes were appended to UDP header for block number) : +put nn ( send block number. Append block as last fragment. Packet length distinguishes two messages) : it b ( move 1024 bytes from packet to offset block) : -got b-b ( if a 2-byte message, return. Otherwise move block to archive - 300+ - and skip out) : receive ( check and decode received packet.) +test ( returns if true,) -test ( returns if false. Otherwise they) pop ( - skip-out - return from) receive. ( Resulting stack need not be empty, since) /forth ( will restore pre-interrupt stack.) pop ( must be in a word called by) receive, ( it cant be nested) : +get b ( send requested block from archive) : get n ( send block number to request. Interrupt disabled lest reply interfer) : put n ( send block) : archive ( send blocks 0-161 - 9 cylinders) icmp dhcp {block 146} ( Blocks to/from server) : payload ( n-bn) [ header 8 + ] n! [ header ] 10 ; : +put ( nn) 1026 udp over payload send + block 2* 2* 1024 last ; : it ( b) dup 2 + swap n@ 300 + block 2* 2* 1024 move ; : -got ( b-b) dup -4 + n@ [ 2 8 + ] or drop if it pop ; ] then ; : receive +ethernet -arp +ip +udp -dns -dhcp -got : +get ( b) n@ 300 +put ; : ... ( interrupt-protect words that transmit) : get ( n) cli 2 udp payload last sti ; : put ( n) cli 0 +put sti ; : archive 161 for i put 1000 us -next ; {block 147} ( Client can get or put blocks to server) : payload n-bn ( 2 bytes were appended to UDP header for block number) : +put nn ( send block number. Append block as last fragment. Packet length distinguishes two messages) : it b ( move 1024 bytes from packet to offset block) : -got b-b ( if a 2-byte message, return. Otherwise move block to archive - 300+ - and skip out) : receive ( check and decode received packet.) +test ( returns if true,) -test ( returns if false. Otherwise they) pop ( - skip-out - return from) receive. ( Resulting stack need not be empty, since) /forth ( will restore pre-interrupt stack.) pop ( must be in a word called by) receive, ( it cant be nested) : +get b ( send requested block from archive) : get n ( send block number to request. Interrupt disabled lest reply interfer) : put n ( send block) : archive ( send blocks 0-161 - 9 cylinders) icmp dhcp {block 148} ( Format floppy) empt forth :var hd [0x1] : array pop 2/ 2/ ; : com align array [ $1202004d , $6c 2, ] : done $3f4 a! p@ $d0 or drop if done ; ] then ; : byte ( n) ready p! ; : sectors ( nn-n) 18 for over byte [ hd ] @ byte dup 18 mod 1 + byte 2 byte 1 + next drop ; : head ( nn-n) dup [ hd ] ! $400 * $1202004d + [ com ] ! seek [ com ] 6 command dup 2* - 1801 + sectors done ; : cylinders ( n) 0 swap for 0 head 1 head 1 + next stop drop ; : format 12 cylinders ; {block 149} ( Increase speed from 2 cylinders/s to 3) : array -a ( return next word address) : com -a ( address of command string) : done ( wait till last sector formatted. Till ready to read) : byte n ( send byte to fdc when ready) : sectors nn-n ( send 4 format bytes to each of 18 sectors. Sector number from 1 to 18) : head nn-n ( set head number. Issue seek and format commands. Starting sector number depends on cylinder, allowing 2 sector times to step heads. Cylinder 1' 17 18 1 2 ... 16. 1801 + adjusts for 1s complement and for unsigned mod) : cylinders n ( format both heads of each cylinder, starting at 0) : format ( standard number of cylinders. Smaller is faster) {block 150} ( Hard disk) empt macro ( use this at your own) risk ] : 2/s ?lit $f8c1 2, 1, ; : p!+ $42ee 2, ; : 1! $91 1, [compile] drop ; : insw [compile] 1! $97 1, $6df266 3, $97 1, ; : outsw [compile] 1! $96 1, $6ff266 3, $96 1, ; forth ] : 2dup over over ; : bsy $1f7 p@ $80 and drop if bsy ; ] then ; : rdy ( -n) $1f7 p@ 8 and drop if $1f0 a! 256 ; ] then rdy ; : sector $1f3 a! swap p!+ 8 2/s p!+ 8 2/s p!+ 8 2/s $e0 or p!+ drop p!+ drop 2* 2* ; : read ( an) $20 sector 256 for rdy insw next drop ; : write ( an) bsy $30 sector 256 for rdy outsw next drop ; nload {block 151} {block 152} ( boot' 3f fat0' 5f fat1' 25a5 dir' 2 cl forth' 8e6d cl) : reg dup p@ $ff and 2 h.n space 3 h.n cr ; : regs 7 for i $1f0 + reg -next ; : ok show blue screen text regs keyboard ; : cl $20 * $4aab + ; : buffer [ $2000 block ] ; : ?fort dup @ $54524f46 or drop ; : cl0 dup 5 + @ $10000 * swap 6 + @ 16 2/s $ffff and or ; : find ( -n) [ buffer ] dup 2 cl read 256 for ?fort if 8 + *next drop ; ] then cl0 pop drop ; : fort [ $8e6d cl ] ; : +2 $8000 u+ $100 + ; : reads for 2dup read +2 next drop drop ; : writes for 2dup write +2 next drop drop ; : get buffer fort 9 reads ; : cf! 0 fort 2 writes ; {block 153} {block 154} ( Deskjet) empty 2 +load ] : nb [ 768 3 * ] ; 4 +load ] : pixels for pix next drop drop ; : drow string [ $33622a1b , $622a1b4d , $5730 2, ] : rpt [ drow ] 10 type drop ; : columns for $264 2 erase dup [ buffer 8 * ] 768 pixels line rpt rpt 2 + next drop ; : res 300 2, 300 2, 2 2, ; : esci string [ $306c261b , $6f2a1b4c , $1b4d312e , $3033742a , $2a1b5230 , $55342d72 , ( 32672a1b 4025736 res res res res) $32722a1b , $53343033 , $30722a1b , $722a1b41 , $c4362 3, ] : print esci 37 type [ $f0000000 767 1024 * 2 * + ] 1024 columns 6 type drop ; : tx string $3f and if $3f or if ; ] then $c0 or ; ] then ; : text tx [ map ] ! print ; : it table [ map ] ! print ; {block 155} {block 156} ( Printer) macro ] : p@ $ec 1, ; : p! $ee 1, ; : @w $8b66 3, ; : @b $8a 2, ; : +a $c2ff 2, ; : bts $10ab0f 3, [compile] drop ; : 2/s ?lit $f8c1 2, 1, ; forth ] : ready p@ $80 and if ; ] then ready ; : delay for next ; : emit $378 a! p! +a ready +a $8d or p! 30 delay 1 or p! drop ; : type for dup @b emit 1 + next ; : buffer [ $264 block 4 * ] ; : string pop ; : !b dup - 7 and a! dup 3 2/s bts 1 + ; : three !b : two !b : one !b : nul drop ; : white $ffff and dup $ffff or drop if - then ; {block 157} {block 158} ( Deskjet) : -nb [ nb negate ] u+ ; : bcmy string [ $10243800 , $3033 , $200022 , $10000011 , $c00f , $4003 , $0 , $0 , $8000a , $0 , $800002 , $0 , $4000005 , $0 , $0 , $c0000001 , ] : ye [ nb 3 * ] u+ : all over over 3 and jump nul one two three : ma -nb 2 2/s all ; : cy -nb 2 2/s all ; : bl -nb 2 2/s all ; :var map [0x100926] : 6b $c618 and 3 2/s dup 3 2/s or $3c3 and dup 4 2/s or $3f and ; : table string bcmy + @b ; : ex [ map ] @ push ; : pix over @w 6b ex $ff and if ye ma cy bl then drop 3 + [ 1024 -2 * ] u+ ; : arow string [ $30622a1b , $4d 1, ] : trbp string [ $32622a1b , $563838 3, ] : trbr string [ $32622a1b , $573838 3, ] : color 7 type drop [ nb 8 / ] type ; : line [ arow ] 5 type drop [ buffer ] 3 for [ trbp ] color next [ trbr ] color drop ; {block 159} {block 160} ( x18 simulator) empty macro ] : 2/s ?lit $f8c1 2, 1, ; forth ] : state [ $1fff block ] ; nload ] : reset r 26 for $100000 over ! 1 + next drop $180 mem @ ir ! $181 pc ! $0 slot ! ; : un. 5 for 37 emit next ; : undef $100000 ? if drop un. ; ] then 5 h.n ; : r. ( a-a) dup @ undef cr 1 + ; : stack sp @ $8 for dup ss r. drop -1 + next drop ; : return rp @ 8 for 1 + dup rs r. drop next drop ; : ok show black screen text green return r r. blue r. r. white r. r. green r. r. drop stack keyboard ; reset ok {block 161} : 2/s n ( shift right n bits) : state -a ( address of state vector for current computer) : reset ( set registers undefined, execute from ROM) : un. ( display undefined register) : h.n nn ( display n hex digits of number) : undef n ( bit 20 set means undefined) : r. ( display register) : stack ( display stack, top at top) : return ( display return stack, top at bottom) : ok ( display registers, b a blue, pc ir white) {block 162} ( Registers) : r state ; : b state 1 + ; : ar state 2 + ; : pc state 3 + ; : ir state 4 + ; : t state 5 + ; : s state 6 + ; : slot state 7 + ; : ss 7 and 8 + state + ; : rs 7 and 16 + state + ; : rp state 24 + ; : sp state 25 + ; : mem [ $2000 block ] + ; 4 +load 2 +load ] : s1 ir @ 8 2/s inst ; : s2 ir @ 3 2/s inst ; : s3 0 slot ! ir @ 4 and drop if ret then pc @ mem @ ir ! 1 pc +! : s0 ir @ 13 2/s inst ; : step slot @ jump s0 s1 s2 s3 : steps for step next ; {block 163} ( Name 26 registers in state vector) : ar -a ( ^ A register. Cannot be named a because Pentium macro takes precedence) : s0-s3 ( execute instruction from slot 0-3) : step ( execute next instruction) : steps n ( execute n instructions) {block 164} ( Instructions) : nul ; : call pc @ +r : jmp ir @ $1ff and pc ! ; : jz t @ dup or : jc drop if 3 slot ! ; ] then jmp ; : jns t @ $20000 and jc ; : ret -r pc ! ; : @b b @ : @x mem @ +t ; : @+ ar @ 1 ar +! @x ; : n pc @ 1 pc +! @x ; : @a ar @ @x ; : !b b @ 1 b +! : !x -t swap mem ! ; : !+ ar @ 1 ar +! !x ; : !a ar @ !x ; : inst ( n) 1 slot +! $1f and jump jmp jmp call call jz jz jns jns @b @+ n @a !b !+ nul !a -x 2*x 2/x +* orx andx nul +x r@ a@ t@ s@ r! a!x nul t! {block 165} ( Define action of each instruction) : inst n ( jump vector for 32 instruction codes) {block 166} ( Instructions) : +r ( n) r @ rp @ 1 + dup rp ! rs ! r ! ; : -r ( -n) r @ rp @ dup rs @ r ! -1 + rp ! ; : +t ( n) t @ s @ sp @ 1 + dup sp ! ss ! s ! t ! ; : -t ( -n) t @ s @ t ! sp @ dup ss @ s ! -1 + sp ! ; : -x t @ $3ffff or t ! ; : 2*x t @ 2* $3ffff and t ! ; : 2/x t @ dup $20000 and 2* or 2/ t ! ; : +* t @ 1 ? if s @ + then 2/ t ! ; : orx -t t @ or t ! ; : andx -t t @ and t ! ; : +x -t t @ + $3ffff and t ! ; : r@ -r +t ; : a@ ar @ +t ; : t@ t @ +t ; : s@ s @ +t ; : r! -t +r ; : a!x -t ar ! ; : t! -t drop ; {block 167} : +r n ( push onto return stack) : -r -n ( pop from return stack) : +t n ( push onto data stack) : -t -n ( pop from data stack) : -x ( some instructions named with terminal x to avoid Pentium conflict) {block 168} ( x18 target compiler) empt :var h [0x200194] :var ip [0x200193] :var slot [0x2] macro ] : 2*s ?lit $e0c1 2, 1, ; forth ] : memory $2000 block ; : org ( n) [ memory ] + dup [ h ] ! [ ip ] ! 0 [ slot ] ! ; : , ( n) [ h ] @ ! 1 [ h ] +! ; : s3 : s0 [ h ] @ [ ip ] ! 13 2*s , 1 slot ! ; : s1 8 2*s : sn ip @ +! 1 slot +! ; : s2 3 2*s sn ; : i, slot @ jump s0 s1 s2 s3 : 25x 174 load ; 8 +load 2 +load 4 +load n x18 call class 25x {block 169} ( Prototype for target compilers) : h ( address of next available word in target memory) : ip ( address of current instruction word) : slot ( next available instruction slot) : 2*s n ( shift left n bits) : memory -a ( host address for target memory) : org n ( set current target memory location) : , n ( compile word into target memory) : s0-s3 ( assemble instruction into slot 0-3) : i, ( assemble instruction into next slot) : 25x ( compile code for multicomputer) {block 170} ( Instructions) : nop $1e i, ; : adr ( n-a) [ slot ] @ 2 or drop if nop then i, [ ip ] @ ; : call defer ( a) 2 adr +! ; : if ( -a) 4 adr ; : -if ( -a) 6 adr ; : then ( a) [ h ] @ $1ff and swap +! ; : @+ $8 i, ; : @b $9 i, ; : n defer 8 f@ execute $a i, , ; : @ $b i, ; : !+ $c i, ; : !b $d i, ; : ! $f i, ; : - $10 i, ; : 2* $11 i, ; : 2/ $12 i, ; : +* $13 i, ; : or $14 i, ; : and $15 i, ; : + $17 i, ; {block 171} ( Words being redefined for the target computer. These Pentium words can no longer be executed. Although Pentium macros still take precedence during compilation, they will no longer be used.) : adr n-a ( assembles instruction, but not in slot 2, where address goes. Instruction address left on stack) : call ( deferred to class. Executed for target defined words) : then a ( puts address in low 9 bits of previous instruction word) : n ( executed for green short-numbers. All 18-bit target numbers are short. Executes white short-number to put interpreted number on stack. Then assembles literal instruction with number in next location) {block 172} ( Instructions) : pop $18 i, ; : a $19 i, ; : dup $1a i, ; : over $1b i, ; : push $1c i, ; : a! $1d i, ; : drop $1f i, ; : ; 4 [ ip ] +! ; {block 173} ( More target instructions) : ; ( since it will be executed, it does not conflict with the Pentium macro) {block 174} ( 25x ROM) $180 org ] $0 dup - dup - dup - dup - dup - dup - dup - dup - dup push push push push push push push push push a! a nop {block 175} {block 176} ( Target) : defer ( -a) pop ; : execute ( a) push ; : class ( a) [ last 1 + ] ! ; : f! ( an) [ sp ] + ! ; : f@ ( n-a) [ sp ] + @ ; :var ?com [0x5a5] :var csho [0x559] : empty empt 0 class [ csho ] @ [ ?com ] @ : functions ( aa) 4 f! 6 f! ; : x18 ( a) 4 f@ [ ?com ] ! 6 f@ [ csho ] ! 1 f@ functions ; {block 177} {block 178} {block 179} {block 180} ( Realtek rtl8139b) macro ] : move ( sdn) $c189 2, [compile] drop $c78957 3, [compile] drop $c68956 3, $a4f3 2, $5f5e 2, [compile] drop ; forth ] : 1us 1 : us ( n) [ 550 3 / ] * for next ; : r ( n-a) [ $2000000 device $14 + pci ] + 2/ 2/ ; : rom ( a-n) r @ ; : 3rom ( nnn) 4 rom 0 rom dup 16 for 2/ next swap ; : tx ( -b) [ $2000 block 4 * ] ; : rx ( -b) [ tx 1536 + ] ; :var ds [0x1] :var fr [0x2a] : n ( -a) [ ds ] @ [ $10 r ] + ; : send ( an) [ fr ] @ [ tx ] + swap dup [ fr ] +! move ; : first ( an) n @ $2000 and drop if [ ds ] dup @ 1 + 3 and swap ! 0 [ fr ] ! send ; ] then first ; : last ( an) send tx [ ds ] @ [ $20 r ] + ! [ fr ] @ 60 max n ! ; : reset $10000000 [ $34 r ] ! 100 us ; : init rx [ $30 r ] ! 1us reset $c000000 [ $34 r ] ! 1us $8a [ $44 r ] ! 3 [ ds ] ! $fb dup $21 p! $a1 p! sti : /int $ffff0001 [ $3c r ] ! ; : rcvd ( -b) [ $38 r ] @ dup $10000 / $1fff and $fffffff0 + [ $38 r ] ! $10 + $1fff and [ rx 4 + ] + ; {block 181} : move sdn ( move n bytes from source to destination. Register 1 is used, 6 and 7 are saved) : us n ( delay n microseconds. Edit cpu clock rate) : r n-a ( word address of register) : rom a-n ( fetch 2 bytes of mac) : 3rom nnn ( 3 byte-pairs of mac) : tx -a ( transmit buffer. 1536 bytes. Fragments must be assembled for transmission) : rx -b ( receive buffer. 8k + 1532 byte overrun) : ds -a ( must cycle thru 4 tx descriptors) : fr -a ( must accumulate fragments in tx buffer) : n -a ( tx status/length. Writing starts transmission) : send an ( fragment into transmit buffer) : first an ( fragment. Wait till buffer empty) : last an ( fragment. Start transmission) : reset ( controller) : init ( ialize controller. Set tx/rx address/on and mac/broadcast. Enable irq10) : rcvd -b ( received packet. Register 38 is 10 bytes before start of next packet. Register 3a is end of current packet) {block 182} ( Display registers) : reg ( a) dup r @ h. space 2 h.n cr ; : regs $48 19 for dup reg -4 + next drop ; : ok show red screen text regs keyboard ; {block 183} : reg a ( display register and address) : regs ( display interesting registers) : ok ( diagnostic display) : 48 ( counter. Neat!) : 44 ( rx configuration) : 40 ( tx configuration) : 3c ( interrupt) : 38 ( rx count/address) : 34 ( command) : 30 ( rx 8k ring buffer) : 2c-20 ( tx address) : 1c-10 ( tx status) : c-8 ( multicast id, unused) : 4 ( mac 54) : 0 ( mac 3210) {block 184} ( Ethernet) empty 124 load ] : empty empt logo cli ; macro ] : w $66 1, ; : w@ $8b 2, ; : w! [compile] w $289 2, [compile] drop ; : *byte $c486 2, ; forth 126 load 128 load ] : n@ w w@ $ffff and *byte ; : 2! a! w! ; : n! a! *byte w! ; : n, *byte 2, ; : string pop ; : packet string [ -1 dup dup 2, 2, 2, 3rom 2, 2, 2, 0 n, ] : length ( n) [ packet 12 + ] n! ; : 3! swap over 2! 2 + swap over 2! 2 + 2! ; : ethernet ( n) length [ packet ] 14 first ; : +ethernet ( -a) rcvd 14 + ; 132 load 134 load 136 load 138 load $72 interrupt ] : serve forth receive /int 8clear /forth i; [ init ok {block 185} : empty ( redefined to disable interrupts) : w ( 16-bit prefix) : w@ b-n ( fetch 16-bits from byte address) : w! nb ( store 16-bits) : *byte n-n ( swap bytes 0 and 1) : n@ b-n ( fetch 16-bit network-ordered number) : 2! nb ( store 16-bit number) : n! nb ( store 16-bit number in network order) : n, n ( compile 16-bit number in network order) : string -b ( returns byte address) : packet -b ( ethernet packet header) : dest -b ( destination field in packet) : src -b ( source field) : length n ( store length into packet) : 3! nnnb ( store 3-word MAC) : ethernet n ( send header with type/length) : @ethernet -b ( return payload address of received packet) {block 186} ( ARP for a single correspondent) : . ( n) 1, ; : message string [ $1 n, $800 n, $6 . $4 . $1 n, ] : me [ 3rom 2, 2, 2, ( IP) 0 . 0 . 0 . 2 . ] : to [ 0 0 0 2, 2, 2, ( IP) 0 . 0 . 0 . 1 . ] : sender 8 + ; : target 18 + ; : dir 6 + ; : ip 6 + w@ ; : ar ( n) [ message dir ] n! $806 ethernet [ message ] 28 last ; : arp cli -1 dup dup [ packet ] 3! 1 ar sti ; : -arp ( b-b) dup -2 + n@ $806 or drop if ; ] then pop drop : me? dup target ip [ message sender ] ip or drop if ; ] then dup sender [ packet ] 6 move : query? dup dir n@ 1 or drop if ; ] then sender [ message target ] 10 move 4 ar ; {block 187} ( Set ip addresses with Edit. Normal order, net bytes first) : . n ( compile byte. Resembles URL punctuation) : message -b ( 28-byte string) : me ( comment marking my mac/ip address) : to ( comment marking correspondent) : sender : target : dir -b ( fields in either) message ( or received message) : ip b-n ( fetch ip address) : ar n ( send query 1, or reply 4) : arp ( broadcast query) : -arp b-b ( return if not ARP. Otherwise process and skip out.) : me? b ( return if broadcast not for me. Save sender only in packet) : query? b ( if a request, reply) {block 188} ( ipv6) : header string [ $1000060 , $0 n, $17 . 64 . ] : to [ $0 , $0 , $0 , ( IP) 0 . 0 . 0 . 2 . ] : me [ $0 , $0 , $0 , ( IP) 0 . 0 . 0 . 1 . ] : length ( n) [ header 4 + ] n! ; : dest [ header 20 + ] ; : src [ header 36 + ] ; : ip ( n) $86dd ethernet length [ header ] 40 send ; : +ip ( b-b) dup -2 + n@ $86dd or drop if pop ; ] then 40 + ; {block 189} ( Set ip addresses with Edit. Normal order, net bytes first) : header -a ( 40-byte ipv6 header) : length n ( store 2-byte length in header) : dest -a ( 4-byte destination ip address) : src -a ( source ip) : ip n ( send ip header embedded in ethernet packet) : +ip b-b ( skip out if not IP. Otherwise return payload address) {block 190} ( UDP) : b@ ( b-n) w@ $ff and ; : header string [ 0 n, 0 n, 8 n, 0 n, 0 n, ] : length ( n) 8 + [ header 4 + ] n! ; : udp ( n) dup 8 + ip length ; : +udp ( b-b) dup -34 + b@ $17 or drop if pop ; ] then 8 + ; {block 191} : b@ b-n ( fetch byte) : header -a ( 8-byte udp header) : length n ( store length in header) : udp n ( send ip header for n-byte packet) : +udp b-b ( skip out if not UDP. Otherwise return payload address) {block 192} ( Blocks to/from server) : payload ( n-bn) [ header 8 + ] n! [ header ] 10 ; : +put ( nn) 1026 udp over payload send + block 2* 2* 1024 last ; : it ( b) dup 2 + swap n@ 300 + block 2* 2* 1024 move ; : -got ( b-b) dup -4 + n@ [ 2 8 + ] or drop if it pop ; ] then ; : receive +ethernet -arp +ip +udp -got : +get ( b) n@ 300 +put ; : ... ( interrupt-protect words that transmit) : get ( n) cli 2 udp payload last sti ; : put ( n) cli 0 +put sti ; : archive 161 for i put 1000 us -next ; lblk @ edit {block 193} ( Client can get or put blocks to server) : payload n-bn ( 2 bytes were appended to UDP header for block number) : +put nn ( send block number. Append block as last fragment. Packet length distinguishes two messages) : it b ( move 1024 bytes from packet to offset block) : -got b-b ( if a 2-byte message, return. Otherwise move block to archive - 300+ - and skip out) : receive ( check and decode received packet.) +test ( returns if true,) -test ( returns if false. Otherwise they) pop ( - skip-out - return from) receive. ( Resulting stack need not be empty, since) /forth ( will restore pre-interrupt stack.) pop ( must be in a word called by) receive, ( it cant be nested) : +get b ( send requested block from archive) : get n ( send block number to request. Interrupt disabled lest reply interfer) : put n ( send block) : archive ( send blocks 0-161 - 9 cylinders) {block 194} ( ipv4) : header align string [ $4500 n, 0 n, 1 n, 0 n, $ff00 n, 0 n, 0 , 0 , ] : length ( n) 20 + [ header 2 + ] n! ; : +id [ header 4 + ] dup n@ 1 + swap n! ; : checksum ; : source [ header 12 + ] ; : destination [ header 16 + ] ; : ip ( n-n) dup 20 + $800 ethernet length +id checksum [ header ] 20 send ; {block 195} {block 196} ( Howerds test block) empt macro ] : gtend $7e 1, here invert + 1, ; : init $b803f0ba , $eeee0055 , ; forth ] : h [ $1e5 ] ; ( h last class macros forths) : allot ( n-) h +! ; : mk2 [ here ] $10 + ; $40 allot ] : mk [ $1e2 ] ; : class [ $1e9 ] ; : macros [ $1ea ] ; : forths [ $1eb ] ; : mk macros @ mk2 ! forths @ mk2 1 + ! h @ mk2 2 + ! ; : mt mk2 @ macros ! mk2 1 + @ forths ! mk2 2 + @ h ! ; : reload 0 push ; : qkey 3 for i next ; :var ky [0x39] : key pause [ $64 ] p@ 1 and drop if [ $60 ] p@ dup $3a - drop -if ky ! ; ] then drop then key ; : kk key ky @ 57 - drop if kk then ; : pt [ $3f0 ] ; here $4 / $12345678 , , ] : conf cli init $0 pt p! pt $1 + p@ $1 pt p! pt $1 + p@ ; {block 197} : kk ( shows key values . press esc to exit) {block 198} ( IR remote) empty macro ] : 2/s ?lit $f8c1 2, 1, ; : p@ $ec 1, ; : p! $ee 1, [compile] drop ; : 1@ $8a 2, ; : 1! [compile] a! $288 2, [compile] drop ; forth ] : ba 10 /mod $11f a! p! $118 + a! ; : b@ ba 0 p@ ; : b! ba p! ; : us 748 * time + - : till dup time + drop -if till ; ] then drop ; : ms 1000 * us ; : array pop 2 2/s ; : nul ; :var onf [0x3] 145 load 146 load 50 load 147 load 148 load 149 load 150 load 151 load 152 load 153 load 155 load 154 load ] : h pad nul nul accept bye +db -db mute nul +xx -ch jp vcr tv0 dvd cd fm nul nul nul nul nul nul nul nul nul nul nul nul [ $152500 , $91016 , $11001016 , $e0a1002 , 0 , 0 , 0 , {block 199} ( smsc ircc2.0 IR Consumer mode) $32 10 b! 0 12 b! 0 20 b! ] : buffer [ 200 block 4 * ] ; : reset $10 7 b! $80 4 b! ; : on $40 5 b! ; : off 2 4 b! 200 ms ; : emit 6 b@ $40 and drop if emit ; ] then 0 b! ; : rdy 6 b@ $80 and drop ; : get 0 b@ over 1! 1 + ; : bytes for : byte rdy if get dup [ buffer 4096 + ] or drop if byte ; ] then drop pop drop ; ] then next drop ; : r 200 1 erase $80 dup 4 b! 5 b! [ buffer ] 1000000 bytes 0 5 b! ; : word - 4 for dup emit 8 2/s next drop ; : cmd for word next 1 : sp for 0 word next ; : rate 22 b! 21 b! ; : sync $80 20 b! ; {block 200} ( App' Slime ' simple game) empt ( sounds) 4 +load macro ] : @w $8b66 3, ; forth :var speed [0x3] :var alice [0xd00170] :var bob [0x1c00280] :var once :var da [0x10] :var db [0xfffffff0] :var delay [0x4] :var /del [0x12] :var off [0xffffffff] :var done :var frame [0x1e80000] : mova da @ alice +! ; : movb db @ bob +! ; : qpel ( a-) @ $10000 /mod at frame @ xy @ $10000 /mod swap $400 * + $2 * + @w $ffff and 0 + if [ 1 ] done ! [ 1 ] off ! white bomb then ; : clr [ 13 65536 * 16 * 320 + ] alice ! [ 28 65536 * 16 * 688 + ] bob ! [ 16 ] da ! [ -16 ] db ! [ 0 ] delay ! [ 1 ] off ! [ 0 ] done ! [ $1e80000 ] frame ! 1 1000 tn : bgnd silver screen 16 16 at black 1008 672 box : draw $ffff color alice mova qpel 102 emit red bob movb qpel 101 emit ; : tick off @ 0 + drop if ; ] then delay @ -1 + delay ! -if /del @ delay ! draw click then ; : b. ( c-) $18 + 2emit ; : ok show silver once @ 0 + drop if clr 0 once ! then silver 0 708 at 600 768 box 48 708 at $ffff00 color 104 mute @ 0 + drop if 1 + then 2emit 0 emit speed @ 1 + b. tick keyboard ; nload x ok h {block 201} ( slime) empt macro ] : @w ( 16bit fetch) : speed ( selected speed) : alice ( 16'16 bit xy coordinate of left slug) : bob ( 16'16 bit xy coordinate of right slug) : once ( is set to initialise the game) : mova ( move alice by the value in da) : movb ( move bob by the value in db) : delay ( counts the ticks for each move) : /del ( the reset value for delay) : qpel ( check for slime coloured pixel) : clr ( set alice and bob to start positions) : bgnd ( draw the background) : draw ( the slugs) : tick ( do this every screen update) : ok ( the screen display) {block 202} ( Slime keypad) : +speed 1 : +/-speed speed @ + 0 max 9 min [ speed ] ! [ 10 ] speed @ invert + dup * 7 + 2 / 2 invert + /del ! ; : -speed -1 +/-speed ; : d [ 16 65536 * ] da ! ; : u [ -16 65536 * ] da ! ; : r [ 16 ] da ! ; : l [ -16 ] da ! ; : d2 [ 16 65536 * ] db ! ; : u2 [ -16 65536 * ] db ! ; : r2 [ 16 ] db ! ; : l2 [ -16 ] db ! ; : nul ; : go 0 off ! ; : stop -1 off ! ; : x 1 once ! ; : t off @ 0 + drop if 0 off ! ; ] then -1 off ! ; : help 203 edit ; : mutet mute @ invert mute ! ; : h pad nul xx t nul nul nul nul nul l2 u2 d2 r2 x nul stop go nul nul nul nul l u d r -speed help mutet +speed [ $225 , 0 , $110160c , $19180015 , 0 , $110160c , $2b091423 , {block 203} ( Slime keypad) : ludr ( move Alice and Bob left up down up) : x ( reset the game) : 0 ( stop the game) : 1 ( start the game) : - ( decrease the speed) : h ( to see this help screen) : m ( mute the sound - on/off) : + ( increase the speed) : . ( quit) : t ( toggle on/off) : slime' ( two players control Alice and Bob. The first to hit any slime or the edges loses.) : credits' ( Coded by Howerd Oakford from an idea by Alan Crawley and Paul Chapman) : tested' ( by Hannah Oakford) : type [ slime ( to play again) {block 204} ( Sounds) :var tempo [0x14] :var mute :var period [0x5a] : tn ( ft-) tempo @ * swap [ 660 ] 50 */ : hz ( tf-) push 1000 1193 pop */ : osc ( tp-) dup period ! split $42 p! $42 p! : tone ( t-) mute @ 0 + drop if drop ; ] then $4f $61 p! ms $4d $61 p! 20 ms ; : click 1 90 osc ; : t 3 tn ; : q 8 tn ; : c 16 tn ; : 2tone 75 q 50 q ; : h1 50 c 54 q 50 q 45 c 60 c ; : h2 40 c 45 q 50 q 50 c 45 c ; : h3 54 c 60 q 54 q 50 c 45 q 40 q 50 t 45 t 50 t 45 t 45 12 tn 40 q 40 32 tn ; : hh : handel h1 h2 h3 ; : piano 55 7 for dup q 3 2 */ next drop ; : cetk 6 c 10 c 8 c 4 c 6 32 tn ; : bomb mute @ 0 + drop if ; ] then $4f $61 p! 500 for 1000 i invert + split $42 p! $42 p! 1 ms next $4d $61 p! 1 32 tn ; {block 205} ( Sounds) : tempo ( in ms per 1/8 quaver) : mute ( equals -1 to disable sound) : period ( test only - value sent to hardware) : tn ( ft- play f Hz for t * 11 ms) : hz ( tf- play t ms at f Hz) : osc ( tp- play t ms of period p) : tone ( t- play the current tone for t ms) : click ( makes a click) : t ( triplet) : q ( quaver) : c ( crotchet) : 2tone ( 2 tones) : h1 : h2 : h3 : hh : handel ( part of Handels Gavotte) : piano : cetk ( Close Encounters of the Third Kind) : bomb ( - well sort of ....) {block 206} ( App' colorforth editor) empt nload qinit ] : eddd jblk @ ok h ( drop) ; : edd ( b-) jblk @ jlast ! jblk ! eddd ; blk @ jblk ! 206 jlast ! eddd {block 207} ( The colorforth editor in colorforth) {block 208} ( Editor circular buffers) :var cbn :var ends : data ( -) cbn @ $1 invert and cbn ! ; : ptrs ( -) cbn @ $1 or cbn ! ; : heads ( -) cbn @ $2 invert and cbn ! ; : tails ( -) cbn @ $2 or cbn ! ; : cb@ ( -c) ends @ cbn @ 8 * rshift $ff and ; : cb! ( c-) $ff and cbn @ 8 * lshift ends @ $ff cbn @ 8 * lshift invert and or ends ! ; : cbnum ( -n) cbn @ heads cb@ tails cb@ - $ff and swap cbn ! ; : cbuf ( -a) [ r@ $100 / 2 + ] cbn @ $1 and + block ; : tl- ( -n) cbnum ?f drop 0if $0 ; ] then tails cb@ cbuf + @ cb@ 1 + cb! ; : tl+ ( n-) tails cbnum $ff - drop 0if tl- drop then cb@ $1 - cb! cb@ cbuf + ! ; : hd@ ( -n) heads cb@ cbuf + @ ; : hd- ( -n) cbnum $0 - drop 0if $0 ; ] then hd@ cb@ 1 - cb! ; : hd! ( n-) heads cb@ cbuf + ! ; : hd+ ( n-) cbnum $ff - drop 0if tl- drop then heads cb@ $1 + cb! hd! ; 4 +load {block 209} : cbn ( bit 0 selects one of two circular buffers. Bit 1 selects head or tail value) : cb@ : cb! ( read/write a byte to one of the 4 in ends selected by cbn) : ptrs ( selects the pointer buffer) : data ( selects the data buffer) : heads ( selects the head value) : tails ( selects the tail value) : cbnum ( gives the number of items in the currently selected buffer) : cbuf ( returns the address of the start of both buffers - the next 2 blocks) : tl+ : tl- : hd+ : hd- ( add or subtract from the head or tail of the currently selected buffer) : ... ( note the tl- in hd+ . if the buffer is full we remove the oldest from the tail) {block 210} [0x10000009] [0x5c58bc8a] < ay > [0xc79ad649] < r > [0x810bb549] [0xccd80c0a] [0xc0f0c54a] < ay > [0x10000709] [0x10000809] [0x10000209] [0x10000a09] [0x10000b09] [0x10000c09] [0x10000d09] [0x10000309] [0x10000f09] [0x10001009] [0x10001109] [0x10001209] [0x10000409] [0x10001409] [0x10001509] [0x10001609] [0x10001709] [0x10000509] [0x10001909] [0x10001a09] [0x10001b09] [0x10001c09] [0x10000609] [0x10001e09] [0x10001f09] [0x10002009] [0x10002109] [0x10000709] [0x10002309] [0x10002409] [0x10002509] [0x10002609] [0x10000809] [0x10002809] [0x10002909] [0x10002a09] [0x10002b09] [0x10000909] [0x10002d09] [0x10002e09] [0x10002f09] [0x10003009] [0x10000a09] [0x10003209] [0x10003309] [0x10003409] [0x10003509] [0x10000b09] [0x10003709] [0x10003809] [0x10003909] [0x10003a09] [0x10000c09] [0x10003c09] [0x10003d09] [0x10003e09] [0x10003f09] [0x10000d09] [0x10004109] [0x10004209] [0x10004309] [0x10004409] [0x10000e09] [0x10004609] [0x10004709] [0x10004809] [0x10004909] [0x10000f09] [0x10004b09] [0x10004c09] [0x10004d09] [0x10004e09] [0x10001009] [0x10005009] [0x10005109] [0x10005209] [0x10005309] [0x10001109] [0x10005509] [0x10005609] [0x10005709] [0x10005809] [0x10001209] [0x10005a09] [0x10005b09] [0x10005c09] [0x10005d09] [0x10001309] [0x10005f09] [0x10006009] [0x10006109] [0x10006209] [0x10001409] [0x10006409] [0x10006509] [0x10006609] [0x10006709] [0x10001509] [0x10006909] [0x10006a09] [0x10006b09] [0x10006c09] [0x10001609] [0x10006e09] [0x10006f09] [0x10007009] [0x10007109] [0x10001709] [0x10007309] [0x10007409] [0x10007509] [0x10007609] [0x10001809] [0x10007809] [0x10007909] [0x10007a09] [0x10007b09] [0x10001909] [0x10007d09] [0x10007e09] [0x10007f09] [0x10008009] [0x10001a09] [0x10008209] [0x10008309] [0x10008409] [0x10008509] [0x10001b09] [0x10008709] [0x10008809] [0x10008909] [0x10008a09] [0x10001c09] [0x10008c09] [0x10008d09] [0x10008e09] [0x10008f09] [0x10001d09] [0x10009109] [0x10009209] [0x10009309] [0x10009409] [0x10001e09] [0x10009609] [0x10009709] [0x10009809] [0x10009909] [0x10001f09] [0x10009b09] [0x10009c09] [0x10009d09] [0x10009e09] [0x10002009] [0x1000a009] [0x1000a109] [0x1000a209] [0x1000a309] [0x10002109] [0x1000a509] [0x1000a609] [0x1000a709] [0x1000a809] [0x10002209] [0x1000aa09] [0x1000ab09] [0x1000ac09] [0x1000ad09] [0x10002309] [0x1000af09] [0x1000b009] [0x1000b109] [0x1000b209] [0x10002409] [0x1000b409] [0x1000b509] [0x1000b609] [0x1000b709] [0x10002509] [0x1000b909] [0x1000ba09] [0x1000bb09] [0x1000bc09] [0x10002609] [0x1000be09] [0x1000bf09] [0x1000c009] [0x1000c109] [0x10002709] [0x1000c309] [0x1000c409] [0x1000c509] [0x1000c609] [0x10002809] [0x1000c809] [0x1000c909] [0x1000ca09] [0x1000cb09] [0x10002909] [0x1000cd09] [0x1000ce09] [0x1000cf09] [0x1000d009] [0x10002a09] [0x1000d209] [0x1000d309] [0x1000d409] [0x1000d509] [0x10002b09] [0x1000d709] [0x1000d809] [0x1000d909] [0x1000da09] [0x10002c09] [0x1000dc09] [0x1000dd09] [0x1000de09] [0x1000df09] [0x10002d09] [0x1000e109] [0x1000e209] [0x1000e309] [0x1000e409] [0x10002e09] [0x1000e609] [0x1000e709] [0x1000e809] [0x1000e909] [0x10002f09] [0x1000eb09] [0x1000ec09] [0x1000ed09] [0x1000f009] [0x1000f209] [0x1000f509] [0x94a52009] [0x94a52009] [0x1000f509] [0x1000f609] [0x1000f709] [0x1000f809] [0xc78f1e39] [0x1000f809] [0x10003209] [0xc78f1e39] [0x1000fb09] {block 211} [0x0] [0x1] [0x1] [0x1] [0x1] [0x1] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x5] [0x4] [0x1] [0x1] [0x1] [0x1] [0x1] [0x1] [0x1] [0x1] [0x1] [0x1] [0x10003909] [0x10003a09] [0x10000c09] [0x10003c09] [0x10003d09] [0x10003e09] [0x10003f09] [0x10000d09] [0x10004109] [0x10004209] [0x10004309] [0x10004409] [0x10000e09] [0x10004609] [0x10004709] [0x10004809] [0x10004909] [0x10000f09] [0x10004b09] [0x10004c09] [0x10004d09] [0x10004e09] [0x10001009] [0x10005009] [0x10005109] [0x10005209] [0x10005309] [0x10001109] [0x10005509] [0x10005609] [0x10005709] [0x10005809] [0x10001209] [0x10005a09] [0x10005b09] [0x10005c09] [0x10005d09] [0x10001309] [0x10005f09] [0x10006009] [0x10006109] [0x10006209] [0x10001409] [0x10006409] [0x10006509] [0x10006609] [0x10006709] [0x10001509] [0x10006909] [0x10006a09] [0x10006b09] [0x10006c09] [0x10001609] [0x10006e09] [0x10006f09] [0x10007009] [0x10007109] [0x10001709] [0x10007309] [0x10007409] [0x10007509] [0x10007609] [0x10001809] [0x10007809] [0x10007909] [0x10007a09] [0x10007b09] [0x10001909] [0x10007d09] [0x10007e09] [0x10007f09] [0x10008009] [0x10001a09] [0x10008209] [0x10008309] [0x10008409] [0x10008509] [0x10001b09] [0x10008709] [0x10008809] [0x10008909] [0x10008a09] [0x10001c09] [0x10008c09] [0x10008d09] [0x10008e09] [0x10008f09] [0x10001d09] [0x10009109] [0x10009209] [0x10009309] [0x10009409] [0x10001e09] [0x10009609] [0x10009709] [0x10009809] [0x10009909] [0x10001f09] [0x10009b09] [0x10009c09] [0x10009d09] [0x10009e09] [0x10002009] [0x1000a009] [0x1000a109] [0x1000a209] [0x1000a309] [0x10002109] [0x1000a509] [0x1000a609] [0x1000a709] [0x1000a809] [0x10002209] [0x1000aa09] [0x1000ab09] [0x1000ac09] [0x1000ad09] [0x10002309] [0x1000af09] [0x1000b009] [0x1000b109] [0x1000b209] [0x10002409] [0x1000b409] [0x1000b509] [0x1000b609] [0x1000b709] [0x10002509] [0x1000b909] [0x1000ba09] [0x1000bb09] [0x1000bc09] [0x10002609] [0x1000be09] [0x1000bf09] [0x1000c009] [0x1000c109] [0x10002709] [0x1000c309] [0x1000c409] [0x1000c509] [0x1000c609] [0x10002809] [0x1000c809] [0x1000c909] [0x1000ca09] [0x1000cb09] [0x10002909] [0x1000cd09] [0x1000ce09] [0x1000cf09] [0x1000d009] [0x10002a09] [0x1000d209] [0x1000d309] [0x1000d409] [0x1000d509] [0x10002b09] [0x1000d709] [0x1000d809] [0x1000d909] [0x1000da09] [0x10002c09] [0x1000dc09] [0x1000dd09] [0x1000de09] [0x1000df09] [0x10002d09] [0x1000e109] [0x1000e209] [0x1000e309] [0x1000e409] [0x10002e09] [0x1000e609] [0x1000e709] [0x1000e809] [0x1000e909] [0x10002f09] [0x1000eb09] [0x1000ec09] [0x1000ed09] [0x1000ee09] [0x10003009] [0x1000f009] [0x1000f109] [0x1000f209] [0x1000f309] [0x10003109] [0x1000f509] [0x1000f609] [0x1000f709] [0x1000f809] [0x10003209] [0x1000fa09] [0x1000fb09] [0x37] [0x42] {block 212} ( Display Undo string buffer) :var jcur :var jblk [0x3a] : sze ( -n) [ $e0 ] ; : qinit 0 ends ! $0 ptrs hd! $10000009 data hd! ; : qnew ( -) 0 ptrs hd+ ; : qnum ( -c) ptrs hd@ ; : qpop ( -n) data hd- ptrs hd@ 1 - if hd! ; ] then hd- drop drop ; : qpush ( n-) data hd+ ptrs hd@ $ff - drop 0if drop then ptrs hd@ 1 + hd! 0 :var pos :var lpos : 2toc ( n-a) jblk @ block pos @ + + ; : xtoc? ( -n) 1 2toc @ $f and ; : rtocs ( -) jcur @ pos ! : ntocs ( -n) 0 2toc @ $f and 12 - ?f drop 0if 2 ; ] then 1 xtoc? ?f drop 0if 1 + then $ff and ; : ltocs ( -n) 0 pos ! : ltcs pos @ jcur @ - drop -if pos @ lpos ! ntocs pos +! ltcs drop then jcur @ lpos @ - ; : mx ( n-) jcur @ + 0 max 255 min jcur ! ; : ml ltocs negate mx ; : mu 8 for ml next ; : mr rtocs mx ; : md 8 for mr next ; nload {block 213} : qinit ( initialises the queue pointers) : qnew ( starts a new string entry) : qnum ( -c number of cells in the top string) : qpop ( -n returns the top cell of the top string) : qpush ( n- stores n in the top string) : ntocs ( number of tokens in the top string) : qq ( n-) qnew for qnum @ $100 * $10000009 + qpush next cbnum drop ; : qqq qinit 50 for 5 qq next 3 qq ; : vvv ptrs cbnum data cbnum ; : kk c vvv qpop ptrs hd@ ; : gg cbuf dump ; {block 214} ( Editor Display) :var cblind : cb cblind @ 0 + drop ; :var state [0x10] :var state* [0x10] : yellow $ffff00 color ; : +txt white $6d emit space ; : -txt white $6e emit space ; : +imm yellow $58 emit space ; : -imm yellow $59 emit space ; : +mvar yellow $9 emit $11 emit $5 emit $1 emit space ; : txts string [ $3010100 , $7060504 , $9090901 , $f0e0d0c , ( ;) : tx ( c-c) $f and txts + 1@ $f and ; : .new state @ $f and jump nul +imm nul nul nul nul nul nul nul +txt nul nul +mvar nul nul nul ; : .old state* @ $f and jump nul -imm nul nul nul nul nul nul nul -txt nul nul nul nul nul nul ; : state! ( n-*) dup 0 + drop 0if drop ; ] then tx cb 0if drop ; ] then state @ swap dup state ! - drop if .old .new state @ 0 + if dup state* ! then drop then ; nload {block 215} : state : state! ( acts on a change of token type. It ignores extension tokens) {block 216} ( Editor Display) macro ] : @b $8a 2, ; forth :var jcnt [0x67] :var jlast [0xce] :var jcol [0x2] : bksp [ xy ] @ [ 22 $10000 * negate ] + [ xy ] ! ; : ?.cur jcnt @ 1 + 255 min jcnt ! jcur @ jcnt @ negate + 1 + drop 0if $ff4040 color bksp $30 emit white then ; : x [ xy ] @ $10000 / ; : ?cr x [ 1000 ] negate + drop -if ; ] then : ncr [ xy ] @ [ 30 ] + $ffff and $30000 xor [ xy ] ! ; : emt ?cr emit ; : emit emt ; : emitw unpack if emit emitw ; ] then space drop drop ; : emitcs unpack if 48 + emit emitcs ; ] then space drop drop ; : dig pop + @b $ff and emit ; : edig dig [ $1b1a1918 , $1f1e1d1c , $13052120 , $e04100a , ] : odig dup $f and swap 2/ 2/ 2/ 2/ $fffffff and ; nload {block 217} : ncr ( new cr -does not get confused with original) {block 218} ( CAPITALS HPO 2004 Editor Display) : .hex odig if .hex edig ; ] then drop edig ; : .dec -1 ? -if negate 35 emit then : n 10 /mod -1 ? if .dec edig ; ] then drop edig ; : num if $c0c000 and color cb if 24 emit 21 emit then .hex space ; ] then color .dec space ; : txt $ffffff color emitw ; : blu [ $ff ] color emitw ; : cap $ffffff color unpack 48 + emit emitw ; :var caps? : caps $ffffff color emitcs -1 caps? ! ; : ex bksp caps? @ ?f drop if caps ; ] then emitw ; : gw $ff00 color emitw ; : cw $ffff color emitw ; : yw $ffff00 color emitw ; : coly [ 2 ] jcol ! ; : colr [ 4 ] jcol ! ; : colg [ 5 ] jcol ! ; : colm [ 13 ] jcol ! ; : colc [ 8 ] jcol ! ; : colb [ 14 ] jcol ! ; : rot [ $8b045e8b , $46e892e , $c38b0689 , $c3 1, :var last [0x48b95c04] nload {block 219} : caps : caps? ( is true if the extension token is CAPITALS) : txt? ( returns true if the last token was text) : .hex : .dec {block 220} ( Editor display) : short push dup 2/ 2/ 2/ 2/ 2/ swap $10 and drop pop num ; : ys $ffff00 short ; : long push 1 u+ $10 and drop dup @ pop num ; : yn $ffff00 long ; : gs $ff00 short ; : gn $ff00 long ; : var $ff00ff color emitw 0 gn ; : x [ xy ] @ $10000 / ; : rcr x 0 xor drop if cr then ; : rw xy @ [ $fffcfffd ] + drop if rcr then $ff0000 color cb if 41 emit space then emitw ; : nuld drop ; : .word ( w-) dup -16 and swap $f and if $0 caps? ! then dup state! jump ex yw yn rw gw gn gs cw ys txt cap caps var blu nuld nuld ( ;) : t 0 jcnt ! jblk @ block text 3 lm 1024 rm 3 3 at $10 state ! $10 state* ! : n dup @ -1 ? if ?.cur .word 1 + n ; ] then drop drop $f state! ; ] white [ 103 ] emit ; : ok show $200040 color screen t keyboard ; nload {block 221} ( CAPITALSALLTHEWAY!) {block 222} ( Editor aaaa bbbb cccc dddd keypad insertion) : ripple ( a-) dup dup @ over 1 + @ rot ! swap 1 + ! ; : toc ( -a) jblk @ block jcur @ + ; : toend ( -n) sze jcur @ - 0 max sze min ; : del toc @ qpush toc toend for dup ripple 1 + next 0 swap ! drop ; : dels jcur @ ?f drop 0if ; ] then ml qnew rtocs for del next ; : ins ( n-) sze jcur @ - ?f drop -if ; ] then jblk @ block sze + toend for 1 - dup ripple next ! ; : undo qpop ins ; : undos qnum ?f 0if drop ; ] then for undo next mr ; :var ky [0x19] : key pause [ $64 ] p@ 1 and drop if [ $60 ] p@ dup $3a - drop -if ky ! ; ] then drop then key ; : lst ( n-) jblk ! ok key drop ; nload {block 223} ( Editor main keypad) : ripple ( a- swaps the values at a and a+1) : bpush : bpop ( push and pop the edit stack TBD) : del ( removes the cell at the current cursor) : dels ( removes the extension cells and one non extension coll before the cursor) : undo ( puts back one cell) : undos ( puts back one word which may have extension cells) {block 224} ( Editor keypad cursor) : btog ( n-n) dup 1 and drop if 1 invert and dup jblk ! ; ] then 1 xor dup jblk ! ; : cbtog cblind @ invert cblind ! ; : lastb ( n-n) jlast @ dup jblk ! swap jlast ! ; : blkld jblk @ $fffffffe and -32 + drop -if ; ] then jblk @ load ; : -blk ( n-n) -2 + 18 max dup jblk ! ; : +blk ( n-n) 2 + 252 min dup jblk ! ; : accep drop xx ; : h pad nul dels accep undos coly colr colg btog ml mu md mr -blk colm colc +blk colb nul nul nul cbtog nul nul lastb blkld nul nul nul [ $72515 , $2d0d010b , $110160c , $2b0a0923 , $23a3800 , $3000029 , $3c , {block 225} {block 226} ( App' Conways Game of Life) empt nload ] : cell 32 /mod adj adj over over at 16 u+ 16 + box ; : nocell drop ; : draw dup old @ 1 and jump nocell cell : cells [ 1023 ] for i draw -next ; : gen [ 1023 ] for i tick swap new ! -next [ 1023 ] for i new @ i old ! -next ; : loc row @ 32 * col @ + ; : cur loc dup old @ $ff * $ff0000 + color cell ; : back black screen $303010 color 40 40 at 583 dup box ; : g show back green cells gen keyboard ; : s gen show back blue cells cur keyboard ; : clear 1500 8 erase 16 row ! 16 col ! s ; : t loc old dup @ 1 xor swap ! ; : l -1 col +! col @ 31 and col ! ; : u -1 row +! row @ 31 and row ! ; : d 1 row +! row @ 31 and row ! ; : r 1 col +! col @ 31 and col ! ; : h pad nul nul xx nul nul nul nul nul l u d r nul nul nul nul glide glid2 glid3 glid4 clear s g t nul nul nul nul [ $2500 , 0 , $110160c , 0 , $1c1b1a19 , $20d0815 , 0 , clear glide g h {block 227} : s ( stop) : g ( go) : t ( toggle the square) : ludr ( left up down right) : . ( press s to stop then draw a shape using ludr and t to toggle) : . ( then press g to go or s to single step) : 1234 ( create gliders which move to the four corners counting clockwise from the top left) {block 228} ( Conways Game of Life) :var row [0x10] :var col [0x10] : old [ 1500 block ] + ; : new [ 1504 block ] + ; : nul ; : pos swap 32 /mod swap ; : val 32 * + swap over old @ 1 and + ; : up pos swap 31 + 31 and val ; : dn pos swap 1 + 31 and val ; : lt pos 31 + 31 and swap val ; : rt pos 1 + 31 and swap val ; : n [ 0 ] ; : s dup old @ 1 and ; : y [ 1 ] ; : tick dup 0 up lt dn dn rt rt up up nip jump n n s y n n n n n : adj swap 17 * 40 + ; : st ( rc-) col @ + swap row @ + 32 * + old 1 swap ! ; : glide 0 $2 st 0 1 st 0 0 st 1 0 st 2 1 st ; : glid2 0 0 st 0 1 st 0 2 st 1 2 st 2 1 st ; : glid3 0 2 st 1 2 st 2 2 st 2 1 st 1 0 st ; : glid4 0 0 st 1 0 st 2 0 st 2 1 st 1 2 st ; {block 229} {block 230} ( Wave audio SB, 8 bit, mono, no DMA) empt macro ] : pb@ [compile] 0 $ec 1, ; : pb! $ee 1, [compile] drop ; : /8 $8f8c1 3, ; forth ] : +base $220 + ; ( ^^ *) : ?rd [ $e +base ] a! : *?rd pb@ $80 ? drop if ; ] then *?rd ; : ?wr [ $c +base ] a! : *?wr pb@ $80 ? drop if *?wr then ; : dsp@ ?rd [ $a +base ] a! pb@ ; : dsp! ?wr pb! ; : ?init dsp@ $aa or drop if ?init ; ] then ; : 0dsp [ 6 +base ] a! 1 pb! 30 for pb@ drop next 0 pb! ?init $d1 dsp! ; 0dsp ] : *dac! $10 dsp! dup dsp! /8 ; : dac! *dac! *dac! *dac! *dac! drop ; : length 2 + dup -1 + @ 2/ 2/ ; : ?data dup @ $61746164 or drop if length + ?data ; ] then length ; : sound 100 block 3 + ?data ; ( ^^ *) : play for dup @ dac! 1 + next drop ; {block 231} : pb@ ( -n get byte from port) : pb! ( n- put byte to port) : /8 ( n-n shift 8 bit right) : +base ( n-n add base adress) : ?rd ( wait for DSP read ready) : ?wr ( wait for DSP write ready) : dsp@ ( -n read DSP) : dsp! ( n- write DSP) : ?init ( wait until initialized) : 0dsp ( reset 3 us DSP, turn on speaker) : dac! ( n- write 4 byte to DAC) : length ( a-an return length of record) : ?data ( a-an search data record) : sound ( -an return address and length of sound data) : play ( an- play sound) {block 232} ( App' colorforth explorer) empt 208 load :var strt [0xfffffffc] :var last [0xf600] : ?sze ( a-) dup [ 256 ] block - drop ; : crs ( n-) ?f if for cr next ; ] then drop ; : up1 ( a-a) ?sze +if ; ] then $100 + dup @ $fffffff0 and [ $5c58bc80 ] - drop 0if dup last ! ; ] then up1 ; : .line ( a-) ?sze +if drop ; ] then cr dup $100 / . 4 for 1 + dup @ .word next drop ; : upn ( n-a) ?f if 0 swap for up1 next ; ] then 0 ; : lines strt @ negate 0 max crs strt @ 0 max upn 16 strt @ negate 0 max - ?f if for up1 blue dup .line next then drop drop ; : jok show [ $444444 ] color screen 240 0 at [ r@ $100 / block ] 4 for 1 + dup @ .word next drop [ $0 ] color 0 266 at 1023 296 box 0 0 at lines keyboard ; : go strt @ 9 + upn $100 / noshow ld ; : md strt @ 1 - -8 max strt ! ; : mu strt @ 1 + 256 min strt ! ; : ?? : jed strt @ 9 + upn $100 / dup blk ! ed ; : jh pad nul accept go nul jed nul nul ?? nul nul nul nul md nul nul mu nul nul nul nul nul nul nul nul nul nul nul nul [ $2d2500 , $2f000004 , $0 , $2b000023 , $0 , $0 , $0 , jok jh {block 233} ( Scans the first cell of each block for App' and displays the first 4 words after App') : + : - ( step through the applications) : ? ( displays the applications first shadow block) : o ( loads the application) : . ( requires) [ .word ( from the editor) {block 234} ( floppy driver) macro ] : - $35 1, $ffffffff , ; : delay $e1e6 2, ; : p@ [compile] a! [compile] dup $ec 1, [compile] delay ; : p! [compile] a! $ee 1, [compile] delay [compile] drop ; : 1@ $8a 2, ; : 1! [compile] a! $288 2, [compile] drop ; forth ] : on $1c $3f2 p! ; : off $0 $3f2 p! ; : err -if off warm ; ] then drop ; : msr $3f4 p@ $c0 and ; : out $100000 for msr $80 or drop if *next $0 - ; ] then $3f5 p! pop drop $ 0 ; : in $100000 for msr $c0 or drop if *next $1 - ; ] then $3f5 p@ pop drop $ 0 ; : cmd for out err next ; : conf $0 $70 $0 $13 $4 cmd ; : spec $3 $a2 $3 $3 cmd ; : sense $8 $1 cmd ; nload off {block 235} : - ( ones complement, sets flags) : delay ( dummy write, some hardware seems to need this) : on - ( activate floppy) : off - ( turn motor off, reset FDC) : err n - ( warm start if SF set) : msr - n ( get main status register) : out n - ? ( write a byte to the FIFO, return error on timeout) : in - n ? ( read a byte from the FIFO, return error on timeout) : cmd x n - ( send n bytes to the FIFO) : conf - ( some FDC commands,) : spec - : sense - ( see documentation for details) {block 236} : clrfifo in -if drop ; ] then drop drop clrfifo ; : clrintr sense in err $80 and drop if clrfifo ; ] then clrfifo clrintr ; : wait sense in err $80 and drop if clrfifo wait ; ] then clrfifo ; : cal $0 $7 $2 cmd wait ; : reset /flop $3 $a2 $3 $3 cmd $0 $70 $0 $13 $4 cmd ; : init on pause spec conf clrintr cal ; : xfer for in err over 1! $1 + next drop ; : rd init push $ff $1b $12 $2 $1 $0 pop $0 $e6 $9 cmd block $4 * $400 $12 * xfer off ; : readid $0 $4a $2 cmd $7 for in err next clrintr ; : version $10 $1 cmd in err $90 or drop if $2 - ; ] then $ 0 ; {block 237} : clrfifo - ( discard all remaining input from the FIFO) : clrintr - ( clear all pending interrupts) : wait - ( wait for interrupt) : cal - ( calibrate' move head to track 0) : reset - ( put FDC back to original state) : init - ( initialize controller) : xfer a n - ( reads n bytes from the FIFO to byte address a) : rd b c - ( reads cylinder c to block b) : readid ( for debugging) : version - ? ( tests if your FDC supports enhanced commands) {block 238} [0xc74cc84d] < oken > [0x24810009] [0x2481000d] [0x5a500009] [0x23e88d09] [0x23e80003] [0x2e6c0009] [0x15] < rrrr > [0xf6000004] [0xf0000004] [0xa1c80003] [0xfa06] [0xc7439744] [0xf0000004] [0x82100003] [0x216] [0xb1880004] [0x70000004] [0x26] [0xe6000004] [0x23e80004] [0xa1c80004] [0x70000004] [0xf6000004] [0xf4000004] [0x64ca4004] [0x126] [0x23e80004] [0xa1c80004] [0xf4000004] [0x6] [0xa1c80004] [0x226] [0xf6000004] [0xf4000004] [0xa1c80004] [0xc19a3884] [0xf0000004] [0x82100001] {block 239} {block 240} ( Colours) empt :var pos [0xf] : coll ( rgb-) pos @ 18 * dup dup $100 * swap $10000 * + swap + $f8f8f8 and color ; : tab string [ $0 1, $0 1, $0 1, $111111 , $222222 , $333333 , $444444 , $555555 , $666666 , $777777 , $888888 , $999999 , $aaaaaa , $bbbbbb , $cccccc , $dddddd , $eeeeee , $ffffff , :var cl [0xffffff] : coll pos @ $1 + $4 * tab + $4 / @ dup cl ! $f8f8f8 and color ; : sq ( col-) coll pos @ 64 * dup 32 + 128 at 1 pos +! 92 + 512 box ; : ok show 0 color screen 0 pos ! 15 for sq next keyboard ; {block 241} {block 242} ( App' Timer Interrupt) empt :var ticks [0x299a2] ( Interrupts) 124 load ] : !pit $34 $43 p! ( lo) $a9 $40 p! ( hi) $4 $40 p! ; !pit ] : pic1! $21 p! ; : pic2! $a1 p! ; : !pic cli ( init) $11 dup $20 p! $a0 p! ( irq) $20 pic1! $28 pic2! ( master) 4 pic1! ( slave) 2 pic2! ( 8086 mode) 1 dup pic1! pic2! ( mask irqs) $ff pic2! $fa pic1! ; !pic $20 interrupt ] : timer0 forth' 1 [ ticks ] +! clear ;forth i; [ sti : test cli 0 ticks ! 1 secs sti 100 secs cli ; : tm cli 0 ticks ! sti 1000 ms cli ; lblk @ edit ( Type xx for the colorforth explorer) {block 243} ( Timer Interrupt) : !pit ( sets up the programable interval timer to 1 khz for a 1 ms tick) : . ( for a clock of 14.31818 / 12 or 1.19318167 Mhz +/- 400 Hz this is actually 0.99985 +/- 0.0004 ms or about 0.015 percent fast.) : pic1! ( write an octet to interrupt controller 1) : pic2! ( write an octet to interrupt controller 2) : !pic ( sets up the PIC chips) : . [ $20 interrupt ( is the timer interrupt) : timer0 ( the Forth code to run every timer tick) : . ( use) [ sti ( to enable interrupts,) cli ( to disable) : test ( run a 100 second test to time the timer interrupt with respect to the Real Time Clock.) : tm ( measure cpu ms in timer ticks) {block 244} ( Sounds) jmk :var tempo [0x14] :var mute :var period [0x70f] : tn ( ft-) tempo @ * swap [ 660 ] 50 */ : hz ( tf-) push 1000 1193 pop */ : osc ( tp-) dup period ! split $42 p! $42 p! : tone ( t-) mute @ 0 + drop if drop ; ] then $4f $61 p! ms $4d $61 p! 20 ms ; : click 1 90 osc ; : t 3 tn ; : q 8 tn ; : c 16 tn ; : 2tone 75 q 50 q ; : h1 50 c 54 q 50 q 45 c 60 c ; : h2 40 c 45 q 50 q 50 c 45 c ; : h3 54 c 60 q 54 q 50 c 45 q 40 q 50 t 45 t 50 t 45 t 45 12 tn 40 q 40 32 tn ; : hh : handel h1 h2 h3 ; : piano 55 7 for dup q 3 2 */ next drop ; : cetk 6 c 10 c 8 c 4 c 6 32 tn ; : bomb mute @ 0 + drop if ; ] then $4f $61 p! 500 for 1000 i - + split $42 p! $42 p! 1 ms next $4d $61 p! 1 32 tn ; 2tone jmt {block 245} {block 246} ( App' Test block ') empt 208 load :var strt [0xfffffffd] :var lstup [0xf600] : sze [ 256 ] block ; : crs ( n-) ?f if for cr next ; ] then drop ; : up1 ( a-a) dup sze - drop +if ; ] then $100 + dup @ $fffffff0 and [ $5c58bc80 ] - drop 0if dup lstup ! ; ] then up1 then ; : .line ( a-) dup sze - drop +if drop ; ] then cr dup $100 / . 4 for 1 + dup @ .word next drop ; : upn ( n-a) ?f if 0 swap for up1 next ; ] then 0 ; : lines strt @ negate 0 max crs strt @ 0 max upn 16 for up1 blue dup .line next drop drop ; : ok show [ $444444 ] color screen 240 0 at [ r@ $100 / block ] 4 for 1 + dup @ .word next drop [ $0 ] color 0 266 at 1023 296 box 0 0 at lines keyboard ; : go strt @ 9 + upn $100 / ld xx ; : md strt @ 1 - -8 max strt ! ; : mu strt @ 1 + 256 min strt ! ; : ?? strt @ 9 + upn $100 / 1 + lst xx ; : h pad nul nul xx nul go nul nul ?? nul nul nul nul md nul nul mu nul nul nul nul nul nul nul nul nul nul nul nul [ $0 , $2f000003 , $0 , $2b000023 , $0 , $0 , $0 , ok h {block 247} ( saving and restoring the dictionary) : . ( allows just-in-time compilation) : . ( the code for) [ 2tone ( only exists for as long as it is needed) {block 248} ( Serial terminal) empt 52 load 48 load :var char [0x41] :var qchar :var pos : - ( nn-n) negate + ; : 0eq ( n-) ?f if 0 0 + drop ; ] then 1 0 + drop ; : 0neq 0 + drop ; : eq ( nn-) - 0eq ; : crr pos @ $1e + $ffff and pos ! ; : cls black screen 0 pos ! ; : act qchar @ 0eq if ; ] then pos @ $10000 /mod swap at blue char @ chc emit xy @ pos ! char @ 13 eq if crr then char @ 12 eq if cls then 0 qchar ! ; : wait pause qchar @ 0neq if wait then ; : ch ( c-) rkey? if rkey $ff and char ! -1 qchar ! then ; : ok c cls act 0 pos ! show ch act $0 650 at $202020 color 1024 768 box keyboard ; {block 249} ( The next two blocks are a 256 character 8*8 pixel font) : . ( display characters statically on the screen) : . ( type) [ ok ( then) 65 ch 13 ch 66 ch {block 250} [0x0] [0x0] [0x0] [0x0] [0xf0f0000] [0xffff0f0f] [0x0] < ;is > [0x0] [0x0] [0x0] [0x0] [0x0] < ??d > [0x0] < ;is > [0x0] [0x0] [0x0] [0x0] [0x0] [0xf0f0303] [0xf0f03c3c] [0xc0c0] [0xf0f03f3f] < '@,r8 ov-v8 > [0xfcfcfcfc] [0x3f3f0f0f] [0xf0f0f0f] [0x0] [0x0] [0xf0f03f3f] [0xf0f0000] < ;isdn > [0xc0c0f0f0] [0xf0f03f3f] [0xf0f0000] < ;isdn > [0xc0c0f0f0] [0xf0f0303] [0xf0f03c3c] < ;is;is ;is;is > [0xf0f0ffff] [0xffff] [0xf0f0] < ;isdn > [0x3c3c0f0f] < ??,r8 > [0xc0c0] < dn > [0xf0f0ffff] [0x3030000] < ;is;is > [0xc0c0f0f0] [0xf0f03f3f] < o'?v8 ;isdn > [0xc0c0f0f0] [0xf0f03f3f] < o'?v8 ;isdn ;is;is > [0x0] [0x0] [0x30787830] [0x300030] [0x6c6c6c] [0x0] [0x6cfe6c6c] [0x6c6cfe] < imsr;n > [0x30f80c] < rmyors > [0xc66630] [0x76386c38] [0x76ccdc] [0xc06060] [0x0] [0x60603018] [0x183060] [0x18183060] [0x603018] < ?ybo > [0x663c] < ,rso > [0x3030] [0x0] [0x60303000] < , > [0x0] [0x0] [0x303000] [0x30180c06] [0x80c060] [0xdecec67c] [0x7ce6f6] [0x30307030] [0xfc3030] [0x380ccc78] [0xfccc60] [0x380ccc78] [0x78cc0c] [0xcc6c3c1c] [0x1e0cfe] [0xcf8c0fc] [0x78cc0c] [0xf8c06038] [0x78cccc] [0x180cccfc] [0x303030] [0x78cccc78] [0x78cccc] [0x7ccccc78] [0x70180c] [0x303000] [0x303000] [0x303000] [0x60303000] [0xc0603018] [0x183060] [0xfc0000] [0xfc00] [0xc183060] [0x603018] [0x180ccc78] [0x300030] [0xdedec67c] [0x78c0de] < unnodd > [0xccccfc] [0x7c6666fc] [0xfc6666] [0xc0c0663c] [0x3c66c0] [0x66666cf8] [0xf86c66] [0x786862fe] [0xfe6268] [0x786862fe] [0xf06068] [0xc0c0663c] [0x3e66ce] [0xfccccccc] [0xcccccc] [0x30303078] [0x783030] [0xc0c0c1e] [0x78cccc] [0x786c66e6] [0xe6666c] [0x606060f0] [0xfe6662] [0xfefeeec6] [0xc6c6d6] [0xdef6e6c6] [0xc6c6ce] [0xc6c66c38] [0x386cc6] [0x7c6666fc] [0xf06060] [0xcccccc78] [0x1c78dc] [0x7c6666fc] [0xe6666c] [0x70e0cc78] [0x78cc1c] [0x3030b4fc] [0x783030] [0xcccccccc] [0x78cccc] [0xcccccccc] [0x3078cc] [0xd6c6c6c6] [0xc6eefe] [0x386cc6c6] [0xc66c38] [0x78cccccc] [0x783030] [0x188cc6fe] [0xfe6632] [0x60606078] [0x786060] [0x183060c0] [0x2060c] [0x18181878] [0x781818] < bonrde > [0x0] [0x0] < ?s > [0x183030] [0x0] [0xc780000] [0x76cc7c] [0x7c6060e0] [0xdc6666] < uod > [0x78ccc0] [0x7c0c0c1c] [0x76cccc] < uod > [0x78c0fc] [0xf0606c38] [0xf06060] < uof > [0xf80c7ccc] [0x766c60e0] [0xe66666] [0x30700030] [0x783030] [0xc0c000c] [0x78cccc0c] [0x6c6660e0] [0xe66c78] [0x30303070] [0x783030] < ?nn > [0xc6d6fe] < uid > [0xcccccc] < uod > [0x78cccc] < nn6 > [0xf0607c66] < uof > [0x1e0c7ccc] < in6 > [0xf06066] < do8 > [0xf80c78] [0x307c3010] [0x183430] < unn > [0x76cccc] < unn > [0x3078cc] < 3no > [0x6cfefe] < nuo > [0xc66c38] < unn > [0xf80c7ccc] < yr@ > [0xfc6430] [0xe030301c] [0x1c3030] [0x181818] [0x181818] [0x1c3030e0] [0xe03030] [0xdc76] [0x0] < nvde > [0xfec6c6] {block 251} [0x0] [0x0] [0x0] [0x0] [0xf0f0f0f] [0x0] [0x0] [0x0] [0xf0f0000] [0x3c3c0f0f] [0x0] [0x0] [0x0] [0x0] [0x0] [0x0] [0xf0f0000] [0xf0f] [0x0] [0x0] [0xf0f03c3c] [0xc0c0] [0x0] [0x0] [0xfcfcffff] [0x3f3f] [0x3c3c3c3c] [0xf0f0] [0xf0f0f0f] [0xffff] [0x0] [0xf0f0] [0xf0f03c3c] [0xffff] < ;is > [0xf0f0] < ;is > [0x3f3f] < ;is;is > [0xc0c0] [0xffff] [0x303] [0xf0f0fcfc] [0xfcfc] < ;is > [0x3f3f] < ;is;is > [0xc0c0] < ;is;is > [0x3f3f] < ;is;is > [0xc0c0] [0xf0f0f0f] [0xf0f] [0x0] [0x0] < ;is;is > [0x3f3f] < ;is;is > [0xc0c0] [0x3030000] [0x3f3f] [0xc0c0f0f0] [0x0] [0xffffffff] [0xffffffff] [0xcf8787cf] [0xffcfffcf] [0xff939393] [0xffffffff] [0x93019393] [0xff939301] [0x873f83cf] [0xffcf07f3] [0xe73339ff] [0xff3999cf] [0x89c793c7] [0xff893323] [0xff3f9f9f] [0xffffffff] [0x9f9fcfe7] [0xffe7cf9f] [0xe7e7cf9f] [0xff9fcfe7] [0xc399ff] [0xffff99c3] [0x3cfcfff] [0xffffcfcf] [0xffffffff] [0x9fcfcfff] [0x3ffffff] [0xffffffff] [0xffffffff] [0xffcfcfff] [0xcfe7f3f9] [0xff7f3f9f] [0x21313983] [0xff831909] [0xcfcf8fcf] [0xff03cfcf] [0xc7f33387] [0xff03339f] [0xc7f33387] [0xff8733f3] [0x3393c3e3] [0xffe1f301] [0xf3073f03] [0xff8733f3] [0x73f9fc7] [0xff873333] [0xe7f33303] [0xffcfcfcf] [0x87333387] [0xff873333] [0x83333387] [0xff8fe7f3] [0xffcfcfff] [0xffcfcfff] [0xffcfcfff] [0x9fcfcfff] [0x3f9fcfe7] [0xffe7cf9f] [0xff03ffff] [0xffff03ff] [0xf3e7cf9f] [0xff9fcfe7] [0xe7f33387] [0xffcfffcf] [0x21213983] [0xff873f21] [0x333387cf] [0xff333303] [0x83999903] [0xff039999] [0x3f3f99c3] [0xffc3993f] [0x99999307] [0xff079399] [0x87979d01] [0xff019d97] [0x87979d01] [0xff0f9f97] [0x3f3f99c3] [0xffc19931] [0x3333333] [0xff333333] [0xcfcfcf87] [0xff87cfcf] [0xf3f3f3e1] [0xff873333] [0x87939919] [0xff199993] [0x9f9f9f0f] [0xff01999d] [0x1011139] [0xff393929] [0x21091939] [0xff393931] [0x393993c7] [0xffc79339] [0x83999903] [0xff0f9f9f] [0x33333387] [0xffe38723] [0x83999903] [0xff199993] [0x8f1f3387] [0xff8733e3] [0xcfcf4b03] [0xff87cfcf] [0x33333333] [0xff033333] [0x33333333] [0xffcf8733] [0x29393939] [0xff391101] [0xc7933939] [0xff3993c7] [0x87333333] [0xff87cfcf] [0xe7733901] [0xff0199cd] [0x9f9f9f87] [0xff879f9f] [0xe7cf9f3f] [0xfffdf9f3] [0xe7e7e787] [0xff87e7e7] [0x3993c7ef] [0xffffffff] [0xffffffff] [0xffffff] [0xffe7cfcf] [0xffffffff] [0xf387ffff] [0xff893383] [0x839f9f1f] [0xff239999] [0x3387ffff] [0xff87333f] [0x83f3f3e3] [0xff893333] [0x3387ffff] [0xff873f03] [0xf9f93c7] [0xff0f9f9f] [0x3389ffff] [0x7f38333] [0x89939f1f] [0xff199999] [0xcf8fffcf] [0xff87cfcf] [0xf3f3fff3] [0x873333f3] [0x93999f1f] [0xff199387] [0xcfcfcf8f] [0xff87cfcf] [0x133ffff] [0xff392901] [0x3307ffff] [0xff333333] [0x3387ffff] [0xff873333] [0x9923ffff] [0xf9f8399] [0x3389ffff] [0xe1f38333] [0x8923ffff] [0xff0f9f99] [0x3f83ffff] [0xff07f387] [0xcf83cfef] [0xffe7cbcf] [0x3333ffff] [0xff893333] [0x3333ffff] [0xffcf8733] [0x2939ffff] [0xff930101] [0x9339ffff] [0xff3993c7] [0x3333ffff] [0x7f38333] [0x6703ffff] [0xff039bcf] [0x1fcfcfe3] [0xffe3cfcf] [0xffe7e7e7] [0xffe7e7e7] [0xe3cfcf1f] [0xff1fcfcf] [0xffff2389] [0xffffffff] [0x93c7efff] [0xff013939] {block 252} [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x30] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] [0x31] {block 253} [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x32] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] [0x33] {block 254} [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x34] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] [0x35] {block 255} [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x36] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37] [0x37]