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 2
?
?

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
🗩
0:08Recap and set the stage for the day
🗩
0:08Recap and set the stage for the day
🗩
0:52Review the off-stream work on next and the addition of do_twice and docol with indirect threading in our FORTH implementation
📖
0:52Review the off-stream work on next and the addition of do_twice and docol with indirect threading in our FORTH implementation
📖
0:52Review the off-stream work on next and the addition of do_twice and docol with indirect threading in our FORTH implementation
📖
7:51Describe our test program and its control flow
📖
7:51Describe our test program and its control flow
📖
7:51Describe our test program and its control flow
📖
11:33Demo the program
🏃
11:33Demo the program
🏃
11:33Demo the program
🏃
12:25A few words on threading in JONESFORTH1
🗩
12:25A few words on threading in JONESFORTH1
🗩
12:25A few words on threading in JONESFORTH1
🗩
13:15Implement user-defined words with indirect threading
13:15Implement user-defined words with indirect threading
13:15Implement user-defined words with indirect threading
16:53Run it and hit an "Expected instruction or command" error
🏃
16:53Run it and hit an "Expected instruction or command" error
🏃
16:53Run it and hit an "Expected instruction or command" error
🏃
17:11Change do_twice and do_jump to use .org + 8
17:11Change do_twice and do_jump to use .org + 8
17:11Change do_twice and do_jump to use .org + 8
17:38Run it and hit an "Operand must be constant" error
🏃
17:38Run it and hit an "Operand must be constant" error
🏃
17:38Run it and hit an "Operand must be constant" error
🏃
18:11Enable cmd_org() to parse address offsets
18:11Enable cmd_org() to parse address offsets
18:11Enable cmd_org() to parse address offsets
18:49Run it to see that it still works, recapping that change
🏃
18:49Run it to see that it still works, recapping that change
🏃
18:49Run it to see that it still works, recapping that change
🏃
19:35Rename the existing defword to defcode, and introduce a new defword to handle user-defined words
19:35Rename the existing defword to defcode, and introduce a new defword to handle user-defined words
19:35Rename the existing defword to defcode, and introduce a new defword to handle user-defined words
20:51Run it to see that it still works
🏃
20:51Run it to see that it still works
🏃
20:51Run it to see that it still works
🏃
21:01Up- / downsides of user-defined words
🗩
21:01Up- / downsides of user-defined words
🗩
21:01Up- / downsides of user-defined words
🗩
23:44Change defcode and defword to an indirect threading scheme
23:44Change defcode and defword to an indirect threading scheme
23:44Change defcode and defword to an indirect threading scheme
24:56Run it to see that it does work
🏃
24:56Run it to see that it does work
🏃
24:56Run it to see that it does work
🏃
25:05The minimum set of FORTH runtime semantics
🗩
25:05The minimum set of FORTH runtime semantics
🗩
25:05The minimum set of FORTH runtime semantics
🗩
26:27FORTH dictionary
🗩
26:27FORTH dictionary
🗩
26:27FORTH dictionary
🗩
31:57Defining a dictionary in FORTH, including its : and ; syntax
🗩
31:57Defining a dictionary in FORTH, including its : and ; syntax
🗩
31:57Defining a dictionary in FORTH, including its : and ; syntax
🗩
33:45Set up to implement dictionary
🗩
33:45Set up to implement dictionary
🗩
33:45Set up to implement dictionary
🗩
34:51Introduce cmd_str() and cmd_str() in the assembler
34:51Introduce cmd_str() and cmd_str() in the assembler
34:51Introduce cmd_str() and cmd_str() in the assembler
36:42Begin to implement dictionary entry
36:42Begin to implement dictionary entry
36:42Begin to implement dictionary entry
39:26Enable defcode and defword to support definition naming
39:26Enable defcode and defword to support definition naming
39:26Enable defcode and defword to support definition naming
43:04Run it and hit an "Unexpected token (null) in expression" error
🏃
43:04Run it and hit an "Unexpected token (null) in expression" error
🏃
43:04Run it and hit an "Unexpected token (null) in expression" error
🏃
44:35Add TOKEN_STR to the token_kind_names table
44:35Add TOKEN_STR to the token_kind_names table
44:35Add TOKEN_STR to the token_kind_names table
45:07Run it and step through to investigate the bug
🏃
45:07Run it and step through to investigate the bug
🏃
45:07Run it and step through to investigate the bug
🏃
47:55Fix defcode and defword to use $label rather than $name
47:55Fix defcode and defword to use $label rather than $name
47:55Fix defcode and defword to use $label rather than $name
48:14Run it to find that it doesn't still work
🏃
48:14Run it to find that it doesn't still work
🏃
48:14Run it to find that it doesn't still work
🏃
50:23Reorganise docol and fix init to initialise the rsp (return stack pointer)
50:23Reorganise docol and fix init to initialise the rsp (return stack pointer)
50:23Reorganise docol and fix init to initialise the rsp (return stack pointer)
52:36Run it to find that it handles our input
🏃
52:36Run it to find that it handles our input
🏃
52:36Run it to find that it handles our input
🏃
53:37Make defcode print the address and name
53:37Make defcode print the address and name
53:37Make defcode print the address and name
54:21Run it to see our defined codes, that reg 4 contains an odd-numbered address, and we get to an ILLEGAL instruction
🏃
54:21Run it to see our defined codes, that reg 4 contains an odd-numbered address, and we get to an ILLEGAL instruction
🏃
54:21Run it to see our defined codes, that reg 4 contains an odd-numbered address, and we get to an ILLEGAL instruction
🏃
56:17Note that JALR rounds to two-byte boundaries, and enable defcode to align 4 after the .str instruction
56:17Note that JALR rounds to two-byte boundaries, and enable defcode to align 4 after the .str instruction
56:17Note that JALR rounds to two-byte boundaries, and enable defcode to align 4 after the .str instruction
57:58Run it and step through the emulation to still see unaligned address
🏃
57:58Run it and step through the emulation to still see unaligned address
🏃
57:58Run it and step through the emulation to still see unaligned address
🏃
59:03Fix defcode to correctly compute the alignment
59:03Fix defcode to correctly compute the alignment
59:03Fix defcode to correctly compute the alignment
59:22Run it to find that our addresses are aligned, but our input is not being handled
🏃
59:22Run it to find that our addresses are aligned, but our input is not being handled
🏃
59:22Run it to find that our addresses are aligned, but our input is not being handled
🏃
1:00:36Fix both defword and defcode to compute the alignment in such a way that enables input handling to work
1:00:36Fix both defword and defcode to compute the alignment in such a way that enables input handling to work
1:00:36Fix both defword and defcode to compute the alignment in such a way that enables input handling to work
1:01:24Run it to see that it works
🏃
1:01:24Run it to see that it works
🏃
1:01:24Run it to see that it works
🏃
1:01:35Initialise our dictionary's latest field, introducing defentry and a find routine
1:01:35Initialise our dictionary's latest field, introducing defentry and a find routine
1:01:35Initialise our dictionary's latest field, introducing defentry and a find routine
1:18:25Spec out a find routine in pseudo-C code to use as a template for the assembly
🗩
1:18:25Spec out a find routine in pseudo-C code to use as a template for the assembly
🗩
1:18:25Spec out a find routine in pseudo-C code to use as a template for the assembly
🗩
1:35:26Paste this find routine into our FORTH implementation
1:35:26Paste this find routine into our FORTH implementation
1:35:26Paste this find routine into our FORTH implementation
1:42:42Run it to find that it assembled
🏃
1:42:42Run it to find that it assembled
🏃
1:42:42Run it to find that it assembled
🏃
1:43:01Try out our find routine
1:43:01Try out our find routine
1:43:01Try out our find routine
1:45:58Run it and step through the emulation
🏃
1:45:58Run it and step through the emulation
🏃
1:45:58Run it and step through the emulation
🏃
1:47:12Fix temp_str_len to be a constant, not a label
1:47:12Fix temp_str_len to be a constant, not a label
1:47:12Fix temp_str_len to be a constant, not a label
1:47:31Step through our find routine to find garbage in x11
🏃
1:47:31Step through our find routine to find garbage in x11
🏃
1:47:31Step through our find routine to find garbage in x11
🏃
1:49:37Fix find to compare t2 (rather than t3) with t4
1:49:37Fix find to compare t2 (rather than t3) with t4
1:49:37Fix find to compare t2 (rather than t3) with t4
1:49:44Step through our find routine
🏃
1:49:44Step through our find routine
🏃
1:49:44Step through our find routine
🏃
1:51:09Fix find to load into t4 using lbu rather than lw
1:51:09Fix find to load into t4 using lbu rather than lw
1:51:09Fix find to load into t4 using lbu rather than lw
1:51:29Run it to see that x11 contains 3
🏃
1:51:29Run it to see that x11 contains 3
🏃
1:51:29Run it to see that x11 contains 3
🏃
1:53:05Fix the alignment computation in defentry
1:53:05Fix the alignment computation in defentry
1:53:05Fix the alignment computation in defentry
1:53:56Step through our find routine to find garbage in x14
🏃
1:53:56Step through our find routine to find garbage in x14
🏃
1:53:56Step through our find routine to find garbage in x14
🏃
1:55:27Fix find to load into t7 and t8 using lbu
1:55:27Fix find to load into t7 and t8 using lbu
1:55:27Fix find to load into t7 and t8 using lbu
1:56:33Step through find to find that it found a match
🏃
1:56:33Step through find to find that it found a match
🏃
1:56:33Step through find to find that it found a match
🏃
1:58:39Define _putdigit and _getdigit to provide a pause-point
1:58:39Define _putdigit and _getdigit to provide a pause-point
1:58:39Define _putdigit and _getdigit to provide a pause-point
1:59:55Run it to find that it always prints 4
🏃
1:59:55Run it to find that it always prints 4
🏃
1:59:55Run it to find that it always prints 4
🏃
2:00:16Define a drop word
2:00:16Define a drop word
2:00:16Define a drop word
2:00:56Run it to find that it still prints 4
🏃
2:00:56Run it to find that it still prints 4
🏃
2:00:56Run it to find that it still prints 4
🏃
2:01:14Fix find to push t1 correctly onto the stack
2:01:14Fix find to push t1 correctly onto the stack
2:01:14Fix find to push t1 correctly onto the stack
2:01:26Run it to find that it correctly prints 1
🏃
2:01:26Run it to find that it correctly prints 1
🏃
2:01:26Run it to find that it correctly prints 1
🏃
2:01:32Change temp_str to push "@" rather than "!"
2:01:32Change temp_str to push "@" rather than "!"
2:01:32Change temp_str to push "@" rather than "!"
2:01:40Run it to find that it seems to work on all our test strings
🏃
2:01:40Run it to find that it seems to work on all our test strings
🏃
2:01:40Run it to find that it seems to work on all our test strings
🏃
2:02:13Enable find to push two strings
2:02:13Enable find to push two strings
2:02:13Enable find to push two strings
2:03:19Run it to determine that it works, with a few words on adapting pseudo-C to assembly
🏃
2:03:19Run it to determine that it works, with a few words on adapting pseudo-C to assembly
🏃
2:03:19Run it to determine that it works, with a few words on adapting pseudo-C to assembly
🏃
2:04:41Glimpse into making a command interpreter and compiler
🗩
2:04:41Glimpse into making a command interpreter and compiler
🗩
2:04:41Glimpse into making a command interpreter and compiler
🗩
2:05:31nodist_io What's ion in your bitwise repo?
🗪
2:05:31nodist_io What's ion in your bitwise repo?
🗪
2:05:31nodist_io What's ion in your bitwise repo?
🗪
2:06:07That was it for today
🗩
2:06:07That was it for today
🗩
2:06:07That was it for today
🗩