[video member=miotatsu stream_platform=twitch project=riscy title="Hello World in RISC-V ASM (2/2)" vod_platform=youtube id=bFsmu0mcM-k annotator=Miblo] [0:01][Welcome to the stream][:speech] [0:33][Review additions to the Useful Links: unistd.h[ref site=GitHub page="linux / include / uapi / asm-generic / unistd.h" url=https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/unistd.h] and RISC-V: Linux Syscall Interface[ref site=Sourceware page="[PATCH 10/12] RISC-V: Linux Syscall Interface" url=https://sourceware.org/ml/libc-alpha/2017-06/msg00626.html]][:research] [2:48][@polytomous][Unfortunately don't have time to watch, but I just came by to say that your title is great] [3:02][Continue reading through the RISC-V Linux Syscall Interface[ref site=Sourceware page="[PATCH 10/12] RISC-V: Linux Syscall Interface" url=https://sourceware.org/ml/libc-alpha/2017-06/msg00626.html]][:research] [4:16][@polytomous][You best stream soon so I can actually watch you work on this project[ref site=YouTube page="RISCY BUSINESS" url=http://riscy.tv/]] [4:55][Finish reading through the RISC-V Linux Syscall Interface[ref site=Sourceware page="[PATCH 10/12] RISC-V: Linux Syscall Interface" url=https://sourceware.org/ml/libc-alpha/2017-06/msg00626.html]][:research] [5:34][Return to hello.S assembly and include the li and mv instructions in loop 1][:asm] [6:45][@JumpOnMeh][Hi, are you coding on a Raspberry Pi?] [7:32][Lower the exit call in main() from hula to assembly][:asm] [8:58][@JumpOnMeh][If you don't mind me asking, what is RISC-V?[ref site=RISC-V url=https://riscv.org/]] [11:02][Set up to lower the return call in main() from hula to assembly][:asm :speech] [11:13][@JumpOnMeh][I'm taking a degree in comp sci right now. Kinda interested in learning new languages][:language] [11:40][Plug ~bitwise[ref site=Bitwise url=https://bitwise.handmade.network/]][:speech] [13:14][Lower the return call in main() from hula to assembly][:asm] [14:27][Compare our newly written RISC-V assembly with hello.S in the repo,[ref site=GitLab page="hula / hello.S" url=https://gitlab.com/riscy-business/hula/blob/master/hello.S] and consult the RISC-V ELF psABI specification[ref site=GitHub page="RISC-V ELF psABI specification" url=https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md] for documentation on the stack frame][:research] [17:54][Push the return address of main onto the stack][:asm] [21:14][A few words on generating the code for multiple returns, wondering what [@pervognsen Per] has to say about it][:"code generation" :speech] [22:12][Enable main to correctly return from all branches, and offset the stack pointer[ref site=GitLab page="hula / hello.S" url=https://gitlab.com/riscy-business/hula/blob/master/hello.S]][:asm] [30:32][A few words on using the temporary "a" registers, and the possible :performance ramifications of being tight with register usage][:speech] [32:31][Enable main to reuse the a1 register][:asm] [34:28][Fix main to correctly break out of the print loop][:asm] [36:48][Read through hello.S to check it all looks correct][:asm :research] [40:08][Fix _start to correctly pop the loaded word off the stack][:asm] [40:31][Finish reading through hello.S and consider it all good][:asm :research] [41:15][Assemble our program to see assembly errors][:asm] [42:13][Remove comment and fix assembly errors][:asm] [42:42][Assemble our program to see errors on bez and beq][:asm] [44:27][Grab the RISC-V Reader[ref title="RISC-V Reader" author="David Patterson and Andrew Waterman" publisher="Strawberry Canyon" isbn=9780999249116 url=http://www.riscvbook.com/]][:admin] [45:24][Rename bez to beqz, and fix our beq calls, in conjunction with the RISC-V Reader[ref title="RISC-V Reader" author="David Patterson and Andrew Waterman" publisher="Strawberry Canyon" isbn=9780999249116 url=http://www.riscvbook.com/]][:asm] [46:48][Consult the RISC-V Reader[ref title="RISC-V Reader" author="David Patterson and Andrew Waterman" publisher="Strawberry Canyon" isbn=9780999249116 url=http://www.riscvbook.com/] for information on loading into the frame pointer][:asm :research] [51:12][Try to make _start load 0 into s0 rather than fp][:asm] [51:55][Assemble it to see that this fixed that error][:asm] [52:44][Stick .section in front of .rodata as per the RISC-V Reader[ref title="RISC-V Reader" author="David Patterson and Andrew Waterman" publisher="Strawberry Canyon" isbn=9780999249116 url=http://www.riscvbook.com/]][:asm] [53:08][Assemble it successfully][:asm] [54:07][Link our program with ld][:asm] [54:20][:Run it to see that it works][:asm] [54:41][Inspect our binary][:research] [56:00][On writing this program as an example of code that hula should compile to][:asm :language :speech] [56:18][Streamline the return code loads in main][:asm] [1:00:37][Prevent _start from zeroing out the frame pointer][:asm] [1:02:23][Assemble and link it][:asm] [1:02:36][:Run it to see that it still works][:asm] [1:02:45][Consider the episode done, with a glimpse into the future booting Fedora directly, hand-writing the machine code for our "Hello, World!" and covering compressed instructions][:asm :speech] [1:07:32][Thoughts on avoiding :security vulnerabilities by owning the entire chain of production][:fabrication :hardware :speech] [1:12:57][Further thoughts on the elegance of FORTH and its suitability for bootstrapping][:asm :speech] [1:15:50][Glimpse into the future designing a custom case, streaming from our RISC-V system and building a Linux distribution for it][:speech] [1:17:16][End this episode here][:speech] [/video]