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
Implementing Forth
?
?

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:09Recap and set the stage for the day working on a FORTH system1
🗩
0:09Recap and set the stage for the day working on a FORTH system1
🗩
0:09Recap and set the stage for the day working on a FORTH system1
🗩
2:13Point out Sean's 1992 IOCCC entry 'FIRST & THIRD almost FORTH'2 and others
📖
2:13Point out Sean's 1992 IOCCC entry 'FIRST & THIRD almost FORTH'2 and others
📖
2:13Point out Sean's 1992 IOCCC entry 'FIRST & THIRD almost FORTH'2 and others
📖
10:17Point out Lennart Augustsson's 1996 IOCCC entry 'august'3
📖
10:17Point out Lennart Augustsson's 1996 IOCCC entry 'august'3
📖
10:17Point out Lennart Augustsson's 1996 IOCCC entry 'august'3
📖
12:55Point out JONESFORTH4 with a little comparison with Sean's 'FIRST & THIRD almost FORTH'5
📖
12:55Point out JONESFORTH4 with a little comparison with Sean's 'FIRST & THIRD almost FORTH'5
📖
12:55Point out JONESFORTH4 with a little comparison with Sean's 'FIRST & THIRD almost FORTH'5
📖
18:24Review the addition of if in the assembler
📖
18:24Review the addition of if in the assembler
📖
18:24Review the addition of if in the assembler
📖
20:02Set up to implement our FORTH system, creating forth.asm, forth_test() and assemble_file()
20:02Set up to implement our FORTH system, creating forth.asm, forth_test() and assemble_file()
20:02Set up to implement our FORTH system, creating forth.asm, forth_test() and assemble_file()
34:57Run it to see that it looks good
🏃
34:57Run it to see that it looks good
🏃
34:57Run it to see that it looks good
🏃
35:18FORTH, as a stack-oriented language
🗩
35:18FORTH, as a stack-oriented language
🗩
35:18FORTH, as a stack-oriented language
🗩
37:32Introduce cmd_reg() to support register aliasing
37:32Introduce cmd_reg() to support register aliasing
37:32Introduce cmd_reg() to support register aliasing
39:54Test our new .reg instruction
🏃
🖮
39:54Test our new .reg instruction
🏃
🖮
39:54Test our new .reg instruction
🏃
🖮
40:34Set up FORTH register roles: sp (stack pointer), pc (program counter) and rsp (return stack pointer)
40:34Set up FORTH register roles: sp (stack pointer), pc (program counter) and rsp (return stack pointer)
40:34Set up FORTH register roles: sp (stack pointer), pc (program counter) and rsp (return stack pointer)
43:28Indirect threading-style FORTH, like JONESFORTH6
🗩
43:28Indirect threading-style FORTH, like JONESFORTH6
🗩
43:28Indirect threading-style FORTH, like JONESFORTH6
🗩
47:16Create an add routine, initially in direct threading style
47:16Create an add routine, initially in direct threading style
47:16Create an add routine, initially in direct threading style
53:30Set aside space for the stack
53:30Set aside space for the stack
53:30Set aside space for the stack
56:57Rename add to do_add and introduce do_push to push values onto the stack
56:57Rename add to do_add and introduce do_push to push values onto the stack
56:57Rename add to do_add and introduce do_push to push values onto the stack
1:00:51Enable cmd_uint32() to support variable initialisation from labels
1:00:51Enable cmd_uint32() to support variable initialisation from labels
1:00:51Enable cmd_uint32() to support variable initialisation from labels
1:02:53Run it to find that it assembled, but unexpectedly subtracts 8 from t1
🏃
1:02:53Run it to find that it assembled, but unexpectedly subtracts 8 from t1
🏃
1:02:53Run it to find that it assembled, but unexpectedly subtracts 8 from t1
🏃
1:05:16Consider what may be wrong with cmd_la()
📖
1:05:16Consider what may be wrong with cmd_la()
📖
1:05:16Consider what may be wrong with cmd_la()
📖
1:07:19Run it and talk through the program execution
🏃
1:07:19Run it and talk through the program execution
🏃
1:07:19Run it and talk through the program execution
🏃
1:08:34Step through cmd_la() and inspect the asm
🏃
1:08:34Step through cmd_la() and inspect the asm
🏃
1:08:34Step through cmd_la() and inspect the asm
🏃
1:12:07Test loading into t1 from the program_start label
1:12:07Test loading into t1 from the program_start label
1:12:07Test loading into t1 from the program_start label
1:12:29Run it to find that this works, and it is loading correctly after all, only the disassembler doesn't account for the offset
🏃
1:12:29Run it to find that this works, and it is loading correctly after all, only the disassembler doesn't account for the offset
🏃
1:12:29Run it to find that this works, and it is loading correctly after all, only the disassembler doesn't account for the offset
🏃
1:14:02Run our entire FORTH system
🏃
1:14:02Run our entire FORTH system
🏃
1:14:02Run our entire FORTH system
🏃
1:16:06Create a do_print routine
1:16:06Create a do_print routine
1:16:06Create a do_print routine
1:18:12Run it to see our printout
🏃
1:18:12Run it to see our printout
🏃
1:18:12Run it to see our printout
🏃
1:18:59Rename do_print to do_emit and enable it to print a newline and subtract '0' from the ASCII value
1:18:59Rename do_print to do_emit and enable it to print a newline and subtract '0' from the ASCII value
1:18:59Rename do_print to do_emit and enable it to print a newline and subtract '0' from the ASCII value
1:20:34Run it to see ILLEGAL instructions
🏃
1:20:34Run it to see ILLEGAL instructions
🏃
1:20:34Run it to see ILLEGAL instructions
🏃
1:21:35Call do_push after do_add instructions
1:21:35Call do_push after do_add instructions
1:21:35Call do_push after do_add instructions
1:22:19Run it to look for our printout
🏃
1:22:19Run it to look for our printout
🏃
1:22:19Run it to look for our printout
🏃
1:22:58Fix our program to + '0'
1:22:58Fix our program to + '0'
1:22:58Fix our program to + '0'
1:23:04Run it to see our 3
🏃
1:23:04Run it to see our 3
🏃
1:23:04Run it to see our 3
🏃
1:23:38Enable cmd_loop() to toggle "quiet" running on a key press
1:23:38Enable cmd_loop() to toggle "quiet" running on a key press
1:23:38Enable cmd_loop() to toggle "quiet" running on a key press
1:24:49Rename do_emit to do_putchar and create a do_getchar routine
1:24:49Rename do_emit to do_putchar and create a do_getchar routine
1:24:49Rename do_emit to do_putchar and create a do_getchar routine
1:25:39Run it to see our 3
🏃
1:25:39Run it to see our 3
🏃
1:25:39Run it to see our 3
🏃
1:25:47Enable our program to add user-input values
1:25:47Enable our program to add user-input values
1:25:47Enable our program to add user-input values
1:26:53Run it to see that it doesn't work
🏃
1:26:53Run it to see that it doesn't work
🏃
1:26:53Run it to see that it doesn't work
🏃
1:27:05Fix our input handling
1:27:05Fix our input handling
1:27:05Fix our input handling
1:28:15Step through our program to see how it handles our input
🏃
1:28:15Step through our program to see how it handles our input
🏃
1:28:15Step through our program to see how it handles our input
🏃
1:30:29Fix our program to do_add the final '0'
1:30:29Fix our program to do_add the final '0'
1:30:29Fix our program to do_add the final '0'
1:30:49Run it to see that it's correct
🏃
1:30:49Run it to see that it's correct
🏃
1:30:49Run it to see that it's correct
🏃
1:31:09Direct and indirect threading
🗩
1:31:09Direct and indirect threading
🗩
1:31:09Direct and indirect threading
🗩
1:34:05That's all we have time for today
🗩
1:34:05That's all we have time for today
🗩
1:34:05That's all we have time for today
🗩