We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
Forth Implementation, Part 5
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:08Recap and set the stage for the day focusing on bootstrapping
🗩
0:08Recap and set the stage for the day focusing on bootstrapping
🗩
0:08Recap and set the stage for the day focusing on bootstrapping
🗩
1:39Review the in-progress bootstrapping of the immediate / compilation modality interpretation
📖
1:39Review the in-progress bootstrapping of the immediate / compilation modality interpretation
📖
1:39Review the in-progress bootstrapping of the immediate / compilation modality interpretation
📖
8:16Make "immediate" itself be immediate
8:16Make "immediate" itself be immediate
8:16Make "immediate" itself be immediate
9:50Review the new immediate words "else", "begin", "again", "until", "variable" and "constant"
📖
9:50Review the new immediate words "else", "begin", "again", "until", "variable" and "constant"
📖
9:50Review the new immediate words "else", "begin", "again", "until", "variable" and "constant"
📖
14:59Demo the idea behind counter and if-else
🏃
14:59Demo the idea behind counter and if-else
🏃
14:59Demo the idea behind counter and if-else
🏃
16:12Determine to work on "immediate?" with a mention of a "hiding" word
🗩
16:12Determine to work on "immediate?" with a mention of a "hiding" word
🗩
16:12Determine to work on "immediate?" with a mention of a "hiding" word
🗩
18:15Create "immediate?" in FORTH
18:15Create "immediate?" in FORTH
18:15Create "immediate?" in FORTH
19:50Run it to find that it works, and remove the hard coded definition
🏃
19:50Run it to find that it works, and remove the hard coded definition
🏃
19:50Run it to find that it works, and remove the hard coded definition
🏃
20:57Consider kicking out the ladder from under us once we're bootstrapped
🗩
20:57Consider kicking out the ladder from under us once we're bootstrapped
🗩
20:57Consider kicking out the ladder from under us once we're bootstrapped
🗩
25:02Define defop2 macro to quickly define binary operators, using it on an "+" operator
25:02Define defop2 macro to quickly define binary operators, using it on an "+" operator
25:02Define defop2 macro to quickly define binary operators, using it on an "+" operator
26:54Run it to find that it works
🏃
26:54Run it to find that it works
🏃
26:54Run it to find that it works
🏃
27:02Define "-", "and", "or" and "xor" operators
27:02Define "-", "and", "or" and "xor" operators
27:02Define "-", "and", "or" and "xor" operators
27:46Run it to find that it works
🏃
27:46Run it to find that it works
🏃
27:46Run it to find that it works
🏃
27:56Define defop1 macro to quickly define unary operators, using it to define "0=" and "<>0"
27:56Define defop1 macro to quickly define unary operators, using it to define "0=" and "<>0"
27:56Define defop1 macro to quickly define unary operators, using it to define "0=" and "<>0"
29:53Run it to find that it works
🏃
29:53Run it to find that it works
🏃
29:53Run it to find that it works
🏃
30:05Alias "not" as "0="
30:05Alias "not" as "0="
30:05Alias "not" as "0="
31:24Run it to find that it works, but that we may want to bootstrap error checking
🏃
31:24Run it to find that it works, but that we may want to bootstrap error checking
🏃
31:24Run it to find that it works, but that we may want to bootstrap error checking
🏃
31:53Create ">flags"
31:53Create ">flags"
31:53Create ">flags"
32:55Run it to find that it broke everything
🏃
32:55Run it to find that it broke everything
🏃
32:55Run it to find that it broke everything
🏃
33:28Make ">flags" just exit for now
33:28Make ">flags" just exit for now
33:28Make ">flags" just exit for now
33:42Consider creating ">cfa" and integers
🗩
33:42Consider creating ">cfa" and integers
🗩
33:42Consider creating ">cfa" and integers
🗩
35:57Rewrite ">flags"
35:57Rewrite ">flags"
35:57Rewrite ">flags"
36:17Run it to find that it now works
🏃
36:17Run it to find that it now works
🏃
36:17Run it to find that it now works
🏃
36:23Revert ">flags" to just exit, and create ">namelen", ">name" and ">cfa"
36:23Revert ">flags" to just exit, and create ">namelen", ">name" and ">cfa"
36:23Revert ">flags" to just exit, and create ">namelen", ">name" and ">cfa"
41:33Run it to find that the live ">cfa" doesn't work
🏃
41:33Run it to find that the live ">cfa" doesn't work
🏃
41:33Run it to find that the live ">cfa" doesn't work
🏃
41:52Test ">namelen" and ">name"
41:52Test ">namelen" and ">name"
41:52Test ">namelen" and ">name"
42:05Run it to find that it's okay
🏃
42:05Run it to find that it's okay
🏃
42:05Run it to find that it's okay
🏃
42:26Remove IMMEDIATE and HIDDEN initialisations
42:26Remove IMMEDIATE and HIDDEN initialisations
42:26Remove IMMEDIATE and HIDDEN initialisations
42:40Run it to make sure that doesn't break it
🏃
42:40Run it to make sure that doesn't break it
🏃
42:40Run it to make sure that doesn't break it
🏃
42:52Scrutinise ">cfa" and start our investigations by putting the location of the "drop" word on the stack
42:52Scrutinise ">cfa" and start our investigations by putting the location of the "drop" word on the stack
42:52Scrutinise ">cfa" and start our investigations by putting the location of the "drop" word on the stack
44:56Run it to see that "drop" is at 1224
🏃
44:56Run it to see that "drop" is at 1224
🏃
44:56Run it to see that "drop" is at 1224
🏃
45:20Try to dup our ">cfa" after finding the "drop" word
45:20Try to dup our ">cfa" after finding the "drop" word
45:20Try to dup our ">cfa" after finding the "drop" word
45:50Run it to find that the cfa is at 1852402392
🏃
45:50Run it to find that the cfa is at 1852402392
🏃
45:50Run it to find that the cfa is at 1852402392
🏃
46:01Try dereferencing the ">namelen"
46:01Try dereferencing the ">namelen"
46:01Try dereferencing the ">namelen"
46:14Run it to determine that it's already total garbage
🏃
46:14Run it to determine that it's already total garbage
🏃
46:14Run it to determine that it's already total garbage
🏃
46:22Try to dup ">namelen" itself
46:22Try to dup ">namelen" itself
46:22Try to dup ">namelen" itself
46:26Run it to see that this is as expected
🏃
46:26Run it to see that this is as expected
🏃
46:26Run it to see that this is as expected
🏃
46:51Make ">cfa" correctly dereference ">namelen" using a byte fetch
46:51Make ">cfa" correctly dereference ">namelen" using a byte fetch
46:51Make ">cfa" correctly dereference ">namelen" using a byte fetch
47:04Run it to see that it works
🏃
47:04Run it to see that it works
🏃
47:04Run it to see that it works
🏃
48:17Determine to create a general number parser, initially redefining "interpret" and "quit"
48:17Determine to create a general number parser, initially redefining "interpret" and "quit"
48:17Determine to create a general number parser, initially redefining "interpret" and "quit"
51:46Run it to find that it didn't work
🏃
51:46Run it to find that it didn't work
🏃
51:46Run it to find that it didn't work
🏃
52:12Investigate the problem in our new "interpret" and "quit"
🏃
🖮
52:12Investigate the problem in our new "interpret" and "quit"
🏃
🖮
52:12Investigate the problem in our new "interpret" and "quit"
🏃
🖮
57:45Using "break" within [ and ]
🗩
57:45Using "break" within [ and ]
🗩
57:45Using "break" within [ and ]
🗩
58:36Continue to investigate "interpret"
🏃
🖮
58:36Continue to investigate "interpret"
🏃
🖮
58:36Continue to investigate "interpret"
🏃
🖮
59:42Try increasing the stack size
59:42Try increasing the stack size
59:42Try increasing the stack size
1:00:16Run it to find that it works
🏃
1:00:16Run it to find that it works
🏃
1:00:16Run it to find that it works
🏃
1:00:37Try using our new "quit"
1:00:37Try using our new "quit"
1:00:37Try using our new "quit"
1:00:56Run it to find that it all works, with a few words on recreating more sophisticated definitions
🏃
1:00:56Run it to find that it all works, with a few words on recreating more sophisticated definitions
🏃
1:00:56Run it to find that it all works, with a few words on recreating more sophisticated definitions
🏃
1:02:07Consider building better error handling
🗩
1:02:07Consider building better error handling
🗩
1:02:07Consider building better error handling
🗩
1:03:22Define register-manipulation built-ins "sp@", "sp!", "pc@", "pc!", "rp@" and "rp!"
1:03:22Define register-manipulation built-ins "sp@", "sp!", "pc@", "pc!", "rp@" and "rp!"
1:03:22Define register-manipulation built-ins "sp@", "sp!", "pc@", "pc!", "rp@" and "rp!"
1:08:04Run it to see that it works
🏃
1:08:04Run it to see that it works
🏃
1:08:04Run it to see that it works
🏃
1:08:08Define "sp0" and "rp0", and introduce an abort function
1:08:08Define "sp0" and "rp0", and introduce an abort function
1:08:08Define "sp0" and "rp0", and introduce an abort function
1:13:28Run it to see that "abort" has put 1234 on the stack, but it ends by crashing in bus_load_word()
🏃
1:13:28Run it to see that "abort" has put 1234 on the stack, but it ends by crashing in bus_load_word()
🏃
1:13:28Run it to see that "abort" has put 1234 on the stack, but it ends by crashing in bus_load_word()
🏃
1:14:08Investigate the crash in "abort"
📖
1:14:08Investigate the crash in "abort"
📖
1:14:08Investigate the crash in "abort"
📖
1:21:33Initialise sp0 and rp0 for the docol routine and "rp0" word to use
1:21:33Initialise sp0 and rp0 for the docol routine and "rp0" word to use
1:21:33Initialise sp0 and rp0 for the docol routine and "rp0" word to use
1:23:11Run it to see that it is more reasonable
🏃
1:23:11Run it to see that it is more reasonable
🏃
1:23:11Run it to see that it is more reasonable
🏃
1:24:31Prevent "abort" from putting 1234 on the stack, and try to enable it to push the code pointer for "quit" onto the return stack, rather than calling it directly
1:24:31Prevent "abort" from putting 1234 on the stack, and try to enable it to push the code pointer for "quit" onto the return stack, rather than calling it directly
1:24:31Prevent "abort" from putting 1234 on the stack, and try to enable it to push the code pointer for "quit" onto the return stack, rather than calling it directly
1:25:08Run it to find that it didn't work
🏃
1:25:08Run it to find that it didn't work
🏃
1:25:08Run it to find that it didn't work
🏃
1:25:49Revert "abort" to just quit
1:25:49Revert "abort" to just quit
1:25:49Revert "abort" to just quit
1:26:41Cut off the main stream
🗩
1:26:41Cut off the main stream
🗩
1:26:41Cut off the main stream
🗩