Hacker Newsnew | past | comments | ask | show | jobs | submit | RiverCrochet's commentslogin

They did. AND, OR and NOT were bitwise operations as well as conditional operators. E.g. POKE 254, PEEK(254) AND 127 would turn off bit 7 of memory location 254 without affecting other bits.

In which BASIC?

All the Commodore BASICs, Applesoft, GW-BASIC, QBASIC from what I remember. Very certain about the Commodore BASICs.

I did actually know that Commodore BASIC had it but had forgotten. I don't think I'd ever used GW-BASIC or QBASIC, weren't they on PCs?

Apple IIs weren't really a thing over here although the very first home computer I ever used was an Apple II belonging to a friend of my mother's - Tony van der Kuyl, father of video games magnate Chris van der Kuyl ;-)


Connecting to the creator of a work of art provides meaning, which makes the experience of art better and more interesting. It allows you to experience worlds other than your own. I don't go into deep dives of all music I listen to, but I do want the option for music I like.

If there's no one on the other side, then it's just stimulation. Which is fine if that's what you want. It's something like the difference between watching an OnlyFans model versus an erotic video your significant other made for you.


Not on C64 BASIC. C64 BASIC converted ints to floats internally and converted them back to ints when needed.

What sidestepped part of that conversion was using variables instead of literal constants. So, doing something like N0=0, and using the variable N0 instead of 0 was faster.

Additionally, C64 looked up variables in the order they were defined, so variables defined later were slower. If your program used 0 a lot, you'd want to have N0=0 as the first statement in your program. I typically had N0=0 and N1=1 as those were common to use.

QBasic was so much faster and implemented differently. DEFINT A-Z at the top of the program typically sped it up significantly if you didn't use floating point. This might have worked on GW-BASIC as well.


You really used a modem instead of the tape out jack?

The tape jack is a modem.

A silver lining is that Javascript code will run on any modern browser+OS and can be created with nothing but a text editor. Even though this is many degrees of abstraction from facing the bare metal that was there in the 80s and 90s, it's better than nothing.

Windows XP (since SP2? )came with a C# compiler and it was pretty much ignored, CSC.exe.

A bit less with Perl and Python under *nixes where the Idle was about two clicks away.

With C# you would get far more performance and much better support.


If modern x86 microcode ever gets sufficiently understood and reverse engineered I bet someone gets a PLAYDOOM instruction working. (I know it's been at least partially implemented on FPGAs)

An open way to trade, store, and export lists of websites in a way that works seamlessly on desktop and mobile browsers would be pretty neat.


Also, here is a list of all known personal websites participating in the Wander network: https://susam.codeberg.page/wcn/

Like bookmarks and links?

On a higher level than individual URLs and separate from browser favorites. Something like versioned packages of links with decorations.

Something like a ".urlpackage" format that will have

- a list of urls

- optional metadata for each url, such as image, description, last-known-good

- metadata for the entire package, including version, an image, a favicon, and a description for the entire package that a client could use to present it nicely to the end user.

It'd be cool if my phone could open this format, show me the image and description with the list of links, and let me browse them, add them to my bookmarks, or add to the collection and make a new .urlpackage that I could then share back or publish somewhere.

It's probably possible to simply do this with a self-contained HTML file or similar I guess, though.


Slavery is actually legal. The 13th Amendment banning it has the explicit exception "except as punishment for a crime". Prison labor is used by a number of industries.

My theory:

UNIX was developed originally on a DEC PDP-7.

I'm not a PDP-7 assembly language expert but there's many instructions that take action if the accumulator is 0. So if a specific UID value has to be special, it's probably easiest and fastest for that value to be 0.

https://dn710100.ca.archive.org/0/items/bitsavers_decpdp7PDP...

For newer CPUs, though (which I am familar with):

Many other CPU architectures have a "Z flag." This is a bit in a status register that's set if the last value encountered is a zero. So you can do something like this:

    LOAD_ACCUMULATOR uid_value
    BRANCH_IF_EQUAL somewhere
The BRANCH_IF_EQUAL instruction (actually BEQ in a few instruction sets) typically branches if that Z flag in the status register is zero. Some instructions on some CPUs reference the Z flag for what it is directly, like DJNZ on Z80 and I think x86 (Decrement and Jump if Not Zero).

If you want to test if a value is something other than zero, then you have to do this:

    LOAD_ACCUMULATOR uid_value
    COMPARE_ACCUMULATOR something
    BRANCH_IF_EQUAL somewhere
The COMPARE_ACCUMULATOR instruction (actually CMP in 6502 and similar in other instruction sets) subtracts "something" from the current value of the accumulator, but doesn't save the result, BUT sets the flags, including that important Z flag.

So it takes more instructions on many CPU architectures if the special value is not zero. This isn't limited to root being UID zero, it's also why "end of string" is zero and zero is a sentinel value in general.


> The COMPARE_ACCUMULATOR instruction (actually CMP in 6502 and similar in other instruction sets)

I think 6502 is the rare exception of a CPU that sets the zero and negative flags on memory loads. If so, you wouldn’t need a CMP there.


Cuba went through something similar in 1991:

https://en.wikipedia.org/wiki/Special_Period


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: