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
More Simulator Features
?
?

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
🗩
0:09Recap and set the stage for the day
🗩
0:09Recap and set the stage for the day
🗩
0:52Review the work on expression evaluation, in parse_expr() and related functions
📖
0:52Review the work on expression evaluation, in parse_expr() and related functions
📖
0:52Review the work on expression evaluation, in parse_expr() and related functions
📖
7:05Show the dummy examples of expression evaluation
📖
7:05Show the dummy examples of expression evaluation
📖
7:05Show the dummy examples of expression evaluation
📖
7:46Run the simulator to show the expression evaluation in action
🏃
7:46Run the simulator to show the expression evaluation in action
🏃
7:46Run the simulator to show the expression evaluation in action
🏃
8:03Review the addition of the magic token '$' to denote the current address, and the .print instruction
📖
8:03Review the addition of the magic token '$' to denote the current address, and the .print instruction
📖
8:03Review the addition of the magic token '$' to denote the current address, and the .print instruction
📖
10:26Run the simulator to show our address printouts
🏃
10:26Run the simulator to show our address printouts
🏃
10:26Run the simulator to show our address printouts
🏃
10:36On the utility of subtracting the current address '$' from that of a label
📖
10:36On the utility of subtracting the current address '$' from that of a label
📖
10:36On the utility of subtracting the current address '$' from that of a label
📖
12:40Review the addition of named variables
📖
12:40Review the addition of named variables
📖
12:40Review the addition of named variables
📖
13:37Note that we were in-progress with "if" and the ability to .include files
📖
13:37Note that we were in-progress with "if" and the ability to .include files
📖
13:37Note that we were in-progress with "if" and the ability to .include files
📖
14:27Q&A
🗩
14:27Q&A
🗩
14:27Q&A
🗩
14:50elavid I notice there is no short circuiting for those && and || operators, though that might be a pretty rare need
🗪
14:50elavid I notice there is no short circuiting for those && and || operators, though that might be a pretty rare need
🗪
14:50elavid I notice there is no short circuiting for those && and || operators, though that might be a pretty rare need
🗪
16:23metatlas Can .print print registers as well?
🗪
16:23metatlas Can .print print registers as well?
🗪
16:23metatlas Can .print print registers as well?
🗪
17:00Outline the next features to add to the simulator, including better debugability and exception handling
🗩
17:00Outline the next features to add to the simulator, including better debugability and exception handling
🗩
17:00Outline the next features to add to the simulator, including better debugability and exception handling
🗩
20:41Determine to implement breakpoints
🗩
20:41Determine to implement breakpoints
🗩
20:41Determine to implement breakpoints
🗩
22:12Instruction breakpoints
🗩
22:12Instruction breakpoints
🗩
22:12Instruction breakpoints
🗩
24:14Dive into instruction breakpoints, introducing a Breakpoint struct for Hart to contain and step() to handle
24:14Dive into instruction breakpoints, introducing a Breakpoint struct for Hart to contain and step() to handle
24:14Dive into instruction breakpoints, introducing a Breakpoint struct for Hart to contain and step() to handle
30:22Run the simulator to see that it still works
🏃
30:22Run the simulator to see that it still works
🏃
30:22Run the simulator to see that it still works
🏃
31:10Introduce cmd_loop() and breakpoint_callback() to demo a trick for integrating callbacks without inverting control
31:10Introduce cmd_loop() and breakpoint_callback() to demo a trick for integrating callbacks without inverting control
31:10Introduce cmd_loop() and breakpoint_callback() to demo a trick for integrating callbacks without inverting control
34:25Explain the thought behind this breakpoint callback integration trick
🗩
34:25Explain the thought behind this breakpoint callback integration trick
🗩
34:25Explain the thought behind this breakpoint callback integration trick
🗩
38:21Implement cmd_loop() and breakpoint_callback()
38:21Implement cmd_loop() and breakpoint_callback()
38:21Implement cmd_loop() and breakpoint_callback()
42:39Add a breakpoint to asm_test()
42:39Add a breakpoint to asm_test()
42:39Add a breakpoint to asm_test()
43:14Run it, successfully hit our breakpoint, and take a look at our call stack
🏃
43:14Run it, successfully hit our breakpoint, and take a look at our call stack
🏃
43:14Run it, successfully hit our breakpoint, and take a look at our call stack
🏃
45:33Install emacs
🗹
45:33Install emacs
🗹
45:33Install emacs
🗹
45:48Thoughts on using callbacks as a poor man's coroutine
🗩
45:48Thoughts on using callbacks as a poor man's coroutine
🗩
45:48Thoughts on using callbacks as a poor man's coroutine
🗩
47:30Issues with breakpoint handling, restarting execution
🗩
47:30Issues with breakpoint handling, restarting execution
🗩
47:30Issues with breakpoint handling, restarting execution
🗩
50:49Trace points
🗩
50:49Trace points
🗩
50:49Trace points
🗩
51:55Implement trace points, augmenting the Hart with a trace_load_callback for the load_*() functions to use
51:55Implement trace points, augmenting the Hart with a trace_load_callback for the load_*() functions to use
51:55Implement trace points, augmenting the Hart with a trace_load_callback for the load_*() functions to use
56:34Introduce getline() and begin to enable cmd_loop() to handle and print trace point information
56:34Introduce getline() and begin to enable cmd_loop() to handle and print trace point information
56:34Introduce getline() and begin to enable cmd_loop() to handle and print trace point information
1:00:54Run the simulator to see that it still works
🏃
1:00:54Run the simulator to see that it still works
🏃
1:00:54Run the simulator to see that it still works
🏃
1:01:15Enable cmd_loop() to handle unknown commands
1:01:15Enable cmd_loop() to handle unknown commands
1:01:15Enable cmd_loop() to handle unknown commands
1:01:23Run it to see that it catches unknown commands
🏃
1:01:23Run it to see that it catches unknown commands
🏃
1:01:23Run it to see that it catches unknown commands
🏃
1:01:50Enable cmd_loop() to handle break point toggling
1:01:50Enable cmd_loop() to handle break point toggling
1:01:50Enable cmd_loop() to handle break point toggling
1:03:37Run it to try out our breakpoint handling
🏃
1:03:37Run it to try out our breakpoint handling
🏃
1:03:37Run it to try out our breakpoint handling
🏃
1:04:46Finish enabling cmd_loop() to handle trace points
1:04:46Finish enabling cmd_loop() to handle trace points
1:04:46Finish enabling cmd_loop() to handle trace points
1:06:05Run it and try toggling trace points
🏃
1:06:05Run it and try toggling trace points
🏃
1:06:05Run it and try toggling trace points
🏃
1:06:15Introduce trace_load_callback() and trace_store_callback()
1:06:15Introduce trace_load_callback() and trace_store_callback()
1:06:15Introduce trace_load_callback() and trace_store_callback()
1:08:07Run it to see our trace points working
🏃
1:08:07Run it to see our trace points working
🏃
1:08:07Run it to see our trace points working
🏃
1:08:57Dive into visual disassembly, introducing print_instruction()
1:08:57Dive into visual disassembly, introducing print_instruction()
1:08:57Dive into visual disassembly, introducing print_instruction()
1:26:02Run it to see our instruction disassembly
🏃
1:26:02Run it to see our instruction disassembly
🏃
1:26:02Run it to see our instruction disassembly
🏃
1:27:01Enable print_instruction() to handle the JAL and JALR instructions
1:27:01Enable print_instruction() to handle the JAL and JALR instructions
1:27:01Enable print_instruction() to handle the JAL and JALR instructions
1:28:06Run it to see that our instruction disassembly works
🏃
1:28:06Run it to see that our instruction disassembly works
🏃
1:28:06Run it to see that our instruction disassembly works
🏃
1:29:06Enable print_instruction() to take and display a pc (program counter)
1:29:06Enable print_instruction() to take and display a pc (program counter)
1:29:06Enable print_instruction() to take and display a pc (program counter)
1:30:38Run it to see our program counter along with the disassembled instructions
🏃
1:30:38Run it to see our program counter along with the disassembled instructions
🏃
1:30:38Run it to see our program counter along with the disassembled instructions
🏃
1:31:57Fix the AUIPC case in print_instruction()
1:31:57Fix the AUIPC case in print_instruction()
1:31:57Fix the AUIPC case in print_instruction()
1:32:17Run it to see that the AUIPC, along with all else, now looks reasonable
🏃
1:32:17Run it to see that the AUIPC, along with all else, now looks reasonable
🏃
1:32:17Run it to see that the AUIPC, along with all else, now looks reasonable
🏃
1:33:41Stop now with a glimpse into introspection
🗩
1:33:41Stop now with a glimpse into introspection
🗩
1:33:41Stop now with a glimpse into introspection
🗩
1:34:51Make print_instruction() consistently print [ and ]
1:34:51Make print_instruction() consistently print [ and ]
1:34:51Make print_instruction() consistently print [ and ]
1:35:07Run it and consider fuller breakpoint handling
🏃
1:35:07Run it and consider fuller breakpoint handling
🏃
1:35:07Run it and consider fuller breakpoint handling
🏃
1:35:52Q&A
🗩
1:35:52Q&A
🗩
1:35:52Q&A
🗩
1:36:02elavid Oh, snprintf() returns the number of characters it wanted to print, so "buf +=" can make "buf" be past "end" and cause an overflow if you print again
🗪
1:36:02elavid Oh, snprintf() returns the number of characters it wanted to print, so "buf +=" can make "buf" be past "end" and cause an overflow if you print again
🗪
1:36:02elavid Oh, snprintf() returns the number of characters it wanted to print, so "buf +=" can make "buf" be past "end" and cause an overflow if you print again
🗪
1:36:58Change print_instruction() to use sprintf() rather than snprint()
1:36:58Change print_instruction() to use sprintf() rather than snprint()
1:36:58Change print_instruction() to use sprintf() rather than snprint()
1:38:16Run it to see that it's okay
🏃
1:38:16Run it to see that it's okay
🏃
1:38:16Run it to see that it's okay
🏃
1:38:24Call it a day with a glimpse into event handling and control flow
🗩
1:38:24Call it a day with a glimpse into event handling and control flow
🗩
1:38:24Call it a day with a glimpse into event handling and control flow
🗩