Hello all, Devine,
I've noticed activity in the uxn repo related to the addition of a BIOS concept
and this message is a reaction to it. While this is a question/critique, I hope
it doesn't come across as a "you shouldn't do that" type of message, which it
isn't.
The way I understand uxn's aesthetical vision is in the form of an invitation:
let's continue this quest from another age where we see what we can fit in 64K.
This constraint leads to creative asceticism, an underexplored path in software
development. We have a nice set of small applications showing that this path
yields interesting results. Many of them can compare favorably to the same type
of applications in the "big world" precisely because this asceticism shaped
their specs.
Of course, there are some things you can't build in 64K. However, a 64K machine
with a paging mechanism can do anything... but in a much uglier way than its
lots-of-bits counterparts! Such a mechanism make it harder to see meaning in the
original creative constraints.
I don't know the reasons behind this addition of paging features in uxn. My
naive supposition is that there's a desire to see something realized in uxn
that isn't possible to realize within 64K.
This is where I repeat: I don't mean to say you shouldn't do it, I'm just
curious about the motivations and consequences.
Isn't there a risk of fragmenting the uxn ecosystem? Some apps will stick to
asceticism, some won't. Will they be easy to distiguish[1]? Or is it just me
who see asceticism where there isn't?
Regards,
Virgil
[1]: a Buddha badge or something :)
Hi Virgil, and everyone :)
That's a good question, and there's a good answer to it.
To start off, varvara has had pagination for nearly as far as I can
recall. One of the first projects Rek and I created for Uxn was Oquonie,
which is around 400kb and that was many years ago, so the pagination
feature is nothing new. It has been part of the docs for nearly as long,
and it's a feature found in uxn5, uxnds, uxnemu, uxn32, raven, etc..
While uxnemu is the sort of standard cross-platform thing people are
most likely to use, uxn11(the X11 implementation of uxn) is the one I
use everyday, and I built it especially to respond to the needs I have
of it, it's nearly identical with uxnemu except for a few things:
- 1) It has a unix userspace which allows me to listen to music through
m291, which I do every day from the moment I wake up and various other
things like that.
- 2) As of yesterday, I ripped out all the debugger stuff from uxn11,
which was ugly and didn't belong in the c code anyways:
https://git.sr.ht/~rabbits/uxn11/commit/21296bddb12d856327fe1862fb2e39f1a905661c
And instead, I made it so all this is done in uxn space(I much rather
write uxn than c, esp for graphical stuff):
https://git.sr.ht/~rabbits/uxn11/tree/main/item/src/utils/bios.tal
The bios rom display the rom's metadata, and allow me to control various
parts of the running rom(like a game genie), such as displaying the
rom's symbols in the screen at the various addresses, which I need for
some projects I am working on. To an other uxn11 user, this changes
nothing except that the debugger is prettier. For a uxn11 developer,
that means that the debugger is written in uxn itself and can be hot
loaded depending on someone's needs and there's a bunch less debugger
drawing code in the screen device source.
Now, if you're not a uxn11 user, and don't have a debugger, and want to
use this bios rom thing, just wait, it's not finished and it's not
documented. Consider what I'm doing research, I'm looking into parts of
the emulator that can just as well be done in uxn userspace and removed
in order to simplify the emulator.
I hope that answers your question :)
Let me know!
Dll
On 2024-11-13 09:47, Virgil Dupras wrote:
> Hello all, Devine,> > I've noticed activity in the uxn repo related to the addition of a BIOS concept> and this message is a reaction to it. While this is a question/critique, I hope> it doesn't come across as a "you shouldn't do that" type of message, which it> isn't.> > The way I understand uxn's aesthetical vision is in the form of an invitation:> let's continue this quest from another age where we see what we can fit in 64K.> > This constraint leads to creative asceticism, an underexplored path in software> development. We have a nice set of small applications showing that this path> yields interesting results. Many of them can compare favorably to the same type> of applications in the "big world" precisely because this asceticism shaped> their specs.> > Of course, there are some things you can't build in 64K. However, a 64K machine> with a paging mechanism can do anything... but in a much uglier way than its> lots-of-bits counterparts! Such a mechanism make it harder to see meaning in the> original creative constraints.> > I don't know the reasons behind this addition of paging features in uxn. My> naive supposition is that there's a desire to see something realized in uxn> that isn't possible to realize within 64K.> > This is where I repeat: I don't mean to say you shouldn't do it, I'm just> curious about the motivations and consequences.> > Isn't there a risk of fragmenting the uxn ecosystem? Some apps will stick to> asceticism, some won't. Will they be easy to distiguish[1]? Or is it just me> who see asceticism where there isn't?> > Regards,> Virgil> > [1]: a Buddha badge or something :)
> On Nov 13, 2024, at 1:03 PM, Hundred Rabbits <rabbits@100r.co> wrote:> > Hi Virgil, and everyone :)> > That's a good question, and there's a good answer to it.> > To start off, varvara has had pagination for nearly as far as I can recall. One of the first projects Rek and I created for Uxn was Oquonie, which is around 400kb and that was many years ago, so the pagination feature is nothing new. It has been part of the docs for nearly as long, and it's a feature found in uxn5, uxnds, uxnemu, uxn32, raven, etc..> > While uxnemu is the sort of standard cross-platform thing people are most likely to use, uxn11(the X11 implementation of uxn) is the one I use everyday, and I built it especially to respond to the needs I have of it, it's nearly identical with uxnemu except for a few things:> > - 1) It has a unix userspace which allows me to listen to music through m291, which I do every day from the moment I wake up and various other things like that.> > - 2) As of yesterday, I ripped out all the debugger stuff from uxn11, which was ugly and didn't belong in the c code anyways:> > https://git.sr.ht/~rabbits/uxn11/commit/21296bddb12d856327fe1862fb2e39f1a905661c> > And instead, I made it so all this is done in uxn space(I much rather write uxn than c, esp for graphical stuff):> > https://git.sr.ht/~rabbits/uxn11/tree/main/item/src/utils/bios.tal> > The bios rom display the rom's metadata, and allow me to control various parts of the running rom(like a game genie), such as displaying the rom's symbols in the screen at the various addresses, which I need for some projects I am working on. To an other uxn11 user, this changes nothing except that the debugger is prettier. For a uxn11 developer, that means that the debugger is written in uxn itself and can be hot loaded depending on someone's needs and there's a bunch less debugger drawing code in the screen device source.> > Now, if you're not a uxn11 user, and don't have a debugger, and want to use this bios rom thing, just wait, it's not finished and it's not documented. Consider what I'm doing research, I'm looking into parts of the emulator that can just as well be done in uxn userspace and removed in order to simplify the emulator.> > I hope that answers your question :)> > Let me know!> Dll
Wait, a Unix userspace? Are there docs for that? I’d love to hack on that. Does the music playback/audio processing happen in Uxn or is it controlling an external program? I think I’ve seen the latter before but not the former.
Thanks,
Byte (from Discord and fedi)
On Wed, Nov 13, 2024 at 10:05:28AM -0800, Hundred Rabbits wrote:
> To start off, varvara has had pagination for nearly as far as I can recall.> One of the first projects Rek and I created for Uxn was Oquonie, which is> around 400kb and that was many years ago, so the pagination feature is> nothing new. It has been part of the docs for nearly as long, and it's a> feature found in uxn5, uxnds, uxnemu, uxn32, raven, etc..
I was aware of System/expansion, but I think it's used pretty exclusively for
assets right? It seems to me that the concept of paging around executable code
crosses an important line.
> Consider what I'm doing research, I'm looking into parts of the emulator> that can just as well be done in uxn userspace and removed in order to> simplify the emulator.> > I hope that answers your question :)
Yes, thanks. I was under the impression that you were implementing a
soon-to-be-published spec. In any case, I'm satisfied, my point came across.
Now if you ever find yourself speccing out code paging for varvara, I know
you'll tell yourself "Virgil wouldn't approve". Whether that stops you is your
own business :)
Regards,
Virgil
> I was aware of System/expansion, but I think it's used pretty
exclusively for assets right? It seems to me that the concept of paging
around executable code crosses an important line.
Oh, I haven't done anything like that yet, and I'm not planning to. Even
the BIOS is not doing anything like paging code. The main uxn core's
stacks and device page is located in the 0x8000 range of the bios core's
ram so it can monitor what is held in the stacks and print them. The
core is not doing any kind of multi-tasking, the bios is another uxn
instance running its own programs in its own memory space.
I made this to simplify things and not bloat the emulator, if anything,
this removes code from the emulator :)
https://assets.merveilles.town/media_attachments/files/113/477/353/559/523/692/original/e73c0164b6a2e967.png
It's really nice, in the screenshot, the debugger is overlayed on top of
the game and prints the stack as well as grabbing the metadata in the
rom file.
I'm hoping to add a few more things here, like a way to change the
screen colors with sliders, maybe have a clock that displays the system
time even :)
Dll