cinera_handmade.network/pervognsen/bitwise/bitwise/bitwise039_1.hmml

63 lines
4.2 KiB
Plaintext

[video member=pervognsen stream_platform=twitch project=bitwise title="Forth Implementation, Part 5" vod_platform=youtube id=4Uy1Mq8p72w annotator=Miblo]
[0:08][Recap and set the stage for the day focusing on bootstrapping][:speech]
[1:39][Review the in-progress bootstrapping of the immediate / compilation modality interpretation][:asm :research]
[8:16][Make "immediate" itself be immediate][:asm]
[9:50][Review the new immediate words "else", "begin", "again", "until", "variable" and "constant"][:asm :research]
[14:59][Demo the idea behind counter and if-else][:asm :run]
[16:12][Determine to work on "immediate?" with a mention of a "hiding" word][:asm :speech]
[18:15][Create "immediate?" in FORTH][:asm]
[19:50][:Run it to find that it works, and remove the hard coded definition][:asm]
[20:57][Consider kicking out the ladder from under us once we're bootstrapped][:asm :speech]
[25:02][Define defop2 macro to quickly define binary operators, using it on an "+" operator][:asm]
[26:54][:Run it to find that it works][:asm]
[27:02][Define "-", "and", "or" and "xor" operators][:asm]
[27:46][:Run it to find that it works][:asm]
[27:56][Define defop1 macro to quickly define unary operators, using it to define "0=" and "<>0"][:asm]
[29:53][:Run it to find that it works][:asm]
[30:05][Alias "not" as "0="]
[31:24][:Run it to find that it works, but that we may want to bootstrap error checking][:asm :"error handling"]
[31:53][Create ">flags"][:asm]
[32:55][:Run it to find that it broke everything][:asm]
[33:28][Make ">flags" just exit for now][:asm]
[33:42][Consider creating ">cfa" and integers][:asm :speech]
[35:57][Rewrite ">flags"][:asm]
[36:17][:Run it to find that it now works][:asm]
[36:23][Revert ">flags" to just exit, and create ">namelen", ">name" and ">cfa"][:asm]
[41:33][:Run it to find that the live ">cfa" doesn't work][:asm]
[41:52][Test ">namelen" and ">name"][:asm]
[42:05][:Run it to find that it's okay][:asm]
[42:26][Remove IMMEDIATE and HIDDEN initialisations][:asm]
[42:40][:Run it to make sure that doesn't break it][:asm]
[42:52][Scrutinise ">cfa" and start our investigations by putting the location of the "drop" word on the stack][:asm]
[44:56][:Run it to see that "drop" is at 1224][:asm]
[45:20][Try to dup our ">cfa" after finding the "drop" word][:asm]
[45:50][:Run it to find that the cfa is at 1852402392][:asm]
[46:01][Try dereferencing the ">namelen"][:asm]
[46:14][:Run it to determine that it's already total garbage][:asm]
[46:22][Try to dup ">namelen" itself][:asm]
[46:26][:Run it to see that this is as expected][:asm]
[46:51][Make ">cfa" correctly dereference ">namelen" using a byte fetch][:asm]
[47:04][:Run it to see that it works][:asm]
[48:17][Determine to create a general number parser, initially redefining "interpret" and "quit"][:asm :parsing]
[51:46][:Run it to find that it didn't work][:asm]
[52:12][Investigate the problem in our new "interpret" and "quit"][:asm :programming :run]
[57:45][Using "break" within \[ and \]][:asm :speech]
[58:36][Continue to investigate "interpret"][:asm :programming :run]
[59:42][Try increasing the stack size][:asm :memory]
[1:00:16][:Run it to find that it works][:asm]
[1:00:37][Try using our new "quit"][:asm]
[1:00:56][:Run it to find that it all works, with a few words on recreating more sophisticated definitions][:asm]
[1:02:07][Consider building better :"error handling"][:asm :speech]
[1:03:22][Define register-manipulation built-ins "sp\@", "sp!", "pc\@", "pc!", "rp\@" and "rp!"][:asm]
[1:08:04][:Run it to see that it works][:asm]
[1:08:08][Define "sp0" and "rp0", and introduce an abort function][:asm]
[1:13:28][:Run it to see that "abort" has put 1234 on the stack, but it ends by crashing in bus_load_word()][:asm]
[1:14:08][Investigate the crash in "abort"][:asm :research]
[1:21:33][Initialise sp0 and rp0 for the docol routine and "rp0" word to use][:asm]
[1:23:11][:Run it to see that it is more reasonable][:asm]
[1:24:31][Prevent "abort" from putting 1234 on the stack, and try to enable it to push the code pointer for "quit" onto the return stack, rather than calling it directly][:asm]
[1:25:08][:Run it to find that it didn't work][:asm]
[1:25:49][Revert "abort" to just quit][:asm]
[1:26:41][Cut off the main stream][:speech]
[/video]