#8-Bit Data Storage Project Log(Previously a combinator help request)

1 messages · Page 1 of 1 (latest)

mint mesa
#

Heya folks,
I recently posted on the subreddit that I had been working on an 8-bit architecture project
And since then I have been working on making 8/9-bit storage for the 8-bit computer.(still learning binary quirks so the 9th bit thing is a little hard for me)
However, I have hit a bit of a snag.
For this to work as i intend it to it must do the following in sequence:
i need to be able to send a write request to the bank and have it check the stack being addressed for current contents, wiping it, and then loading the new data, however, i have not been able to get around a feedback loop that occurs when conditions to write are met.
it tries to wipe and write over and over.
I'm sure the solution is a simple one and that I'm just not seeing my mistakes, however, I cannot for the life of me figure out where that mistake may lie.
in the blueprint book provided, I have placed the following
bank blueprint with text plates and a key(for marking and readability)
bank blueprint without text plates(for those who may not be able to use them)
a build plate on which all components related to the bank must fit.
I have documented both on the Factorio prints site and on the text plates how the system works, however, if you require more information, feel free to ask me here.
Here is the link:
https://factorioprints.com/view/-OFqgEBS87_ursAdE3z-

#

The above text is pretty much a tweaked repost of what's on the reddit post and some questions were asked so here's some extra info:

"Why are you using continuous input"
The system does support timed operations(clock based).
And I have a 1 second clock that I test with,
I'm using the compact circuit mod and with that I can use a 3rd i/o pole to bring in timings,
but I didn't want to clutter this request with too many mods so I simplified and cleaned it up a bit.

"if you say you are using 8-bit, why is your value output in base 10?"
I would have liked to use only 8/9 bits(still learning binary and move over of 9th bit stuff) but factorio will nullify the 0's in front of a signals value,
I'm sure you all know this but for those unaware, if you have a combinator output 001 to a network, the signal will read only 1 when recieved, or if you send 00100010, then it will read 10010.

I cant keep inputs and outputs stable as such, so I opted for a placeholder, the largest number of characters that a signal can support by my testing is anything > 1999999999, which allows for 1 placeholder and 9 value characters, originally I intended to use this value as an address itself, but that would conflict with value stored so I wanted to "NAT it in a sense" behind a bank and stack so that I can address bits individually.

So I set myself to using 1 at the front as a placeholder
and the 9 following characters for value(PVVVVVVVVV),
If it were possible to send a larger number,
then I would have rather gone with a much larger number running on one signal,
like a write operation that take the form of:
100100100100010(POOOAAAVVVVVVVVV)
or: | Placeholder | Opcodex3/4 | Addressx3 | Valuex9 |

stack address is the same where an address would look as follows,
where P is placeholder and A is address: 1010(PAAA).

I also just recently saw a more space efficient way of making the SRLatch, and may rebuild the current stack with the new Latch method

mint mesa
#

Im not sure what im doing wrong for the post to gain no traction at all, so i will continue building and report back here, assuming im allowed to do that as it will no longer be solely about this specific request, as it does not go directly against any rules. In other words, I'll use this as a sort of session by session log book.
Feel free to chip in with advice or questions, i dont mind either way.

vapid fiber
#

Not all threads get traction. Lots of text makes it less likely.
The "worst" offender imho is the niche topic. My brain blanked after reading "8-bit storage". 🫣

mint mesa
vapid fiber
#

Can confirm that you haven't been shadow banned! ChibiHappy
But I have no idea how to help you after giving the first post a proper read.
Technical Factorio Discord server might be a good place to ask.

mint mesa
vapid fiber
#

Me neither, I only heard of that place 🫣

willow pulsar
#

ideally it'd just increment the program counter and set the data once, potentially on the edge change of the program counter

mint mesa
# willow pulsar i was very busy napping after a long flight but will read through it eventually ...

"otherwise setting new contents to a memory cell with a pulse should be trivial"
yes this is true, i could do this and hold new data in a temp stack,
there are 5 stacks that fit per bank at current( roughly30x40 out of 50x50)
and id rather not use a 5th of my bank just for temp.
however, i have discovered a potential change that can be made to
reduce space requirements for each stack by 50-60%, so i may be able to do this...
thank you for the recommendation, I hadn't thought of that!
ill give the new concept and temp stack a test.

#

8-Bit Storage Project Log(8-Bit Storage help request Before)

mint mesa
#

using the method posted by @indigo current here:
#combinators message
I was able to scale down the bit stack from 6x29(174 Tiles)
down to 9x7(63 Tiles)
and if debug lamps are removed,
it shrinks further to 9x5(45 Tiles)
This is a 63% to 74% reduction in Tiles used!

Using the previous design, the 5 stack banks used 870 Tiles.
Within this same space i can have 19 of the 45T stacks (171 Bits)
Or 14 of the 63T stacks (126 Bits)

willow pulsar
#

oh, they were just normal latches?

mint mesa
#

I dont know why i didnt think of scaling it down using the new AND/OR functionality in the Deciders.
Perhaps i thaught it was not possible as the old systems RSLatch looked as follows:

indigo current
#

Ping? Dont blame me for anything

willow pulsar
#

are they all using the same signal, or are you able to store multiple signals?

#

you can latch a ton of signals on one decider if you wanted to

mint mesa
#

Write is top
Erase is bottom
Store and output is on the Right

willow pulsar
#

always using the 1 signal?

mint mesa
#

easiest to call imo
as you can output as 1
and if signal is doubled due to misconfiguration it wont write,erase,read or most importantly, break.

#

also, i want to stay away from large numbers as much as possible to keep it close to "Binary" 1s and 0s

willow pulsar
#

the signal label

#

i guess i should write "1"

mint mesa
#

oh, sorry, i used the first one in the stack as an example,
thats just bit 1 of 9
each bit has a different number assigned from 1 through 9

#

1, 2, 3, 4 ... up to 9

willow pulsar
#

all on different deciders?
why not put them all on one?

indigo current
mint mesa
#

if one statement on the combinator is true it will output all outputs no?
unless its not being fed something for an output that is meant to be "at input count"

willow pulsar
mint mesa
mint mesa
willow pulsar
#

so you want to output a specific bit?

mint mesa
#

the latch itself is 1 from being 3 as you said
but i require a reader as well, so that makes for the 2nd

mint mesa
#

i can modify for specific-read, but i cant think of a use case

willow pulsar
#

what input signals do you have to work with

#

W/E being specific numbers? or different signals for each bit?

mint mesa
# willow pulsar what input signals do you have to work with

W stands for Write, E stands for Erase
see them as a sort of "operation code"
when a order is sent to the stack, these are the required signals to write, erase and read:
Write:
S1001 | W1 | 21 | 41 | 61 | 81 |
this will write bits 2, 4, 6, and 8 to the first stack in the bank(max 6 stacks per bank with this schema PAAA)
Erase:
S1001 | E1 | 21 | 41 | 61 | 81 |
this will erase bits 2, 4, 6, and 8 in the first stack
Read:
S1001 | R1 |
this will read the overall value of the first stack

willow pulsar
#

you can probably hold all of the data in one combinator

mint mesa
#

you reckon?engithink

#

i may try it tomorrow then

willow pulsar
#

i've been dabbling with single decider things

#

they're pretty powerful

mint mesa
#

you wanna give it a bash?
imma dump the BP string in here anyway

willow pulsar
#

it looks like currently you have loopback on red, inputs on green?

mint mesa
#

BP String for the current design

#

damn, i broke the string lmao, imma make a factorioprint post then

willow pulsar
#
//normal state, no W/E signals
  W == -1
 AND
  E == -1
 AND
  (R)each == 1 //pass through remembered values
OR
//write signal
  W == 0
 AND
  E == -1
 AND
  each > 0 //remembered or input
OR
//erase signal
  W == -1
 AND
  E == 0
 AND
  (R)each == 1 //only store remembered
 AND
  (G)each == 0 //when not input
OR
//both W/E signals
  W == 0
 AND
  E == 0
 AND
  //do something when you feed in both W and E?

-> each(1)

will need a constant combinator to feed in W(-1) and E(-1)
that way they don't get confused with your 1-9 data signals

#

the above is just a dead simple "what cases are there for W and E"

mint mesa
mint mesa
#

ill give it a look tomorrow, ive run out of time for today, thanks for the help though!😁

willow pulsar
#

good luck 🦆

#

didn't test the above code, but it usually works

mint mesa
#

Tested your method and unfortunately it will not suit my needs, as i need 2 outputs of the same value but that are sent on different wires when different conditions are met, one for storage persistence, and one for read operations, i think I've got a good system going with the 9x7/9x5.

Anyway, now on to re-addressing, and rebuilding the bank with the new stacks.
its a fairly simple matter,
i will need to expand the stack address space and add a bank address space (basically adding a hodge-podge Network Address Translation system NAT)

for address expansion, i need 19 addresses for the 9x5 compared to the 6 address schema i use for the 6x29.
not too complicated, just need to add more bits to the schema.
if i add one more bit i will have a max of 15,
and adding 2 gets me 31 total

I need:
19 Addresses(min)

Current:
1001
PAAA
Placeholder | Address x3
Max Addresses: 6
Highest Address Value: 1111

New:
100001
PAAAAA
Placeholder | Address x5
max addresses: 31
Highest Address Value: 111111

willow pulsar
#

curious, why didn't it work for the storage portion?

mint mesa
#

storage portion is perfect!
its pretty much identical to my own rework for the 2 decider system
however
the read cannot be included
as it needs to be called independently
i may have misunderstood though, as R in my system stands for the read operator

#

as seen here

willow pulsar
#

wouldn't that just be a second decider being R == 1 -> everything?

#

i didn't see it in the pictures you had posted

mint mesa
#

let me go take a screenie for you 😛

#

read operator
could actually be at input count to allow for a constant output and then only one combinator would need to forward the values if an R1 is received
hmmmm
lemme go test that

willow pulsar
#

but you want all 1-9 signals in the output, right?

#

that'd just be (R)R == 0 -> (G)everything
or if you only have one wire colour, feed R(-1) to it as a constant, and then R == 0 -> everything

mint mesa
#

if the bit has a stored value, then yes, it must be sent to the encoder(next component)
but if there is no value stored then nothing will be sent for that bit

yes i see what you mean
i will give it a test
perhaps im just that blind, and it can be even smaller

#

also, i realize i haven't sent any close up pics of the new 9x7 block for reference

#

with debug lights

#

with only an i/o light

mint mesa
mint mesa
#

good stuff
thank you very much
i am apparently very blind and clearly quite dense

#

✨evolution✨

willow pulsar
#

ah, so it does work?

mint mesa
#

it does indeed

willow pulsar
#

and/or "S"

mint mesa
willow pulsar
#

solid

#

in that case can use the R(-1) constant i mentioned earlier

willow pulsar
#

that way R is -1/0 vs 0/1

mint mesa
#

i think i like the 4x7 form factor, so instead of adding this per stack, i will add it per bank:
If R1 is read on the bank output(Red) wire, then send R(-1)

willow pulsar
#

i thought W/E also needed a -1? or are you changing those as well

mint mesa
#

no need
Write and Erase orders filter into the relative stack and terminate at the bit level

#

they dont pass the bit, once the orders reach the relative bit, the change is made, and is not passed through
Order>Bank>Stack>Bit ||

#

thanks to your contributions i will now need a 6 bit address for each stack xD

mint mesa
#

all 32 stacks connected and addressed

#

Next i need to add the
R * 0 --> everything
part
then start work on the buffer/temp storage and the accompanying logic:
write?>check>erase>write

#

But that ^ is for tomorrowhahayes

lusty hinge
#

This is all way over my head but cool to look at. You found the wizards.

mint mesa
#

8-Bit Data Storage Project Log(Previously a combinator help request)

mint mesa
#

Been thinking about how i would do the rewrite logic, in previous iterations of this system(pre 2.0) i used a 2x2 belt loop and would read the belts for which side the item was on(top left would be 1, and bottom right would be 0)
Now given that you cant send a signal with a value of 0, my caveman brain decided to work in 1s and 2s, 1 representing 0, and 2 representing 1.
This would be used to "physically" flip the belt bits, however, i am no longer using belts, and have set myself on a much more hardcore path of using nothing but 1s and empty signals for values and orders.
This in mind, theres 2 ways to do this, i can cave and use the 1/2 method which would make life easier, as write orders would arrive with every bit being expressly defined as on or off, and i wouldnt have to go through the trouble of comparing values as overwrites would happen automatically,
or
I could stick to the hard path of using 1s and empty signals and comparing signals(current contents of stack being written to VS new value being written to the stack) and writing accordingly, whilst at the same time, storing the new values in a temp stack whilst the target is being wiped.
I also need to think ahead as id like to at some point add a persistence or "importance" attribute to data being stored, with logic to decide if it may or may not be overwritten, and thereafter, a system that requests the address of a blank stack/less important stack that the data can be written to, lots of checks and queries will need to be added here, like reaffirmation of addresses so that data being writen to as stack not specifically requested will let its new address be known, this will require a registry/journal to record writes and erases and so and so and so.
Lots of things i want to get working!

#

The only requirements are
Time
Effort
The ability to endure circuit hell
And brain power

mint mesa
#

Next problem is figuring out how to store the stack address
busy tinkering with accumulator charge signals but im not sure how i would implement it 😐

#

just writing down the math needed to make a percentage out of the Address:

#

wait...
cant i just convert to decimal and compare accordingly?
the max decimal value of this address space is 63
i will do that and see what happens

mint mesa
#

Video with the Paved platform is the internal calculations
for converting the stack address into Relative Bits that are then stored.
Video on the sand is the new buffer,
the little chip thing with numbers that you can see in the last row of the buffer,
is a compact circuit that contains everything in the Paved Platform Video.

still need to compact and clean up the calculations section, and perhaps rebuild the Decimal to Relative Bit module with new 2.0 mechanics in mind
but i like this form factor, it fits nicely atop the 32 stacks in the 50x50 space

#

Next on the list:

Immediate:

  1. Clean up/rebuild Buffer's Internal Calculations(everything in the floating platform video)
    with the intention of at most getting everything in the chip, out the chip, whilst at the same time, not using too much space, making everything a bit more, cohesive, so to speak.
  2. integrate new buffer into 32-stack bank and create logic to hold write operations before executing etc etc

Soon:

  1. resume work on dynamic addressing system based on neighbor detection/solicitation(ipv4 style)
  2. implement Assertiveness rating for data-overwrite-logic

Long term:

  1. start work on ALU
mint mesa
#

Alrighty!

Todays Orders of business:

#

Build and test @willow pulsar's wizard magic as stated here:
constants 1(1),2(10),...,5(10000)
arithmetic spooky ghosty / each -> each
arithmetic each % 10 -> each

#

then integrate with buffer
then integrate buffer into stack

#

Okay, Before all that.

CLEAN UP THE RANDOM BLUEPRINTS IN YOUR INVENTORY
Also
Name, Label, document and save all new designs in books

mint mesa
thorny lava
#

hey! we were chatting in #combinators and at first glance it seemed to me you are manually converting values into a "string" form of binary

#

I was mentioning the idea of working with the regular values directly and using bitwise operations

#

instead of manually converting to a "string" version of binary form and using decimal arithmetic on that

#

#combinators message

you linked me to this thread

whenever you are around feel free to ping me here and we can chat more!

mint mesa
# thorny lava https://discord.com/channels/139677590393716737/783049079584063588/1326927310791...

100s!
Thank you for taking the time to assist.
In the grand scheme of things, this thread is the begining of me building an 8-bit computer in factorio, with storage, an ALU, and an interface to boot!
I have been working on it without logging or documenting for about a year, just learning combinators and 8 bit architecture, and at current, i am trying to get the storage portion as consistent and fully-developed as possible for the next step, integration with the future processor(ALU)

thorny lava
#

oh that's awesome!

I know nothing about such things ^-^

but I do suspect that your life would be much easier if you used bitwise operations on regular values instead of decimal arithmetic on fake binary (decimal strings representing binary)

mint mesa
#

I know😅
However, i wish for this project to use as little of anything other than my F-Binary as possible
For
✨ realism ✨

#

So here i am, making my life harder of my own free will

thorny lava
#

hmm as you wish, but "realism" is to be sending binary data, not fake strings representing binary

and the game already lets you do that ^-^

#

for example if you send S=34 on a wire, that number can also be interacted with in the form 0b100010 without any conversions

#

the game lets you do bitwise operations

#

you do not have to manually convert S=34 into S=100010

mint mesa
thorny lava
#

in any case, if you insist on the binary strings approach, one of the BPs I sent lets you do the conversion with much fewer combinators than what I saw in your book

mint mesa
mint mesa
thorny lava
#

the manual binary strings and arithmetic version of that is very hectic xd

thorny lava
mint mesa
#

Well, it seems im building my own binary architecture, so be it then engithink expansionbrain

#

Thank you, i will

ember jolt
#

I'm really intrigued by whats going on, and I'm trying to condense down what the current next steps are, so correct me if I'm wrong: engithink

  • Integrate optimized stacks into the mem bank and buffer systems.
  • add logic for persistence, priority overwrites, and dynamic stack address.
  • work on the ALU and overall integration of main 8-bit architecture.
#

can I ask though if this was just a proof of concept passion project or will it be used for logistic request handling/trains? Often I find it helps to somethings look at an issue from the scope of what it should fit for. Like making a piece of clothing, and knowing what part of the body its intended for.

mint mesa
# ember jolt I'm really intrigued by whats going on, and I'm trying to condense down what the...

Every time a new stack version is design, a new bank is created to fit the stack and its address/rwx requirements

Assertiveness rating stems from this being a 8 bit computer that requires cache which will be volatile and can be overwritten with no drawbacks, like cache, but making this storage system will also allow for ssd and ram esk storage which will require persistence, and if a RAM system is implemented, then it will require an assertiveness parameter to ensure program data is not overwritten

ALU has not been developed at all, and development will start as soon as baseline storage is perfected

mint mesa
ember jolt
#

Ah, fair enough.

If you've only recently jumped into the Factorio combinatoric scene with express purpose of computer building, it may be a a bit of a hike to dig up, but people have built entire computers and ALU's before.
On youtube, you'll find videos from arrowInMyGluteusMaximus who built entire raytracing engines and a Doom-adjacent "game".

If not for any specific blueprints, then just for the inspiration that it "can be done". And most of those were done with 0.7-1.1 combinators too.

#

Though another small tidbit about specifically keeping it 8-bit, any particular reason to want to use base10 (ingame signed 32-bit ints) game games as "visually" binary, ie. like "1011001", rather than the number "89"?

The game does include bitwise AND/OR/XOR/<</>> operations, where one would explicity use values like "89" to mean "10110012

#

--
I'd imagine this would simplify a few things, or compress them a lot. Or does this go against the design philosophy you are going for?

mint mesa
# ember jolt Ah, fair enough. If you've only recently jumped into the Factorio combinatoric ...

No no
Ive been at it for 2 years or so, 1 year with combinators so im not new by any stretch

Not able to send too much at current as im out at the pub so i will try keep it short
The thaught was "lets keep it as close to my understanding binary as possible"
Given i was just starting to learn, i was under the impression that data was sent around as i am doing here, only later did i discover it works differently, but this method grew on me, so i set some standards for myself regarding this project

  1. If data is stored or being manipulated, it must be done with individual bits, 9(1) 8(1) 7(1) and so on.
  2. If data is being sent between devices, on a metaphorical "PC board"(between ALU and storage for example), it must be sent as F-Binary ( L(1010101010) )
  3. I am allowed to cut corners and convert into decimal only if:
    I am displaying something, or importing/exporting data, to/from the system (practical applications)

Yes im sure it would simplify it...
But wheres the fun in thattrianglepupper
I want it to be hard, both so it can teach me, and so i can better my combinator knowlege, and then build more unnecessarily complex machines with that knowlege, and plus, i like figuring out things with CI via CD
Prototyping testing Designing finding a new, better way of doing things, and then restarting the process
Thats my jam, ans here we are, in the middle of itshoob

#

.
Apologies if i rambled a bit too much, i have had a drink or 2ChibiSmug

thorny lava
#

nice, godspeed ^-^

when you're around and interested I think some of the things can be compacted into fewer combinators (though idk if you consider bitwsie operations "cheating" when they are used within a section, you can lemme know :P)

#

I didn't dive deep into the BP you sent me, but I see a lot of rows of combinators each dealing with 1 of the bits

#

but that can all be done within a single row of combinators via each

#

some of the BPs I sent back in #combinators when I was putting some of the things together in response to your queries showcased how

#

but I can show a cleaner example another time when you're here

#

here was one of them from #combinators:
0eNrtWm1v4jgQ/iuRpZN2JdMlznu0RSrLvex92PtQnbRSt4cCuMU6SLjE0KKK/35jJ0DKhsbOXZZWokjFjO2ZxzPjGXuSJzSaLekiZTFH4RNi4yTOUHjzhDJ2H0czQYujOUUhilLGp3PK2bgzTuYjFkc8SdEGIxZP6CMKzQ2umDVh2WIWrTuLKKaz0miyucWIxpxxRnOB8sd6GC/nI5oCO1zNAqNFksGsJBZShFzPcS4cjNYo7BDHNy8ckDJhKR3ng0yCEaePsDz0OV4suZGx+XIWyU6MotlDtM6G2TR5QCFPl1Ss4gAK2UER2uFRzMsaqAPUPQRkY8GHp8lsOKLTaMWACczM8v7seRsUs9UvRndsxml6SOXrhcC2YilfRkJBBdjcFp0roPwDHbAiIMZJOpeDYAWLKJUrCNGlJCyFD0gzbo1Uy7yvybxb4m7Vcv+ky73M3q5lP9BmX+bv1PL/WZ9/WYBbK+CXBgLKErxaCb82kVAW4deK+K2RiLKMoFbG52YyuhjNo8fhlmoD3XXsrl+SbXZrhf/eUHhXhMgIAsEKmN1Fs4w+35qNosG1Jpjd30tgrB8KZnMLn01FnLY0UoavmDIGbDVPJsa7CR0zQGd0Oj1jwu4Zz94rZg8bv5xBq9AF2tljzxvcNZ6wXSq5Y2nGh/u8XGsSEAfpB3ioT6LReCrmJQua5ok1RB9gVLLkkHD1+ZQxD2PKH5L0b7mYlE5yPWN0n1Ia71zxOeTv58hhu0nSUpUu5OgbyzVPZqytvorFb08neVQqG+Onxsao1JKrvtFcS3Gj9RmczKbsjsNek/tLbjWh93StutW8BtazX4v1/tNu+/ixgYX7p91rvoYXuYpe9GecUW6Qv1zwHK7oNUEDr/FO5jX9Ji7z9dBfrr4M3p7DiKim7DGB6p0wS+AySIW/ZMa7PN4UoUc9x5umvg953bflQ1Vhp5kbnT7Nm/srvTjYTWhaZyxL21gF4wNLlX/dNE4Zz07IPdRAlUIpP0Z4hU22POiwEBnFEyQuGLknHRagVI6sSq5QfW0wNe4NHlEMK5+SeEVTLiJKcZQpbhDKIcXWrjqV7jReUIXtXHY6l53OZadz2amu7HSyOtNrKDIRy3Zczw+sl8DYpy+/HUlmjm7aKN/Q31za6LaaNtrMGqTNnGG1mTDsNpOF02aecNvMEF6bqcE/RUoIjlbaTVc7yrivKcp81fQb67gmPG1NBOdjen1I/N/jrd1mvPVbPaC7bQZci7Qace1WD+XEbzPoEsc9Rdh1THI83Pi64aZcsTiHm3NV4FwVOFcFGlYFjoSkoNmbep73Qvn02rg0ipvv/t2LXOL7b8rv7ek8LzIVkQ3kw+nQMMsfVUAaLzW6tiKgvnxkBYCIpwqDaMDwFGFsrXX1ZWB0i/bltvUtZhf0QkCU/a4FXa6lClenPt9V1po0IjYINmxs+NiAO41hEVVMtgYmSxHTH/Lph3EdFq5fieUWoweYLfLuDcEmtrF5i29sDG34J5sWdiTRgZYnW57odmS3B8RAEgNBdCUxAKJpSip8AdmTZGgDneR0Iug+0AEB43QOgPevDmM0i0awfNgf+Wbt9HK/7PTyR/Ijxju9og9Gr+DkIJfvuCSwg8Bx4LBlEXOz+RctVYeg

thorny lava
# thorny lava here was one of them from <#783049079584063588>: ```0eNrtWm1v4jgQ/iuRpZN2JdMlznu...
  1. Input simulation: signal S in f-binary form: 1111111 (decimal)

  2. Divmod (decimal --> digits): isolating each digit via divmod
    Divide:

S(red) / each(green) --> output each
where each(green) are all powers of 10: 10^0 to 10^9 each on a different signal
Mod:
each % 10 --> output each

  1. Bit shift (digits --> binary): creates the true binary form of the number

each(red) << each(green) --> output signal B
where each(red) is the divmod stage output and each(green) are the "exponents", so the numbers 1 to 9, but on the same signals corresponding to the signals from the divmod stage

e.g. divmod uses signal D for the 10^3 digit, so the bit shift stage uses D(green) = 3, to shift the extracted digit to the correct binary position

  1. Unset 2^6 bit: this is just an example of some operation we do inside this system, but here we have a binary number so we could do any bitwise operation. Here we are unsetting the 2^6 bit (and all higher bits too technically, but w/e)

signal B AND signal X --> output signal B
where B is the output of the previous stage and X is in the local CC. Here X = 63 (so 0b0111111)

  1. Isolate bits (binary --> bits): splits the new number into its bit components

signal B AND each(green) --> output each
where each(green) are the values of each of the 10 bit positions, so 1, 2, 4, 8, 16, 32, 64, 128, 256, 512

  1. Convert (bits --> decimal): creates the f-binary form of the new number

each(red) > 0
AND
each(green) > 0
--> output S (input count) (green)
where each (red) is previous stage output, each(green) are all powers of 10: 10^0 to 10^9 each on a different signal

#

and this was the other BP of note that I sent, which shows how you can shortcut unsetting the most significant digit using just one combinator (which was something important for you because you said that the f-binary numbers had to be padded with a dummy 1 on the left):
0eNrtmltu4jAUhreC/DQjmQpCQgFpHnovfer9KoQMMdSaxMk4DhdVLGAWMhublYwdKE0oUxNL05Fi2pfi4P87x/6PHannBfS8GIeMUA5aL4D0AxqB1tMLiMiQIk+OUeRj0ALyCUeUl/uB3yMU8YCBGQSEungCWtUZXDPHxX3iYrZ+ijXrQIApJ5zgOTP5MO3S2O9hJjThUodEoYem5RBR7AEIwiASswIqURK+6zg7DgRT0CpbTqO+4wiKSxjuz79UtSDgeCIyBG0axrwUET/2UPIQAuSN0TTqRs/BGLQ4i7FMZSUUK0cojQ1DuaER5iU/iGQ8Q0oGpC+Wt+SSIeEbhlWDH+2Oap2c1eBsKHU4C7xuDz+jEREiYmY0fx5l/xb79br3EAyIxzFbHeXTUMY2IozHSC7WIti5T8p7YuSHeCAyEoM0YH7yJZFBiFiSQQt8SwZi6c7EYq/eUYrv5xSvpNRrSvWDvOppeVspf5hbPq3vKPWP8uunAXUl4FgDkCbsKgknOoQ0oqFEnGoh0oymktHWY1Qg8NGk+zpqi/G6Y1caKXa1ooSfacIr8uRG4iAYCbEB8iKcLU2t0+AqZzDLn4+CqX1qMLOO+J2tOadt+MGNuO6YbuY+pBfCwhLUJcvjOv1J5D8gLOLdt2tasQoY9Z/lhS0OfaGz+bwrOendWqXhXYr5OGDfkyAZduc3HARDhjFdbmMWvNEcufiflOWjRpZJkMuQ57e6Kss1czSyvNJJ8exdir9//vonW7l2YeZk3F1EiagLPnF/H4q/v+0i7K++s42w8X3xbXxqrI3bxtj4rvg2PjHWxqfG2Pi2+DY+NtbGJ8bY+Kb4Nj4y1sbHxtj4uvg2PjTWxkfG2Piy+DY+MNbGh8bY+KL4Nt431sYHxtj4vPg23jPWxvv/2cYdCIKYhzFf7dJRJ/uX/006uXtI0g0u9roGl20TybaJZNtEsm0iUTSRpDDqOj/PhymnC72qrvSLvPKZ8NW1fplbPwNQV/t1fkCGoK73Gw1CBqGu+FsdRIahrvk7LUYGoq76ez1IhqKu+wdNShpjqSv8URdTWTREiZeWsXhDkDf7Uw1WoQ2rHfhkQws60OqIp4RjX4i8tSJD4KEe9hRdsqUvsutJRPNVTBiJV4fkDcSpW0272XQcy6nXrOps9gdbtFgN

#

although I'm not sure I understand the padding on the left thing

#

it's not clear to me why it's a problem for example if 0b0111111111 (511 = 2^9 - 1) is sent as 0111111111 (zero and nine ones), turning it into simply 111111111 (nine ones)

the BPs I sent above showcase the type of logic that can enable handling 111111111 (nine ones) as 0111111111 (zero and nine ones) -- unless there is something I am misunderstanding

#

but then again, perhaps some of the things I showcase in the BPs above qualify as "cheating" 😛 lemme know ^-^

#

like for example the first BP uses bitwise operations at several stages

willow pulsar
willow pulsar
thorny lava
#

hey phflack, fancy meeting you here shoob

(though it seems I'm the one who's new to this chat trianglepupper)

ember jolt
willow pulsar
#

hmm, i thought there was another compaction problem posted somewhere, but i was asleep at the time and now can't find it

mint mesa
#

and @ember jolt

#

ill be on in 2.5-3hrs
then work continues

Todays to do list:

Build and test both Spirits wizardy and my own for Condensing F-Binary into a Whole Number
Recreate buffer with new Converters
Add Buffer to Bank using Version 5.0 stacks
test test test
add logic for pre-write
test test test
build incremental testing machine that will
write to every stack and then erase every stack in sequence

mint mesa
mint mesa
#

personal work on this project has been paused in lue of making a server specifically for this project
if all goes well
there shouldn't be any issues and a server will be made available to all those of interest

ember jolt
# mint mesa *"some of the things I showcase in the BPs above qualify as "cheating" "* yes ye...

perfectly valid approach, but I would still hazard to suggest going in the complete opposite direction and making use of everything possible, short of any crazy cheaty mods, (outside of maybe nixie tubes for display of values)

Using the full signed-32bit range of numbers, negative and positive, as well as decider_combinator constant JSON editing to allow direct output of other values.

Perhaps the first iteration of the thing you want to build can be like that, and then migrated/exploded piece-by-piece into 8 bit numbering once all the bugs are ironed out.

#

--
kinda like making a scale model of the big thing you want to make out of cheaper materials, like foam.

thorny lava
#

it accomplishes digitwise (or bitwise if you want it to) logic but using decider conditions

mint mesa
mint mesa
#

can anyone thats online check if the server is up?
8-Bit Arch Project
PWD will be distributed privately

#

personally hosted through my factorio
if you cannot connect publicly
then i will provide my steam details

mint mesa
#

@willow pulsar
you alive?

mint mesa
willow pulsar
#

i'm assuming newest version of factorio?
sounds like i need to update my server again

mint mesa
willow pulsar
#

just need to update a bunch of things to see if i can join

mint mesa
willow pulsar
#

solid

#

hmm, announcements said 2.0.30 is out
but i just updated client+server, and both are 2.0.28

mint mesa
#

sweet
send me deets

willow pulsar
#

looks like the server is joinable, but with mods

mint mesa
#

mine or yours?

willow pulsar
#

(for yours, already tested mine)

mint mesa
#

um
probably should have asked
does it have dlc on it?
i dont have dlc😅

willow pulsar
#

factorio handles turning on/off mods/dlc as needed when joining
but there's a password on, so i can only see it's in the server list, but not actually join

mint mesa
#

nice 🦆 shoob

mint mesa
#

will be starting the self host server now again
i will be working on it on and off, but feel free to join
8-Bit Arch Project
please reach out to me in DM if you wish to take part 🙂

#

@willow pulsar @vapid fiber @lusty hinge @thorny lava @ember jolt

vapid fiber
#

Thanks for the offer, I have to pass though. That's too technical for me.

mint mesa
#

no worries!
in that case, feel free to stick around to read up on the goings on💜

#

its up

mint mesa
#

👀
you been typing for a while huh xD

ember jolt
#

Same for me, being on the server at least, kinda got my own 2.0+SA world to work on, but happy to stick around here for progress screenshots and occasionally make the odd intelligent comment.

Disclaimer: Might not always be intelligent comments trianglepupper

mint mesa
#

buffer done, now for logic

mint mesa
#

been tinkering with the fcpu mod for the past few days,
quite an intriguing mod
ive had it installed for quite some time but never looked at it
thinking of diverting into using fcpu as the core of this project
it would save space and give me more intimate control over signals and conditions required to send/receive them
they have a 64 slot registry space, which means i can store 64 separate signals of same or different type and value
which makes my designs worthless by comparison😅
its been fun to learn its programming language though, and i will continue using it.

On another note, a proper server has been made, however it is not yet publicly available, so hold out for that.
when the server is available, anyone who wants to have a look at the project in-game will be able to do so
ive set permissions such that no one other than myself and those i place in the developer role will be able to modify any entities or their configurations, nor place or destroy structures.

And lastly, i will not be posting as frequently as before, as ive become quite busy, however i will be posting once or twice a week to keep this thread alive.

vapid fiber
#

they have a 64 slot registry space, which means i can store 64 separate signals of same or different type and value
which makes my designs worthless by comparison😅
no, because this combinator relies on the mod being used
vanilla designs have an advantage over mods. whether that's important depends on your preference though

mint mesa
#

very true
i will most likely work on these side by side though

#

:ProgReg #Program Registry
clr
lea r34 :ProgReg
lea r35 :Set-Constants
lea r36 :Wait
lea r37 :FB1
lea r38 :Input-Is-S
lea r39 :Input-Is-L
lea r40 :exit
lea r41 :output
lea r42 :FB2
lea r43 :FB3
lea r44 :FB4
lea r45 :FB5
lea r46 :FB6
lea r47 :FB7
lea r48 :FB8
lea r49 :FB9
lea r50 :add-skip
:---------------------------
:Set-Constants
mov r14 1000000000[virtual-signal=signal-L]
mov r15 1000000[virtual-signal=signal-S]
mov r16 100000000[virtual-signal=signal-9]
mov r17 10000000[virtual-signal=signal-8]
mov r18 1000000[virtual-signal=signal-7]
mov r19 100000[virtual-signal=signal-6]
mov r20 10000[virtual-signal=signal-5]
mov r21 1000[virtual-signal=signal-4]
mov r22 100[virtual-signal=signal-3]
mov r23 10[virtual-signal=signal-2]
mov r24 1[virtual-signal=signal-1]
mov r25 256[virtual-signal=signal-9]
mov r26 128[virtual-signal=signal-8]
mov r27 64[virtual-signal=signal-7]
mov r28 32[virtual-signal=signal-6]
mov r29 16[virtual-signal=signal-5]
mov r30 8[virtual-signal=signal-4]
mov r31 4[virtual-signal=signal-3]
mov r32 2[virtual-signal=signal-2]
mov r33 1[virtual-signal=signal-1]
:Wait
bkg 1
fig r11 [virtual-signal=signal-S]
fig r12 [virtual-signal=signal-L]
tgt r11 0
jmp r38
tgt r12 0
jmp r39

:Input-Is-S
mov r13 r11
mov r12 r11
jmp r37

:Input-Is-L
mov r13 r12
mov r11 r12
jmp r37

:FB1
sub r13 r13 r25
tgt r13 0
jmp r40
teq r13 0
mov r1 1[virtual-signal=signal-9]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB2
mov r12 r13
sub r13 r13 r26
tgt r13 0
mov r2 1[virtual-signal=signal-8]
tgt r13 0
jmp r43
teq r13 0
mov r2 1[virtual-signal=signal-8]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB3
mov r12 r13
sub r13 r13 r27
tgt r13 0
mov r3 1[virtual-signal=signal-7]
tgt r13 0
jmp r44
teq r13 0
mov r3 1[virtual-signal=signal-7]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

#

:FB4
mov r12 r13
sub r13 r13 r28
tgt r13 0
mov r4 1[virtual-signal=signal-6]
tgt r13 0
jmp r45
teq r13 0
mov r4 1[virtual-signal=signal-6]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB5
mov r12 r13
sub r13 r13 r29
tgt r13 0
mov r5 1[virtual-signal=signal-5]
tgt r13 0
jmp r46
teq r13 0
mov r5 1[virtual-signal=signal-5]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB6
mov r12 r13
sub r13 r13 r30
tgt r13 0
mov r6 1[virtual-signal=signal-4]
tgt r13 0
jmp r47
teq r13 0
mov r6 1[virtual-signal=signal-4]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB7
mov r12 r13
sub r13 r13 r31
tgt r13 0
mov r7 1[virtual-signal=signal-3]
tgt r13 0
jmp r48
teq r13 0
mov r7 1[virtual-signal=signal-3]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB8
mov r12 r13
sub r13 r13 r32
tgt r13 0
mov r8 1[virtual-signal=signal-2]
tgt r13 0
jmp r49
teq r13 0
mov r8 1[virtual-signal=signal-2]
teq r13 0
jmp r41
tlt r13 0
mov r13 r12

:FB9
mov r12 r13
sub r13 r13 r33
tgt r13 0
mov r9 1[virtual-signal=signal-1]
tgt r13 0
jmp r40
teq r13 0
mov r9 1[virtual-signal=signal-1]
teq r13 0
jmp r41
tlt r13 0
jmp r40

hlt
:output
mul r1 r1 r16
mul r2 r2 r17
mul r3 r3 r18
mul r4 r4 r19
mul r5 r5 r20
mul r6 r6 r21
mul r7 r7 r22
mul r8 r8 r23
mul r9 r9 r24
add r10 r1 r2
add r10 r10 r3
:add-skip
add r10 r10 r4
add r10 r10 r5
add r10 r10 r6
add r10 r10 r7
add r10 r10 r8
add r10 r10 r9
tas r11 r15
add r10 r10 r15
tas r11 r15
sst r10 [virtual-signal=signal-S]
tas r11 r14
add r10 r10 r14
tas r11 r14
sst r10 [virtual-signal=signal-L]
mov out1 r10
btgc r11
clr out1
jmp r34

:exit
btgc r13
jmp r34

#

.
.
.
script for decimal to fbinary on fcpu
definitely not worth the effort😅
but it was fun to make!

willow pulsar
#

feels easier to do with normal combinators 🦆