00:11:16 -!- tromp has quit (Remote host closed the connection). 00:11:48 -!- tromp has joined. 00:12:49 -!- kevinalh has quit (Ping timeout: 264 seconds). 00:20:41 -!- kevinalh has joined. 00:55:37 working on a token-based rewriting language that has some vague resemblance to concatenative languages. 00:55:59 with native support for lists, anything is possible. 00:57:51 https://hatebin.com/ssyfkqowua 01:00:19 while loops are proving tricky with the "infix" syntax. 01:01:15 if/else was also tricky. it assumes a default evaluation order of right to left. writing it to be direction agnostic is kind of the next goal. 01:03:02 if rdrop is evaluated before rswap, for example, you'll end up swapping two unrelated values on the right-hand side, and that'll be messy if anything else is beyond that context. 02:03:07 -!- Phantom_Hoover has joined. 02:04:53 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”). 03:07:10 -!- Phantom_Hoover has quit (Ping timeout: 256 seconds). 03:25:10 imode: that language looks fun 03:25:22 and frankly I like the syntax, so I think i'm going to steal it for my own use 03:25:24 * moony runs 03:27:30 for less esoteric purposes, mind you 03:45:53 that vaguely reminds me of that one time I tried TCL. 03:46:05 (because of the many square brackets) 03:47:03 yay, Tcl 03:48:53 Have you tried to program in PostScript one time, though? (Apparently, even the inventor of INTERCAL uses PostScript.) 03:50:05 zzo38: I think you read the M:tG comprule updates. If I cast a Migratory Greathorn and choose to mutate an opponent's creature with it, then who controls the triggered ability triggered from the Greathorn? 03:52:45 The spell has to have the same owner as the creature you choose to mutate, I think. So unless the opponent's creature is owned by the same player as the spell (e.g. because your opponent took control of your creature), you can't cast that spell like that. 03:53:30 However, to answer your question, let's see the Migratory Greathorn card, first. 03:56:00 OK, rule 702.139d merely says "An ability that triggers whenever a creature mutates triggers when a spell merges with a creature as a result of a resolving mutating creature spell." I think it triggers after it is on the battlefield, so your opponent controls that ability, but you get to decide to put it on the top or bottom. 03:56:25 (If someone knows to the contrary, you can tell me, but I think it works like how I mentioned.) 04:02:31 zzo38: yeah, there's a requirement that the parts of the mutated creature has to have the same owner, so this doesn't come up too often, but there are lots of effects to take control of a creature 04:03:08 I realized something, which is that if you are using my "generalized mutate" rule but only using official cards (maybe because it is a kind of Constructed game with both custom and official cards, but neither player decided to use any custom cards), nevertheless it has an effect on the game, because it is now possible to use Artificial Evolution to prevent a creature from mutating. 04:04:18 b_jonas: Yes. I wrote what is the best I can tell from reading the rules. 04:04:22 heck, it's not even quite clear to me from the rules who will control the merged creature after you mutate, and whether the order of the cards depends for that 04:04:31 ouch 04:05:23 I believe it will have the same controller as the original, because who controls a permanent is a continuous property, and continuous effects continue to apply. 04:09:42 (Rule 721.2c specifically says that continuous effects continue to apply.) 04:10:29 zzo38: I don't know, there might not be a continuous effect if the original creature is a card that was put otb under the opponent's control, such as with Gruesome Encore. 04:11:34 I think that since it is a continuous property, it is still a continuous effect, although not a static effect. 04:12:04 Although, I am unsure. 04:13:28 yeah, 721.2c says that the merged object is the same object as the permanent that already existed 04:14:22 However, I think that if (hypothetically) some static ability says "you control all blue permanents", and the mutation changes it to not blue, then since the mutation is a layer 1 effect and control is a layer 2 effect, this means that control effect will no longer apply (and Thoughtlace won't allow you to take it back, since that is a layer 5 effect). 04:15:26 "you control all blue permanents" is a very unlikely effect, but sure 04:16:03 Yes, it is unlikely, but I was giving a hypothetical example. 04:18:21 I should ask efnet/#mtgrules probably 04:19:00 Yes, perhaps they know better than I do. 04:19:13 that or the scryfall web forum 04:19:36 oh, but I should re-read the release notes first 04:20:04 Yes, maybe they answered the question for you 04:28:31 Do you like my "Master Shuffler" and "Malaclypse the Younger" Un-cards? 04:29:55 I don't know, I haven't looked at your cards lately, especially not your un-cards 04:30:48 Master Shuffler shuffles players, planeswalkers, mana pools, your hand, planar decks, scheme decks, time stamps, and the layer system. 04:31:03 Malaclypse the Younger makes all intervening if clauses true. 04:36:58 zzo38: efnet/#magicjudges-rules tells me that the opponent keeps control of the permanent when it merges with a mutate card 04:37:17 and that they'll also control the "whenever this creature mutates" ability 04:37:43 so if an opponent owns my treefolk, I can mutate it with a Greathorn and they'll have to shuffle 04:38:50 Yes, that is what I thought. 04:39:07 Now I am more certain of it, because they said the same thing. 04:46:29 moony: feel free to steal lol. 04:46:57 it's an inconvenient little language because you don't have a separation between code and data. 05:13:19 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)). 05:33:59 -!- Antebrationist has joined. 05:35:09 What commands are required to make a language with two stacks TC? 05:37:44 -!- xelxebar has quit (Remote host closed the connection). 05:38:02 -!- xelxebar has joined. 05:46:43 I think it depends on the other stuff in the programming language 05:48:07 Okay. Let's say we have operands to increment and decrement both stacks, move the top item from each stack to the top of the other one, and some kind of control flow based on the value in each stack. 05:48:27 This is just a thought experiment of course, I'm not going to actually turn it into a language. 05:49:41 Yes, that can be similar to brainfuck, I think. 05:49:52 How so? 05:50:34 You could consider having a tape where one stack is everything on the left of the tape and other stack is everything on the right of the tape, I think. 05:50:44 I can see <> being equivalent to the moving between stacks and the increment/decrement being equivalent, but I don't really get the whole control flow part. 05:50:53 Would the control flow still work the same way? 05:53:22 Depends how you define it, I suppose. 05:53:44 Okay. This thought experiment isn't very fleshed out yet. 05:54:35 -!- Antebrationist45 has joined. 05:54:39 Let's just say that depending on whether the sum of the values at the top of the stacks is even or odd, it does different stuff. 05:54:48 Wait, that's not Turing complete. 05:54:51 Never mind that. 05:57:59 -!- Antebrationist has quit (Ping timeout: 245 seconds). 06:00:32 -!- Antebrationist45 has left. 06:00:36 -!- Antebrationist45 has joined. 06:00:53 Did you post the programming language you invented before, on the esolang wiki yet? 06:00:59 Nah. 06:01:09 I don't think it's fully fledged enough. 06:01:25 Besides, there are already 4 major Befunge copies, and this is fairly similar. 06:01:37 All it really does is uses a different memory model. 06:02:16 And the whole "you can have as many pointers as you like" thing just annoyed me. It seems... inelegant? 06:02:17 I like it, though. 06:02:58 Do you? I may post it then. I have an article in the works for it, although I'm not sure whether I should be like all of those people who spampost BF deriatives. 06:03:16 The 2d control flow feels a lot like Befunge. 06:06:35 I'll post it now thought, seeing as you like it. 06:06:38 -!- Antebrationist45 has quit (Remote host closed the connection). 06:13:22 -!- Antebrationist has joined. 06:18:04 Alright, this thought experiment might become a language now. 06:30:55 [[Special:Log/upload]] upload * FSHelix * uploaded "[[File:1 Number of operations in divmod.jpeg]]" 06:31:59 [[Special:Log/upload]] upload * FSHelix * uploaded "[[File:2 Number of operations in divmod.jpeg]]" 06:36:44 -!- Antebrationist has quit (Remote host closed the connection). 06:44:21 [[Special:Log/upload]] upload * FSHelix * uploaded "[[File:3 Number of operations in divmod.jpeg]]" 06:44:53 [[Special:Log/upload]] upload * FSHelix * uploaded "[[File:4 Number of operations in divmod.jpeg]]" 06:45:27 [[Special:Log/upload]] overwrite * FSHelix * uploaded a new version of "[[File:4 Number of operations in divmod.jpeg]]" 06:47:32 -!- kevinalh has quit (Ping timeout: 272 seconds). 07:15:30 -!- Sgeo has quit (Read error: Connection reset by peer). 07:18:04 -!- Sgeo has joined. 07:29:42 -!- Frater_EST has joined. 07:57:57 [[Brainfuck algorithms]] https://esolangs.org/w/index.php?diff=71978&oldid=70699 * FSHelix * (+965) 08:16:00 -!- imode has quit (Ping timeout: 256 seconds). 08:26:11 -!- ais523 has quit (Ping timeout: 260 seconds). 08:29:03 -!- izabera1 has joined. 08:33:21 -!- izabera has quit (Quit: meow). 08:35:05 -!- izabera1 has changed nick to izabera. 08:52:32 -!- kspalaiologos has joined. 09:08:27 -!- LKoen has joined. 09:24:40 -!- Lord_of_Life_ has joined. 09:26:30 -!- Lord_of_Life has quit (Ping timeout: 272 seconds). 09:26:31 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 09:30:38 -!- izabera has quit (Quit: WeeChat 2.8). 09:31:01 -!- Sgeo has quit (Read error: Connection reset by peer). 09:37:45 -!- izabera has joined. 09:37:46 -!- Sgeo has joined. 09:50:54 -!- kspalaiologos has quit (Ping timeout: 240 seconds). 10:00:26 -!- Sgeo has quit (Read error: Connection reset by peer). 10:58:01 -!- heroux has quit (Ping timeout: 258 seconds). 11:04:44 -!- heroux has joined. 11:51:38 -!- rain1 has joined. 12:23:21 [[LAMPA]] M https://esolangs.org/w/index.php?diff=71979&oldid=50508 * PythonshellDebugwindow * (-3) 12:29:31 [[TinyBF]] M https://esolangs.org/w/index.php?diff=71980&oldid=71013 * PythonshellDebugwindow * (+70) /* External resources */ 12:39:12 -!- arseniiv_ has joined. 12:40:49 [[User:PythonshellDebugwindow]] M https://esolangs.org/w/index.php?diff=71981&oldid=71924 * PythonshellDebugwindow * (+45) /* Languages */ 12:49:25 [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=71982&oldid=71735 * PythonshellDebugwindow * (+11) 12:50:32 [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=71983&oldid=71982 * PythonshellDebugwindow * (-195) 13:00:54 -!- sprocklem has quit (Ping timeout: 260 seconds). 13:06:28 -!- sprocklem has joined. 13:16:15 hi 13:21:59 ı̣ɥ 13:22:04 -!- arseniiv_ has changed nick to arseniiv. 13:23:39 oh! have someone read something comprehensive about error recovery in parsers? I think I have almost no idea which approaches are out there and which ones are deemed more useful 14:06:06 [[Brainfuck implementations]] https://esolangs.org/w/index.php?diff=71984&oldid=71961 * Zax2002 * (+0) /* Normal implementations */ 14:07:47 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=71985&oldid=71960 * Zax2002 * (+0) /* Introductions */ 14:07:49 [[Bout]] N https://esolangs.org/w/index.php?oldid=71986 * PythonshellDebugwindow * (+1233) Created page with "'''Bout''' is an assembly-like esolang created by [[User:PythonshellDebugwindow]]. ==Syntax== Bout programs consist of lines with opcodes followed by any arguments they might..." 14:17:00 -!- kspalaiologos has joined. 14:34:47 [[Bout]] M https://esolangs.org/w/index.php?diff=71987&oldid=71986 * PythonshellDebugwindow * (+834) /* Truth-machine */ 14:35:21 [[Language list]] M https://esolangs.org/w/index.php?diff=71988&oldid=71929 * PythonshellDebugwindow * (+11) /* B */ 14:35:40 [[User:PythonshellDebugwindow]] M https://esolangs.org/w/index.php?diff=71989&oldid=71981 * PythonshellDebugwindow * (+37) /* Languages */ 14:47:37 -!- kevinalh has joined. 14:49:41 arseniiv: I think the best way to have good error recovery is to design the syntax of your language well. For example, in typical python code, if you miscount parenthesis and forget to close one, you usually get a confused error message where the parser thinks that the next line is a continuation of your statement. but if you write your program to put a semicolon at the end of every simple statement, 14:49:47 which python allows, then you get good error messages, because the parser knows that semicolons (unlike line breaks) can only appear between statements, not inside parenthesis. 14:50:51 b_jonas: wait, Python allows semicolons?? Maybe that’s JS? 14:51:44 if you design your language to have tokens that only appear between statements and you can't nest statements inside expressions, then you can recover from unbalanced expressions. similarly if you use a different token to end a function definition than to end the body of a conditional, then even if you miscount your braces inside the function, the parser will know where the function definition ends and 14:51:50 can recover to parse the next function. 14:52:26 and eg. in C, double-quoted string literals can't have line break in the end, so if you forget a double quote, the lexer can recover in the next line. 14:52:35 -!- kevinalh has quit (Ping timeout: 260 seconds). 14:52:45 sadly most programming languages these days aren't designed to match these principles. 14:53:24 it's sort of understandable, because it goes against letting you write flexible and brief code where only a few kinds of braces and semicolons are available so many punctuation are precious and have several overloaded meanings 14:53:57 -!- kevinalh has joined. 14:54:28 oh, indeed Python understands semicolons. Shame I’ve read a bit of its grammar and didn’t notice they are allowed as separators :| 14:55:12 hmm, I just realized. in Consumer Society, every program can trivially be written such that square brackets are nested to at most 2 depth. I can add a switch to the interpreter where it absolutely refuses square brackets nested to more than 2 depth, that way it can find missing closing square brackets and recover from them. 14:55:58 that won't help with missing a curly brace, but it's still useful to some extent. 14:56:24 but Consumer Society is an esolang that's not very suitable to finding errors in compile time in first place, so even that is something. 14:57:05 if you want your compiler to find errors, you'd use a programming language with a type system and a compiler, not an esolang like Consumer Society. 15:00:31 -!- kevinalh has quit (Ping timeout: 260 seconds). 15:08:10 [[(HA)pple waITING]] https://esolangs.org/w/index.php?diff=71990&oldid=69154 * DmilkaSTD * (+27) 15:11:27 b_jonas: funny that I consider writing a parser for an esolang with a touch of typing via abstract types: the runtime has actually only one data type and all operations work on it nicely, but you’d be able to add simple function contracts like “this function returns N”, “if this function takes N, it returns N”, and then these would be enforced by the compiler in all the code except the part where these functions are defined 15:12:26 I don’t know if this approach is called abstract types but I thought this is the closest match 15:12:34 -!- kevinalh has joined. 15:12:45 [[AT]] https://esolangs.org/w/index.php?diff=71991&oldid=65124 * DmilkaSTD * (+17) 15:27:05 [[Asvi]] N https://esolangs.org/w/index.php?oldid=71992 * DmilkaSTD * (+5) Created page with "::Wip" 15:27:24 [[Asvi]] https://esolangs.org/w/index.php?diff=71993&oldid=71992 * DmilkaSTD * (+2) 15:27:35 [[Asvi]] https://esolangs.org/w/index.php?diff=71994&oldid=71993 * DmilkaSTD * (+0) 15:30:11 [[Asvi]] https://esolangs.org/w/index.php?diff=71995&oldid=71994 * DmilkaSTD * (+162) 15:32:51 -!- Phantom_Hoover has joined. 15:33:32 -!- Cale has quit (Ping timeout: 260 seconds). 15:34:46 -!- MDude has joined. 15:34:49 [[Asvi]] https://esolangs.org/w/index.php?diff=71996&oldid=71995 * DmilkaSTD * (+277) 15:35:15 [[Asvi]] https://esolangs.org/w/index.php?diff=71997&oldid=71996 * DmilkaSTD * (+15) 15:35:24 [[Asvi]] https://esolangs.org/w/index.php?diff=71998&oldid=71997 * DmilkaSTD * (+0) 15:38:12 [[Asvi]] https://esolangs.org/w/index.php?diff=71999&oldid=71998 * DmilkaSTD * (+29) 15:38:29 [[Asvi]] https://esolangs.org/w/index.php?diff=72000&oldid=71999 * DmilkaSTD * (+0) 15:39:52 [[Asvi]] https://esolangs.org/w/index.php?diff=72001&oldid=72000 * DmilkaSTD * (+73) 15:40:57 [[Asvi]] https://esolangs.org/w/index.php?diff=72002&oldid=72001 * DmilkaSTD * (+47) 15:41:10 [[Asvi]] https://esolangs.org/w/index.php?diff=72003&oldid=72002 * DmilkaSTD * (+27) 15:45:54 -!- Cale has joined. 15:54:14 [[Asvi]] https://esolangs.org/w/index.php?diff=72004&oldid=72003 * DmilkaSTD * (+271) 15:57:07 [[Asvi]] https://esolangs.org/w/index.php?diff=72005&oldid=72004 * DmilkaSTD * (+86) 15:57:29 [[Asvi]] https://esolangs.org/w/index.php?diff=72006&oldid=72005 * DmilkaSTD * (-13) 15:58:08 [[Asvi]] https://esolangs.org/w/index.php?diff=72007&oldid=72006 * DmilkaSTD * (-73) 15:58:27 [[Asvi]] https://esolangs.org/w/index.php?diff=72008&oldid=72007 * DmilkaSTD * (+3) 16:24:31 [[Asvi]] https://esolangs.org/w/index.php?diff=72009&oldid=72008 * DmilkaSTD * (+379) 16:28:53 [[Asvi]] https://esolangs.org/w/index.php?diff=72010&oldid=72009 * DmilkaSTD * (+277) 16:29:13 [[Asvi]] https://esolangs.org/w/index.php?diff=72011&oldid=72010 * DmilkaSTD * (+6) 16:29:30 [[Asvi]] https://esolangs.org/w/index.php?diff=72012&oldid=72011 * DmilkaSTD * (+1) 16:31:06 [[Asvi]] https://esolangs.org/w/index.php?diff=72013&oldid=72012 * DmilkaSTD * (+28) 16:34:06 [[Asvi]] https://esolangs.org/w/index.php?diff=72014&oldid=72013 * DmilkaSTD * (+52) 16:35:25 [[Asvi]] https://esolangs.org/w/index.php?diff=72015&oldid=72014 * DmilkaSTD * (+161) 16:35:37 [[Asvi]] https://esolangs.org/w/index.php?diff=72016&oldid=72015 * DmilkaSTD * (-1) 16:35:50 [[Asvi]] https://esolangs.org/w/index.php?diff=72017&oldid=72016 * DmilkaSTD * (-4) 16:47:36 -!- imode has joined. 17:02:38 -!- sprocklem has quit (Ping timeout: 260 seconds). 17:04:32 -!- sprocklem has joined. 17:56:27 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds). 18:11:52 Automatic semicolon insertion is I think one o the bad features of JavaScript. 18:13:09 -!- Frater_EST has quit (Read error: Connection reset by peer). 18:19:08 A bad feature of PostScript is the inability to use automatic allocation with the readline operator. 18:28:58 -!- imode has quit (Ping timeout: 260 seconds). 18:30:58 [[Special:Log/newusers]] create * Orb-H * New user account 18:37:36 -!- Sgeo has joined. 18:46:05 -!- tromp has quit (Ping timeout: 240 seconds). 18:49:10 -!- tromp has joined. 18:53:50 there are js coding guidelines that suggest omiting the semicolon wherever possible and only set it at the start of a line when necessary 18:54:01 -!- craigo has joined. 18:54:18 which is a horrible recommendation imho since it will force you to enter/remove semicilons if you move code around 18:55:20 I agree, and I always add the semicolons when writing a program in JavaScript. 18:55:59 WHY? 18:56:46 Do you mean why I, myname, what myname mentioned, or all of these? 19:01:34 -!- tromp has quit (Remote host closed the connection). 19:02:00 -!- Phantom_Hoover has joined. 19:02:33 -!- kevinalh has quit (Ping timeout: 258 seconds). 19:05:54 -!- TheLie has joined. 19:11:00 -!- tromp has joined. 19:11:22 -!- kevinalh has joined. 19:19:38 -!- kspalaiologos has quit (Quit: Leaving). 19:21:21 -!- Sgeo has quit (Read error: Connection reset by peer). 19:25:40 [[Seltzer Spigot]] N https://esolangs.org/w/index.php?oldid=72018 * InfiniteDonuts * (+850) Created page with "'''Seltzer Spigot''' is a purely functional esolang designed by [[User:InfiniteDonuts]]. It is not yet complete. Its philosophy is not just minimalism, as in some esolangs. R..." 19:28:04 -!- tromp has quit (Remote host closed the connection). 19:28:33 [[Dig]] M https://esolangs.org/w/index.php?diff=72019&oldid=71962 * Emerald * (+89) Better storage 19:28:55 [[Dig]] M https://esolangs.org/w/index.php?diff=72020&oldid=72019 * Emerald * (-1) 19:29:39 [[Language list]] https://esolangs.org/w/index.php?diff=72021&oldid=71988 * Emerald * (+58) Added own language 19:46:04 -!- imode has joined. 20:00:54 -!- tromp has joined. 20:05:57 -!- tromp has quit (Ping timeout: 260 seconds). 20:13:47 [[Seltzer Spigot]] https://esolangs.org/w/index.php?diff=72022&oldid=72018 * InfiniteDonuts * (-500) 20:14:33 -!- tromp has joined. 20:19:44 [[Special:Log/move]] move * InfiniteDonuts * moved [[Seltzer Spigot]] to [[DotSlash]]: Changed the name 20:21:45 [[2001: An Esolang Odyssey]] M https://esolangs.org/w/index.php?diff=72025&oldid=71891 * PythonshellDebugwindow * (+0) /* Instructions */ 20:23:47 -!- rain1 has quit (Quit: leaving). 20:26:39 -!- tromp has quit (Remote host closed the connection). 20:29:19 -!- Sgeo has joined. 20:32:46 -!- Sgeo has quit (Read error: Connection reset by peer). 20:36:35 [[DotSlash]] https://esolangs.org/w/index.php?diff=72026&oldid=72023 * InfiniteDonuts * (+1327) 20:36:43 -!- ais523 has joined. 20:42:52 -!- tromp has joined. 20:58:40 -!- tromp has quit (Remote host closed the connection). 21:09:57 [[Esowar]] https://esolangs.org/w/index.php?diff=72027&oldid=71972 * Orby * (+67) 21:25:49 -!- Lord_of_Life_ has joined. 21:27:14 -!- Lord_of_Life has quit (Ping timeout: 240 seconds). 21:28:37 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 21:35:33 -!- tromp has joined. 21:36:27 -!- tromp has quit (Remote host closed the connection). 21:36:43 -!- tromp has joined. 21:44:14 question. how the heck do Game Boy games implement animated tiles? from what I read about the graphics chip, that isn't supposed to be possible without a lot of CPU use 21:44:37 yet a lot of game boy games have animated water or other animated tiles, so I'm probably missing something obvious 21:45:52 it can't be palette cycling because there are only one and a half tile layers and only one palette per tile layer 21:46:47 you'd have to either very quickly find all animated tiles in the tilemap memory and modify them, or quickly rewrite the bitmap of a few tiles stored in the tileset memory, every frame 21:47:03 or emulate them with sprites, which also seems impossible with how much these are used. 21:50:01 I guess they're probably rewriting the bitmaps in the tileset memory every frame, and design the levels so that there's very few tiles that they have to update 21:50:16 but it still seems unrealistic 21:50:25 they can apparently animate a lot 21:51:40 we talking original gameboy? 21:54:22 100 kilometers south of Berlin? so that's close to Dresden probably 21:55:05 -!- ArthurStrong has joined. 21:55:23 wrnog channel for that last one 21:56:32 -!- Phantom_Hoover has quit (Ping timeout: 256 seconds). 22:02:23 -!- ais523 has quit (Ping timeout: 260 seconds). 22:16:29 -!- tromp has quit (Remote host closed the connection). 22:37:06 Does it have pattern table bank switching like NES/Famicom does? I am unsure (I probably read it once but now I forget) 22:39:39 zzo38: I don't remember the details 22:40:11 zzo38: is pattern table bank switching when you switch the entire layer between two pattern tables of 256 tiles each? 22:40:26 that's a good idea, that might be what's happening 22:41:39 -!- ais523 has joined. 22:41:39 oops. falling into the first shallow sap hole in tree 2 22:41:52 sorry, wrong channel again, 22:41:57 chatting in multiple channels is confusing 22:48:48 Yes, that is what I mean 22:53:27 What's hard for them to do with that? Can't you just modify the background map, and simply change which tileset entries get used for certain tiles? 22:53:40 -!- tromp has joined. 22:53:44 Maybe I'm missing something, but that's just in video RAM and doesn't need much CPU to do? 22:54:46 yeah iirc there's no limit to you altering PPU memory. 22:55:10 pikhq; it's in the video RAM, but the CPU doesn't get that much time between frames, it's only like 1 megahertz speed with a Z80-like CPU, and it wants to do all sorts of other computations between frames 22:55:45 and each tile pattern is 32 bytes long, and you usually have to update several tiles 22:56:50 I don't believe altering the bg tile table takes that much CPU. 22:56:57 Erm, I wasn't saying updating the tile pattern. I was saying update the _used tile in the background map_ 22:57:08 Which is one byte per tile. 22:57:35 pikhq: that's even harder, because you have to find which tiles to update there 22:57:48 the same water tiles or muncher tiles usually appear a lot of times 22:58:22 -!- tromp has quit (Ping timeout: 265 seconds). 22:58:29 animated water usually is done in pretty short order. 22:58:47 and the Game Boy only has 8x8 tiles, just like the NES, so there are a lot of tiles to look up 22:58:54 8x8 pixel sized tiles that is 22:59:00 admittedly it has a smaller screen than the NES 22:59:06 the NES CPU has a DMA to make it possible to update the sprite table quickly enough during vblank 22:59:21 but it normally has plenty of time to update backgrounds just via regular CPU instructions 22:59:27 ais523: yes, I think the GB CPU accesses the PPU memory directly too 22:59:39 the GB has DMA as well. 22:59:49 the PPU on the NES isn't accessed directly, rather there's a specialised memcpy instruction on the CPU for it 23:00:03 that puts it in a mode which memcpies one byte per cycle into the PPU sprite memory 23:00:16 I mean its tile and pattern memory, not the registers. accessing the registers is more complicated. 23:00:19 (you can't write a memcpy that runs that fast on a 6502 normally) 23:00:24 ais523: oh nice 23:00:26 I didn't know about that 23:00:42 memcopies one byte per cycle? yes, that's impossible on a normal 6502 23:00:53 https://gbdev.gg8.se/wiki/articles/Video_Display#LCD_OAM_DMA_Transfers 23:01:05 like by far 23:01:14 right, I can see why it was invented 23:01:32 it shouldn't be too hard to add a few extra circuits to make that fast a memcpy possible using the normal on-chip ALU and read and write architecture 23:01:36 cool. does the Game Boy has such a feature too? 23:01:42 see above. 23:01:46 It isn't a special instruction on the CPU, but rather a function of the APU to implement sprite DMA on NES. (However, the CPU and APU are the same physical chip) 23:01:49 but, there's clearly no way to do it under software control so you'd need extra hardware to implement it 23:02:52 ais523: yes, but the problem is that it has to be in the CPU, because those CPUs and PPUs access the memory in a synchronized way, it'd be hard to just do it asynhroniously from a separate device, and it wasn't easy to modify a CPU in such a way back then 23:03:15 -!- ais523 has quit (Quit: sorry for my connection). 23:03:15 zzo38: what is the APU? 23:03:27 -!- ais523 has joined. 23:03:41 huh, the Game Boy version is rather more advanced than the NES version 23:03:53 sure, it's like 5 years more advanced 23:04:04 apparently the CPU functions normally during the DMA, except that some of the memory buses are tied up 23:04:14 and has a Z80-based chip with an address space larger than 16 bytes 23:04:16 b_jonas: The APU is the audio processing unit, although it also includes the OAM DMA and the game controller inputs. 23:04:16 um 23:04:21 address space larger than 16 bits 23:04:26 so you can actually run code, just you need to run it from somewhere that isn't busy with the DMA 23:05:00 Hmm, that's rather handy. 23:05:02 in practice the NES never ran out of address space anyway, in most configurations it has tons more address space than physical memory 23:05:07 zzo38: but isn't the APU completely separate from the CPU and PPU and not even running from the same clock speed or something? or is that on a different console? 23:05:43 although I think it needs to bank-switch on later chips because the address space is split up with certain parts being for certain purposes 23:05:46 er what? doesn't the NES only have 16 bits of address space only? 23:05:50 and you can run out of address space in a particular part 23:05:59 b_jonas: No, it uses the same clock speed. 23:06:00 b_jonas: yes, but that's 64 KiB which is more than most NES games use 23:06:11 zzo38: same clock speed, but not synchronized 23:06:31 ais523: oh right, it's the SNES and Game Boy that has game cartridges up to 8 megabyte 23:06:41 though 64 kilobytes still sounds pretty small for the NES 23:06:46 with most games, quite a lot of that 64 KiB is either mirror ROM / mirror RAM (i.e. two addresses for the same byte in memory), or else open bus 23:06:46 don't some NES games have more ROM than that? 23:06:59 the later ones that is 23:07:02 the games with more data stored normally use bank switching 23:07:05 Yes, it uses bank switching in the cartridge. 23:07:09 yes, exactly, bank switching 23:07:14 i.e. they have multiple different ROMs in the cartridge 23:07:18 which means that they have ran out of address space, just solved it in a reasonable manner 23:07:22 -!- TheLie has quit (Remote host closed the connection). 23:07:24 that's most important for background and sprite tables, which have a very small maximum size 23:08:29 ais523: why? does the NES not have built-in video memory, unlike the GB? 23:08:52 oh right, in the NES it's all in the same bus I think 23:09:07 same memory 23:09:13 so it's usually in the ROM or something 23:09:20 b_jonas: it's complicated, there's video RAM for choosing where the sprites are on screen, and where the backgrounds are on screen 23:09:24 whereas the GB has dedicated video memory that you have to write I think 23:09:35 but the pixels that make up a particular sprite, or particular background, are read directly from the cartridge and normally assumed to be in ROM 23:09:42 ok 23:09:43 (of course there's nothing stopping the cartridge putting a RAM there instead) 23:09:59 and the address space of that is really small 23:09:59 -!- Antebrationist has joined. 23:10:10 The NES does have built-in video memory, although it is not normally used for pattern tables (it is normally used for name tables instead). 23:10:19 so it uses bank-switching more commonly than other parts of memory 23:10:20 (and a few games that do special, clever tricks will do exactly that) 23:10:37 (Although there is a signal in the cartridge to specify whether to use the internal video memory (CIRAM) or that in the cartridge.) 23:10:59 hmm, it's possible that I'm misunderstanding something and the GB does this too 23:11:36 because it only has 8 kilobytes of video memory, which is enough for scrolling the maps, with two bytes per 8x8 block on a 160x130 pixel or something screen, two layers, but way too little for pattern memory 23:11:57 so it probably just addresses pattern memory that's usually bank switched in directly from the cart too 23:12:09 zzo38: IIRC, the NES's graphics chip implements a virtual screen that's 512×512, but its internal video memory only has enough space for half that 23:12:27 ais523: Yes, that is correct. 23:12:33 so the cartridge needs to decide whether to make it 512×256, 256×512, or add additional memory of its own to get the full size 23:12:47 (Well, kind of. Part of each name table is used for attributes instead.) 23:13:25 Attributes are not stored with each cell, but rather each byte in the attribute area stores the attributes for four 2x2 blocks of cells. 23:13:37 yes, on the NES you can choose a palette for each 16x16 pixel block 23:13:38 -!- ais523 has quit (Quit: quit). 23:13:42 but the original Game Boy doesn't have that 23:13:56 you can only choose the palette per layer and per sprite (or per two sprites or something, I don't recall) 23:14:17 but that's because it can only display four physical colors on the LCD 23:14:27 whereas the NES can display much more colors 23:14:44 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”). 23:15:47 mind you, I think it's unfair to call that "attribute memory", it's just palette memory, the tile map itself has per-tile attributes in it 23:16:09 Antebrationist: forder.cc/esowar if you're interested there's a tourney server now 23:17:36 also having tilemap first, and attribute memory in more expensive later versions is a pretty popular solution, it's happened for at least three computers: the game boy (if you upgrade to game boy color), the VT100-like terminals (where you just plug in additional RAM), and the Commodore home computers 23:17:54 it's a good way to make a newer video chip that is compatible with older modes 23:18:12 and software that is compatible with older non-color hardware without needing too much extra data 23:31:39 -!- arseniiv has quit (Ping timeout: 258 seconds). 23:47:55 -!- tromp has joined. 23:52:50 -!- tromp has quit (Ping timeout: 246 seconds).