The extended graphics commands seem to allow X/Y positioning with an 8-bit color.
I think the picture shows an 80x25 screen?
What gives here? Anyone know what's going on?
EDIT: I can now see that is does have bit mapped graphics. It must have a built-in serial like terminal with graphics capabilities.
EDIT2: Probably using this chip: https://www.adafruit.com/product/1590
:-)
That said, a retro laptop this thick would look really nice in stained wood.
Funnily enough I've been musing this past month would I better separate work if I had a limited Amiga A1200 PC for anything other than work! This would nicely fit.
Please do submit to HackaDay I'm sure they'd salivate over this and it's amazing when you have the creator in the comments. Even if just to explain no a 555 wouldn't quite achieve the same result. No not even a 556...
Any time I see this phrase I know these are my people.
It always mildly tickles me when retrocomputer designs use anachronistic processors way more powerful than the CPU in their design - in this case, there’s a ATmega644 as a keyboard controller (64K ROM - although only 4K RAM, up to 20MHz) and presumably something pretty powerful in the display board.
Takes me back to a time when a laptop would encourage the cat to share a couch because of the amount of heat it emitted.
Amazingly quick as well. Pointless projects are so much better and more fun when they don't take forever!
What I really would love: modern (continously built) modern (less than 10 years old tech) devices ryf-cetified.
Not 64?
(Edit: I see part of the address space is reserved for ROM, but it still seems a bit wonky.)
Add a DIN plug and record programs in Kansas City Standard on a cassette recorder. Could be a walkman. A floppy (full 8" type) was a luxury. Almost a megabyte! imagine what you can do.. when a program is the amount of text you can fit in the VBI of a ceefax/teletext broadcast, or is typed in by hand in hex. Kansas city standard is 300 bits/second and the tape plays in real-time so a standard C60 is like 160kb on both sides if you were lucky: it misread and miswrote a LOT.
I used to do tabular GOTO jump table text adventures, and use XOR screen line drawing to do moving moire pattern interference fringes. "mod scene" trippy graphics!
Thats a mandelbrot in ASCII, the best I've seen, on the web page. Super stuff.
People wrote tiny languages for the 6502. integer only but C like syntax, or Pascal or ALGOL. People did real science in BASIC, a one weekend course got you what you needed to do some maths for a Masters or PHD in some non CS field.
My friends did a lot more of this than me. Because I had access to a Dec-10 and a PDP-11 at work and later Vax/VMS and BSD UNIX systems, I didn't see the point of home machines. A wave I wish I'd ridden but not seeing the future emerge has been a constant failure of mine.
It occurred to me that given the 6502's predictable clock cycle timings it should be possible to create a realtime disassembler using e.g. an Arduino Mega 2560+character lcd display attached to the 6502's address/data/etc pins.
Of course, this would only be useful in single-stepping/very slow clock speeds. Still, I think it could be useful in learning how the 6502 works.
Is there relevant prior work? I'm struggling with my google fu.
Please, what is your trick, is it a variation on bank memories?
We might have had to manage with just a few MB of RAM and efficient ARM cores running at maybe 30 MHz or so. Would we still get web browsers? How about the rest of the digital transformation?
One thing I do know for sure. LLMs would have been impossible.
Anyhow, the WWW was invented in 1989/1990 on a 25Mhz 68040 NextCube. Strictly speaking, the 68040 and NextCube weren't released until 1990 (and the NeXT was an expensive machine) but they were in development in 1989 so that's not a stretch. Anyhow, WWW isn't really much more than hypercard (1987) with networking.
It’s kind of the ideal combination in some ways. It’s fast enough to competently run a nice desktop GUI, but not so fast that you can get overly fancy with it. Eventually you’d end up OSes that look like highly refined versions of System 7.6/Mac OS 8 or Windows 2000, which sounds lovely.
Hypercard was absolutely dope as an entry-level programming environment.
Even modern desktop Linux pales in comparison because although it’s technically possible to change anything imaginable about it, to do a lot of things that extensions did you’re looking at at minimum writing your own DE/compositor/etc and at worst needing to tweak a whole stack of layers or wade through kernel code. Not really general user accessible.
Because extensions were capable of changing anything imaginable and often did so with tiny-niche tweaks and all targeted the same system, any moderately technically capable person could stack extensions (or conversely, disable system-provided ones which implemented a lot of stock functionality) and have a hyper-personalized system without ever writing a line of code or opening a terminal. It was beautiful, even if it was unstable.
A point for discussion is whether image-based systems are the same kind of thing as OSes where system and applications are separate things, but if we include them, Smalltalk-80 is better in that regard. It doesn’t require you to reboot to install a new version of your patch (if you’re very careful, that’s sometimes possible in classic Mac OS, too, but it definitely is harder) and is/has an IDE that fully supports it.
Lisp systems and Self also have better support for it, I think.
You could also directly jump into the ExitToShell code in ROM (G 49F6D8, IIRC). Later versions of Minibug had an “es” command that more or less did the same thing (that direct jump always jumps into the ROM code, “es” would, I think, jump to any patched versions)
Writing a MacOS classic extension wasn’t exactly easy. Debugging one could be a nightmare.
I’m not sure how GTK themes are done now, but they used to be very easy to make.
And it wasn’t just theming. Classic Mac OS extensions could do anything from add support for new hardware to overhaul the text rendering system entirely to giving dragged desktop icons gravity and inertia to adding a taskbar or a dock. The sky was the limit, and having a single common target to do any of those things (vs. being split between the kernel and a thousand layers/daemons/DEs/etc) meant that if it could be done, it probably had been.
I’ve done a couple MITM toys with Windows 3.x and the trick is always exposing the same interface as the thing you want to replace, even if you only do something like inverting mouse movements on odd minutes, you just pass everything else down to the original module.
If we really got stuck in the hundreds of MHz range, I guess we’d see many-core designs coming to consumers earlier. Could have been an interesting world.
Although, I think it would mostly be impossible. Or maybe we’re in that universe already. If you are getting efficiency but not speed, you can always add parallelism. One form of parallelism is pipelining. We’re at like 20 pipeline stages nowadays, right? So in the ideal case if we weren’t able to parallelize in that dimension we’d be at something like 6Ghz/20=300Mhz. That’s pretty hand-wavey, but maybe it is a fun framing.
It would probably need a decent memory controller, since it wouldn't be able to dedicate 32 pins for a data bus, loads and stores would need to be done wither 8 or 16 bits at a time, depending on how many pins you want to use for that..
From a software-complexity standpoint, something like 64 MiB of RAM possibly even 32 MiB for a single-tasking system seems sufficient.
Projects such as PC/GEOS show that a full GUI OS written largely in assembly can live comfortably within just a few MiB: https://github.com/bluewaysw/pcgeos
At this point, re-targeting the stack to RISC-V is mostly an engineering effort rather than a research problem - small AI coding assistants could likely handle much of the porting work over a few months.
All you need is RV32I.
No, modern CPUs are far more power efficient for the same compute.
The primary power draw in a simple handheld console like would be the screen and sound.
Putting an equivalent MCU on a modern process into that console would make the CPU power consumption so low as to be negligible.
The downside would be we’d have to think about binary compatibility between different platforms from different vendors. Anyway, it’d be really interesting to see what we could do.
Computers have been “fast enough” for a very long time now. I recently retired a Mac not because it was too slow but because the OS is no longer getting security patches. While their CPUs haven’t gotten twice as fast for single-threaded code every couple years, cores have become more numerous and extracting performance requires writing code that distributes functionality well across increasingly larger core pools.
Mainframes are also like that - while a PDP-11 would be interrupted every time a user at a terminal pressed a key, IBM systems offloaded that to the terminals, that kept one or more screens in memory, and sent the data to another computer, a terminal controller, that would, then, and only then, disturb the all important mainframe with the mundane needs or its users.
You also have things like the IBM Cell processor from PS3 days: a PowerPC 'main' processor with 7 "Synergistic Processing Elements" that could be offloaded to. The SPEs were kinda like the current idea of 'big/small processors' a la ARM, except SPEs are way dumber and much harder to program.
Of course, specialized math, cryptographic and compression processors have been around forever. And you can even look at something like SCSI, where virtually all of the intelligence for working the drive was offloaded to the drive ccontroller.
Lots of ways the implement this idea.
Anyway, its all about that alternative-universe, where the success of the SGI tiBook has everyone running Irix in their pockets ..
That and powering their GUI to Linux.
What killed that balance wasn't raw speed, it was cheap RAM. Once you could throw gigabytes at a problem, the incentive to write tight code disappeared. Electron exists because memory is effectively free. An alternate timeline where CPUs got efficient but RAM stayed expensive would be fascinating — you'd probably see something like Plan 9's philosophy win out, with tiny focused processes communicating over clean interfaces instead of monolithic apps loading entire browser engines to show a chat window.
The irony is that embedded and mobile development partially lives in that world. The best iOS and Android apps feel exactly like your description — refined, responsive, deliberate. The constraint forces good design.
I dunno if it was cheap RAM or just developer convenience. In one of my recent comments on HN (https://news.ycombinator.com/item?id=46986999) I pointed out the performance difference in my 2001 desktop between a `ls` program written in Java at the time and the one that came with the distro.
Had processor speeds not increased at that time, Java would have been relegated to history, along with a lot of other languages that became mainstream and popular (Ruby, C#, Python)[1]. There was simply no way that companies would continue spending 6 - 8 times more on hardware for a specific workload.
C++ would have been the enterprise language solution (a new sort of hell!) and languages like Go (Native code with a GC) would have been created sooner.
In 1998-2005, computer speeds were increasing so fast there was no incentive to develop new languages. All you had to do was wait a few months for a program to run faster!
What we did was trade-off efficiency for developer velocity, and it was a good trade at the time. Since around 2010 performance increases have been dropping, and when faced with stagnant increases in hardware performance, new languages were created to address that (Rust, Zig, Go, Nim, etc).
-------------------------------
[1] It took two decades of constant work for those high-dev-velocity languages to reach some sort of acceptable performance. Some of them are still orders of magnitude slower.
I'd go look at the start date for all these languages. Except for C#, which was a direct response to the Sun lawsuit, all these languages spawned in the early 90s.
Had processor speed and memory advanced slower, I don't think you see these languages go away, I see they just end up being used for different things or in different ways.
JavaOS, in particular, probably would have had more success. Seeing an entire OS written in and for a language with a garbage collector to make sure memory isn't wasted would have been much more appealing.
I don't understand your point here - I did not say those languages came only after 2000, I said they would have been relegated to history if they didn't become usable due to hardware increases.
Remember that Java was not designed as a enterprise/server language. Sun pivoted when it failed at its original task (set top boxes). It was only able to pivot due to hardware performance increases.
And I disagree with this assessment. These languages became popular before they were fast or the hardware support was mature. They may have taken different evolution routes, but they still found themselves useful.
Python, for example, entered in a world where perl was being used for one off scripts in the shell. Python replacing perl would have still happened because the performance characteristics of it (and what perl replaced, bash scripts) is similar. We may not have used python or ruby as web backends because they were too slow for that purpose. That, however, doesn't mean we wouldn't have used them for all sorts of other tasks including data processing.
> Remember that Java was not designed as a enterprise/server language. Sun pivoted when it failed at its original task (set top boxes). It was only able to pivot due to hardware performance increases.
Right, but the java of old was extremely slow compared to today's Java. The JVM for Java 1 to 1.4 was dogshit. It wasn't hardware that made it fast.
Yet still, java was pretty popular even without a fast JVM and JIT. Hotspot would have still likely happened but maybe the GC would have evolved differently as the current crop of GC algorithms trade memory for performance. In a constrained environment Java may have never adopted moving collectors and instead relied on Go like collection strategies.
Java applets were a thing in the 90s even though hardware was slow and memory constrained. That's because the JVM was simply a different beast in that era. One better suited to the hardware at the time.
Even today, Java runs on hardware that is roughly 80s quality (see Java Card). It's deployed on very limited hardware.
What you are mistaking is the modern JVM's performance characteristics for Java's requirements for running. The JVM evolved with hardware and made tradeoffs appropriate for Java's usage and hardware capabilities.
I remember the early era of the internet. I ran Java applets in my netscape and IE browsers on a computer with 32MB of ram and a 233MHz processor. It was fine.
If resources are limited, that changes the calculus. But it can still make sense to spend a lot on hardware instead of development.
The backstory is that in the late 2050s when AI has its hands in everything, humans loose trust of it. There are a few high profile incidents - based on AI decisions -, which cause public opinion to change, and an initiative is brought in to ensure important systems run hardware and software that can be trusted and human reviewed.
A 16bit CPU architecture - with no pipelining, speculative execution etc is chosen, as it's powerful enough to run such systems, but also simple enough that a human can fully understand the hardware and software.
The goal is to make a near-future space exploration MMO. My Macbook Pro can simulate 3000 CPU cores simultaneously, and I have a lot of fun ideas for it. The irony is that I'm using LLMs to build it :D
My Vic20 could do this, and a C64 easily, really it was just graphics that were wanting.
I was sending electronic messages around the world via FidoNet and PunterNet, downloaded software, was on forums, and that all on BBSes.
When I think of the web of old, it's the actual information I love.
And a terminal connected to a bbs could be thought of as a text browser, really.
I even connectd to CompuServe in the early 80s via my C64 through "datapac", a dial gateway via telnet.
ANSI was a standard too, it could have evolved further.
Prodigy established a (limited) graphical online service in 1988.
Had we stopped with 1990s tech, I don't think that things would have been fundamentally different. 1980s would have been more painful, mostly because limited memory just did not allow for particularly sophisticated graphics. So, we'd be stuck with 16-color aesthetics and you probably wouldn't be watching movies or editing photos on your computer. That would mean a blow to social media and e-commerce too.
There is certainly a level of "good enough" that's come in, but a lot of that comes not from devs but from management.
But I'll say that part of what has changed how devs program is what's fast and slow has changed from the 90s to today.
In the early 90s, you could basically load or store something into memory in 1 or 2 CPU cycles. That meant that datastructures like a linked list were a more ideal than datastructures like an array backed list. There was no locality impact and adding/removing items was faster.
The difference in hard drive performance was also notable. One wasteful optimization that started in the late 90s was duplicating assets to make sure they were physically colocated with other data loading. That's because the slowest memory to load in old systems came from the hard drive.
Now with SSDs, disk loading can literally be nearly as fast as interactions with GPU memory. Slower than main memory, but not by much. And because SSDs don't suffer as much from random access, it means how you structure data on disk can be wildly different. For example, for spinning disks a b-tree structure is ideal because it reduces the amount of random accesses across the disk. However, for an SSD, a hash datastructure is generally better.
But also, the increase of memory has made tradeoffs a lot more worth it. At one point, the best thing you could do is sort your memory in some way (perhaps a tree structure) so that searching for items is faster. That is in-fact built into C++'s `map`. But now, a hash map will eat a bit more memory, but the O(1) lookup is much more ideal in general for storing lookups.
Even when we talk about the way memory allocation works, we see that different tradeoffs have been made than would be without a lot of extra memory.
State of the art allocators use multiple arenas and memory allocators to allow for multithreaded applications to allocate as fast as possible. That does mean you end up with wasted memory, but you can allocate much faster than you could in days of old. Without that extra memory headroom, you end up with slower allocation algorithms because wasting any space would be devastating. Burning the extra CPU cycles to find a location for allocation ends up being the right trade off.
Both the hardware and the forth software.
APIs in a B2B style would likely be much more prevalent, less advertising (yay!) and less money in the internet so more like the original internet I guess.
GUIs like https://en.wikipedia.org/wiki/SymbOS
And https://en.wikipedia.org/wiki/Newton_OS
Show that we could have had quality desktops and mobile devices
https://www.symbos.org/shots.htm
This is what slow computers with a few hundred kB of RAM can do.
I know it’s a meme on HN to complain that modern websites are slow, but this is a perfect example of how completely distorted views of the past can get.
No, browsing the web in the early 90s was slooow. Even simple web pages took a long time to load. As you said, internet connections were very slow too. I remember visiting pages with photos that would come with a warning about the size of the page, at which point I’d get up and go get a drink or take a break while it loaded. Then scrolling pages with images would feel like the computer was working hard.
It’s silly to claim that 90s web browsers ran about as fast as they do today.
At home, when I was on dialup, certainly.
At work I did not experience this. Most pages loaded in Netscape navigator in about the same time that most pages load now - a few seconds.
> Then scrolling pages with images would feel like the computer was working hard.
Well, yes, single-core, single-socket and single-processor meant that the computer could literally only do a single thing at a time, and yet the scrolling experience on most sites was still good enough to be better than the scrolling experience on some current React sites.
It also was a simpler time, the technology was in peoples lives but as a small side quest to their main lives. It took the form of a bulky desktop in the den or something like that. When you walked away from that beige box, it didn't follow or know about the rest of your life.
A life where a Big Mac meal was only $2.99, a toyota corolla was $9-15k, houses were ~100k, and when average dev salaries were ~50k. That was a different life. I don't know why but I picture this music video that was included on the Windows 95 cd bonus folder when I think of this simulacra: https://www.youtube.com/watch?v=iqL1BLzn3qc
When I saw that video in 1995, I understood something we now know as Youtube would be inevitable as the connection speeds improve. Although I thought it'd be like MTV, a way to watch the newest music videos.
This is like saying Victorian Britain wasn't polluted, except for all the coal burning.
Web pages took a minute to load, now we're optimising them for instant response.
I had t3 connections for most of my browsing which was faster than ethernet of the day - even by todays standards that isn't too bad. I avoided dialup if I could because it was slow. Even isdn was okay speeds.
Your claim that I responded to was that web browsers were just as fast on 25MHz CPUs.
> I had t3 connections for most of my browsing which was faster than ethernet of the day - even by todays standards that isn't too bad.
T3 speeds are very slow in today's terms. Even my cell phone does a couple orders of magnitude better from where I'm sitting.
There are a lot of weird claims going on in your posts. I think it's a lot of nostalgia coloring your views of how fast things were in the past.
This is the same pattern you see in politics when people on all sides (even the nominally progressive ones) lie to each other about how great the olden days were, when in reality it's all about their dissatisfaction with the present day.
Try using a 2400baud modem, that was slow
2400 were 300 bytes per second
(though it might be that 9600bps worked at the 'official definition' of 2400 baud but nobody advertised it like that)
Of course you're correct and a 56k modem is something like 8k Baud, but in marketing the bigger number usually wins
And up until the 2400bps modems IIRC bauds and bps were interchangeable
Because all of the complicated client side stuff was in Java applets or Shockwave :( Pepperidge Farm remembers having to wait 10 minutes for a GameBoy emulator to load to play Pokémon Yellow on school computers…
Windows NT 4 seemed OK, but a lot of software didn't run.
By the time of Windows 2000 the tradeoff was much better.
(Allowing a settle down time remained a good idea, in my experience. Even if Windows 2000 and later were very unlikely to actually crash, the response time would still be dogshit until everything had been given time to settle into a steady state. This problem didn't get properly fixed until pervasive use of SSDs - some time between Windows 7 and Windows 8, maybe? - and even then the fix was just that there was no longer any pressing need to actually fix it.)
We had ELIZA, and that was enough for people to anthropomorphize their teletype terminals.
As much as I like my Apple Silicon Mac I could do everything I need to on 2008 hardware.
Edit: oh I thought you meant if we were stuck in 6502 style stuff. With megabytes of ram we'd be able to do a lot more. When I was studying we ran 20 X terminals with ncsa mosaic on a server with a few CPUs and 128GB RAM or so. Graphic browsing would be fine.
Only when Java and JavaScript came on the scene things got unbearably slow. I guess in that scenario most processing would have stayed server-side.
https://en.wikipedia.org/wiki/PLATO_(computer_system) is from the 1960s, so, technically, it certainly is possible. Whether it would make sense commercially to support a billion users would depend on whether we would stay stuck on prices of the eighties, too.
Also, there’s mobile usage. I would it be possible to build a mobile network with thousands of users per km² with tech from the eighties?
BTW, IBM has been doing a fine design job with their quantum computers - they aren’t quite the revolution we were promised, but they do look the part.
The ones that "could have happened" IMO are the transistor never being invented, or even mechanical computers becoming much more popular much earlier (there's a book about this alternate reality, The Difference Engine).
I don't think transistors being invented was that certain to happen, we could've got better vacuum tubes, or maybe something else.
People that time were not actually sure how long the improvements would go on.
The Transputers (mentioned in other comments) had already decoupled the core speed from the bus speed and Chuck Moore got a patent for doing this in his second Forth processor[1], which patent trolls later used to extract money from Intel and others (a little of which went to Chuck and allowed him to design a few more generations of Forth processors).
[1] https://en.wikipedia.org/wiki/Ignite_(microprocessor)
What is the current best symbol rates we get on PCB traces? I know we’ve been multiplexing a lot of channels using the same tricks we used with modems to get above 9600bps on POTS.
Schedule+, which was contained in Windows for Workgroups 3.11, contained address book functionalities that were clearly better than Cardfile.
But people used Cardfile for many other different purposes than serving as an address book.
BBSes existed at the same time and if you were into BBSes you were obsessive about it.
We'd probably get MP3 but not video to any great or compelling degree. Mostly-text web, perhaps more gopher-like. Client-side stuff would have to be very compact, I wonder if NAPLPS would've taken off.
Screen reader software would probably love that timeline.
Only thing that killed web for old computers is JAVASCRIPT.
You're right we had graphical apps, but we did also have very little video. CuSeeMe existed - video conferencing would've still been a thing, but with limited resolution due to bandwidth constraints. Video in general was an awful low res mess and would have remained so if most people were limited to ISDN speeds.
While there were still images on the web, the amount of graphical flourishes were still heavily bandwidth limited.
The bandwidth limit they proposed would be a big deal even if CPU speeds continued to increase (it could only mitigate so much with better compression).
JavaScript is innocent. The people writing humongous apps with it are the ones to blame. And memory footprint. A 16 MB machine wouldn’t be able to hold the icons an average web app uses today.
https://en.wikipedia.org/wiki/HTML_Application
Which is funny, because HTML, Java, and JavaScript were being talked about as an app platform a few years before then, precisely to prevent Microsoft from drinking everybody's milkshake on the desktop.
Ironically, now I'm using an ESP32-S3, 10x more powerful, just to run Iot devices.
I remember a subscriber T1 costing 4 figures per month, and I don't think it's because the copper pairs themselves were any different. (They weren't. As long as they didn't have bridge-taps, it was just plain old pairs. The repeaters every few kilofeet were not that expensive either.)
I remember the early-90s internet guidance that idle traffic like keepalive pings was discouraged, especially if you were sending traffic overseas, because it cluttered up the backbone links with packets that weren't actually valuable, and that was rude / abusive. Presumably edge CDNs would've still happened (or, ISPs providing Usenet servers basically did a lot of that already), but you simply wouldn't be doing video over the internet at large because the bandwidth charges would kill you.
There was Lynx text browser that was ported even to MS-DOS. I was using it until about 2010. It was a great browser until websites become unusable.
Maybe they could, as ASICs in some laboratories :)
I can see it now… the a national lab can run ImageNet, but it takes so many nodes with unobtanium 3dfx stuff that you have to wait 24 hours for a run to be scheduled and completed.
We would have seen much less desktop apps being written using Javascript frameworks.
Yes, just that they would not run millions of lines of JavaScript for some social media tracking algorithm, newsletter signup, GDPR popup, newsletter popup, ad popup, etc. and you'd probably just be presented with the text only and at best a relevant static image or two. The web would be a place to get long-form information, sort of a massive e-book, not a battleground of corporations clamoring for 5 seconds of attention to make $0.05 off each of 500 million people's doom scrolling while on the toilet.
Web browsers existed back then, the web in the days of NCSA Mosaic was basically exactly the above
Did everyone forget the era of web browsing when pages were filled with distracting animated banner ads?
The period when it was common for malicious ads to just hijack the session and take you to a different page?
The pop-up tornados where a page would spawn pop ups faster than you could close them? Pop unders getting left behind to discover when you closed your window?
Heavy flash ads causing your browser to slow to a crawl?
The modern web browsing experience without an ad blocker feels tame compared to the early days of Internet ads.
Also
> distracting animated banner ads
These were characteristic of the late 90s, but were way easier to block back then. Just put "0.0.0.0 ad.doubleclick.net" in your /etc/hosts and 99% of them went away. Or send them to 127.0.0.1 and serve a white single pixel GIF with Apache to avoid web browsers hanging on the request.
The popups of the late 90s were easy to get rid of too, all you had to do was disable JS. There were almost zero websites that did anything good with JS back then.
Flash crap? Don't install it if you don't want it.
HotWired (Wired's first online venture) sold their first banner ads in 1994.
DoubleClick was founded in 1995.
Neither were limited to 90's hardware:
Web browsers were available for machines like the Amiga, launched in 1985, and today you can find people who have made simple browsers run on 8-bit home computers like the C64.
This was an Amiga 500 with maxed-out RAM (8 MB) and a hard drive.
The period without ads lasted ~4 years, during which almost nobody used the web, and even fewer used a graphical browser.
Mosaic 0.5 was first released in January '93 (yes, there were other graphical browsers preceding it, like Viola, but none saw broad distribution)
Netscape was first launched in October '94.
By '94 the first banner ads existed.
DoubleClick started selling banner ads in '95.