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
RISC-V Static Assembler
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:54Recommend the Annotated Episode Guide, and plug Miblo's pledge page1 and twitter2, and the forums3
🗩
0:54Recommend the Annotated Episode Guide, and plug Miblo's pledge page1 and twitter2, and the forums3
🗩
0:54Recommend the Annotated Episode Guide, and plug Miblo's pledge page1 and twitter2, and the forums3
🗩
3:54Roadmap for the next few weeks, working on a static RISC-V assembler and making the emulator more standalone
🗩
3:54Roadmap for the next few weeks, working on a static RISC-V assembler and making the emulator more standalone
🗩
3:54Roadmap for the next few weeks, working on a static RISC-V assembler and making the emulator more standalone
🗩
10:15Plan to move on to hardware design once we have the assembler and emulator
🗩
10:15Plan to move on to hardware design once we have the assembler and emulator
🗩
10:15Plan to move on to hardware design once we have the assembler and emulator
🗩
13:25Review the work on the Reverse Polish Notation generator
📖
13:25Review the work on the Reverse Polish Notation generator
📖
13:25Review the work on the Reverse Polish Notation generator
📖
16:03Demo the RPN calculator
🏃
16:03Demo the RPN calculator
🏃
16:03Demo the RPN calculator
🏃
16:56Explain the implementation of gen_rpn() and its asm emittance
📖
16:56Explain the implementation of gen_rpn() and its asm emittance
📖
16:56Explain the implementation of gen_rpn() and its asm emittance
📖
26:28Q&A
🗩
26:28Q&A
🗩
26:28Q&A
🗩
27:01voxygon Is the ASCII assumed?
🗪
27:01voxygon Is the ASCII assumed?
🗪
27:01voxygon Is the ASCII assumed?
🗪
27:59Setup to work on the static assembler, creating assembler.ion
🗹
27:59Setup to work on the static assembler, creating assembler.ion
🗹
27:59Setup to work on the static assembler, creating assembler.ion
🗹
30:12Static assembler
🗩
30:12Static assembler
🗩
30:12Static assembler
🗩
32:10Embark on the lexer, introducing the Lexer struct and next_token()
32:10Embark on the lexer, introducing the Lexer struct and next_token()
32:10Embark on the lexer, introducing the Lexer struct and next_token()
39:52Introduce scan_int() and adapt the whole lot of lex.c to Ion
39:52Introduce scan_int() and adapt the whole lot of lex.c to Ion
39:52Introduce scan_int() and adapt the whole lot of lex.c to Ion
44:57Organise the projects, pulling out test functions to test.ion
🗹
44:57Organise the projects, pulling out test functions to test.ion
🗹
44:57Organise the projects, pulling out test functions to test.ion
🗹
47:38Introduce init_lexer() and lexer_test()
47:38Introduce init_lexer() and lexer_test()
47:38Introduce init_lexer() and lexer_test()
49:22Step through our lexer to see that it works
🏃
49:22Step through our lexer to see that it works
🏃
49:22Step through our lexer to see that it works
🏃
50:02Enable next_token() to handle EOF, and lexer_test() to print out the token kind
50:02Enable next_token() to handle EOF, and lexer_test() to print out the token kind
50:02Enable next_token() to handle EOF, and lexer_test() to print out the token kind
52:19Run it to see that it handles types correctly
🏃
52:19Run it to see that it handles types correctly
🏃
52:19Run it to see that it handles types correctly
🏃
53:10Implement lexer_error()
53:10Implement lexer_error()
53:10Implement lexer_error()
56:17Test out our error handling
🏃
56:17Test out our error handling
🏃
56:17Test out our error handling
🏃
56:30Make init_lexer() take a filename
56:30Make init_lexer() take a filename
56:30Make init_lexer() take a filename
57:11Run it to see our filename
🏃
57:11Run it to see our filename
🏃
57:11Run it to see our filename
🏃
57:35Adapt scan_char() and related functions from lex.c to Ion
57:35Adapt scan_char() and related functions from lex.c to Ion
57:35Adapt scan_char() and related functions from lex.c to Ion
1:04:31Add a string test in lexer_test()
1:04:31Add a string test in lexer_test()
1:04:31Add a string test in lexer_test()
1:05:29Hit our assertion in the compiler's scan_str() due to a \-escaped closing quote mark
🏃
1:05:29Hit our assertion in the compiler's scan_str() due to a \-escaped closing quote mark
🏃
1:05:29Hit our assertion in the compiler's scan_str() due to a \-escaped closing quote mark
🏃
1:06:55Remove that assertion from scan_str() to allow the compiler to throw an error instead
1:06:55Remove that assertion from scan_str() to allow the compiler to throw an error instead
1:06:55Remove that assertion from scan_str() to allow the compiler to throw an error instead
1:08:07Run it to see that our lexer_test() works
🏃
1:08:07Run it to see that our lexer_test() works
🏃
1:08:07Run it to see that our lexer_test() works
🏃
1:09:04Implement stretchy buffers in Ion
1:09:04Implement stretchy buffers in Ion
1:09:04Implement stretchy buffers in Ion
1:19:30Consult the C spec4 to see if Ion could support the ternary operator
📖
1:19:30Consult the C spec4 to see if Ion could support the ternary operator
📖
1:19:30Consult the C spec4 to see if Ion could support the ternary operator
📖
1:20:28Finish implementing Ion's stretchy buffers, noting differences from the C implementation
1:20:28Finish implementing Ion's stretchy buffers, noting differences from the C implementation
1:20:28Finish implementing Ion's stretchy buffers, noting differences from the C implementation
1:26:29Enable scan_str() to use strbuf_push()
1:26:29Enable scan_str() to use strbuf_push()
1:26:29Enable scan_str() to use strbuf_push()
1:28:04Make resolve_expr_binary_op() disallow pointer arithmetic on void* / 0-size elements
1:28:04Make resolve_expr_binary_op() disallow pointer arithmetic on void* / 0-size elements
1:28:04Make resolve_expr_binary_op() disallow pointer arithmetic on void* / 0-size elements
1:30:36Test if the streams parse correctly
🏃
1:30:36Test if the streams parse correctly
🏃
1:30:36Test if the streams parse correctly
🏃
1:31:08Test buffer regrowth
🏃
1:31:08Test buffer regrowth
🏃
1:31:08Test buffer regrowth
🏃
1:32:06Reflect on our stretchy buffers in Ion
📖
1:32:06Reflect on our stretchy buffers in Ion
📖
1:32:06Reflect on our stretchy buffers in Ion
📖
1:35:06Adapt strbuf_printf() from C to Ion, and implement buf_fit() and strbuf_end()
1:35:06Adapt strbuf_printf() from C to Ion, and implement buf_fit() and strbuf_end()
1:35:06Adapt strbuf_printf() from C to Ion, and implement buf_fit() and strbuf_end()
1:40:51Add a strbuf_printf() test to lexer_test()
1:40:51Add a strbuf_printf() test to lexer_test()
1:40:51Add a strbuf_printf() test to lexer_test()
1:41:50Run it to see that it looks reasonable
🏃
1:41:50Run it to see that it looks reasonable
🏃
1:41:50Run it to see that it looks reasonable
🏃
1:41:58Stop the main stream here, with a few final thoughts on Ion's stretchy buffers and the lexer
🗩
1:41:58Stop the main stream here, with a few final thoughts on Ion's stretchy buffers and the lexer
🗩
1:41:58Stop the main stream here, with a few final thoughts on Ion's stretchy buffers and the lexer
🗩