From 4a1cbdad5c74a148b6cea26c13d560e6a6d31a1a Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sat, 2 Jun 2018 16:55:09 +0100 Subject: [PATCH] Annotate bitwise032 --- pervognsen/bitwise/bitwise/bitwise032.hmml | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pervognsen/bitwise/bitwise/bitwise032.hmml diff --git a/pervognsen/bitwise/bitwise/bitwise032.hmml b/pervognsen/bitwise/bitwise/bitwise032.hmml new file mode 100644 index 0000000..1f1e3a1 --- /dev/null +++ b/pervognsen/bitwise/bitwise/bitwise032.hmml @@ -0,0 +1,55 @@ +[video member=pervognsen stream_platform=twitch project=bitwise title="More Simulator Features" vod_platform=youtube id=RPs-QLExKm0 annotator=Miblo] +[0:09][Recap and set the stage for the day][:speech] +[0:52][Review the work on expression evaluation, in parse_expr() and related functions][:asm :language :parsing :research] +[7:05][Show the dummy examples of expression evaluation][:asm :language :parsing :research] +[7:46][:Run the simulator to show the expression evaluation in action][:asm :language :parsing] +[8:03][Review the addition of the magic token '$' to denote the current address, and the .print instruction][:asm :language :parsing :research] +[10:26][:Run the simulator to show our address printouts][:asm :language :parsing] +[10:36][On the utility of subtracting the current address '$' from that of a label][:asm :language :parsing :research] +[12:40][Review the addition of named variables][:asm :language :parsing :research] +[13:37][Note that we were in-progress with "if" and the ability to .include files][:asm :language :parsing :research] +[14:27][Q&A][:speech] +[14:50][@elavid][I notice there is no short circuiting for those && and || operators, though that might be a pretty rare need][:asm :language] +[16:23][@metatlas][Can .print print registers as well?][:asm :language] +[17:00][Outline the next features to add to the simulator, including better debugability and exception handling][:asm :emulation :language :speech] +[20:41][Determine to implement breakpoints][:asm :emulation :language :speech] +[22:12][Instruction breakpoints][:asm :emulation :language :speech] +[24:14][Dive into instruction breakpoints, introducing a Breakpoint struct for Hart to contain and step() to handle][:asm :emulation :hardware] +[30:22][:Run the simulator to see that it still works][:asm :emulation :hardware] +[31:10][Introduce cmd_loop() and breakpoint_callback() to demo a trick for integrating callbacks without inverting control][:asm :emulation :language] +[34:25][Explain the thought behind this breakpoint callback integration trick][:asm :emulation :language :speech] +[38:21][Implement cmd_loop() and breakpoint_callback()][:asm :emulation :language] +[42:39][Add a breakpoint to asm_test()][:asm :emulation :language] +[43:14][:Run it, successfully hit our breakpoint, and take a look at our call stack][:asm :emulation :language] +[45:33][Install emacs][:admin] +[45:48][Thoughts on using callbacks as a poor man's coroutine][:asm :emulation :language :speech] +[47:30][Issues with breakpoint handling, restarting execution][:asm :emulation :language :speech] +[50:49][Trace points][:asm :emulation :language :speech] +[51:55][Implement trace points, augmenting the Hart with a trace_load_callback for the load_*() functions to use][:asm :emulation :language] +[56:34][Introduce getline() and begin to enable cmd_loop() to handle and print trace point information][:asm :emulation :language] +[1:00:54][:Run the simulator to see that it still works][:asm :emulation :language] +[1:01:15][Enable cmd_loop() to handle unknown commands][:asm :emulation :language] +[1:01:23][:Run it to see that it catches unknown commands][:asm :emulation :language] +[1:01:50][Enable cmd_loop() to handle break point toggling][:asm :emulation :language] +[1:03:37][:Run it to try out our breakpoint handling][:asm :emulation :language] +[1:04:46][Finish enabling cmd_loop() to handle trace points][:asm :emulation :language] +[1:06:05][:Run it and try toggling trace points][:asm :emulation :language] +[1:06:15][Introduce trace_load_callback() and trace_store_callback()][:asm :emulation :language] +[1:08:07][:Run it to see our trace points working][:asm :emulation :language] +[1:08:57][Dive into visual disassembly, introducing print_instruction()][:asm :emulation] +[1:26:02][:Run it to see our instruction disassembly][:asm :emulation] +[1:27:01][Enable print_instruction() to handle the JAL and JALR instructions][:asm :emulation] +[1:28:06][:Run it to see that our instruction disassembly works][:asm :emulation] +[1:29:06][Enable print_instruction() to take and display a pc (program counter)][:asm :emulation] +[1:30:38][:Run it to see our program counter along with the disassembled instructions][:asm :emulation] +[1:31:57][Fix the AUIPC case in print_instruction()][:asm :emulation] +[1:32:17][:Run it to see that the AUIPC, along with all else, now looks reasonable][:asm :emulation] +[1:33:41][Stop now with a glimpse into introspection][:asm :emulation :speech] +[1:34:51][Make print_instruction() consistently print \[ and \]][:asm :emulation] +[1:35:07][:Run it and consider fuller breakpoint handling][:asm :emulation] +[1:35:52][Q&A][:speech] +[1:36:02][@elavid][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:58][Change print_instruction() to use sprintf() rather than snprint()] +[1:38:16][:Run it to see that it's okay] +[1:38:24][Call it a day with a glimpse into event handling and control flow][:asm :emulation :speech] +[/video]