Hacker News new | ask | show | jobs
by ikari_pl 495 days ago
Do you also feel like you did projects in your teen years that you wouldn't pull off today?

I coded assembly (Z80) in a disk editor, having no assembler, just a handwritten list of opcodes.

I wrote a chat client app (in Delphi) HAVING NO INTERNET at home, I went to a cafe, recorded a dump with Wireshark, printed it on a dot matrix printer, and used a marker pen to highlight the bytes I understand the meaning of.

I miss it so much.

9 comments

Yup. I wrote a TSR program to extend Deluxe Paint II on PC with animation features. Never heard about APIs, and simply copied data from the VGA memory, overlaying my own user interface on top of DP.

The thought of doing this with contemporary systems just seems ... wrong :)

I wrote lots of TSR extensions, I remember one that would allow you to switch between DOS programs.... it broke when the next version of DOS came out.

I was most fond of my image viewer program that worked only on my video card (a cirrus logic) but was 10x faster then others because it used some hw acceleration on the card (not remembering details right now).

It's basically impossible to replicate this level on todays extra-locked-down machines - the bar to entry and just tinker is so much higher.

It's all still available, arguably more accessible from a cost and documentation point of view - I'd argue that the bar to getting something is so much higher.

You can today start banging registers on GPUs, or write your own shader programs, there's well documented modern hardware (e.g. [0]) and completely open-source drivers just sitting there for reference. The issue is that there's so moving parts now that to get anything visible to actually happen it's not just wiring up a couple of registers, but thousands just to get it into a state you can even see the registers you want, then a thousand more.

[0] https://gpuopen.com/amd-gpu-architecture-programming-documen...

Hah, I spent countless hours poking bits around in the Cirrus Logic card that I had.

I found an undocumented (to me, at least) mode that showed 16-bit images by alternating two 8-bit images. I put it in a demo to show at a demoparty, but the projector system did not have a compatible VGA card :(

Well back then we didn’t have all of that memory for those fancy abstraction layers. Sticking your finger in the framebuffer probably wasn’t the worst way to do that!
My favorite program as a teen came about because I had gotten a Sound Blaster (in my 8088 IBM PC), and you could order C/MS chips (they were actually a pair of Philips SAA1099 chips, originally used in the Create Music System aka Game Blaster).[0] Since it came with documentation on how to directly program the hardware registers, and I enjoyed coding music output (I still do enjoy that kind of thing), I ended up writing a program in C that could drive all 12 voices on the chips using the same notation as used by Advanced BASIC "PLAY" statements[1], but added a "V" command to let you select a voice. (BASIC "PLAY" command only supported 1 voice. Maybe 3 on the PCjr.?) It would keep track of how much time passed in each voice while compiling the information so that you could line everything up, and then would use that information to play everything at the right time when the music played back. I remember I had a big case or if/else section depending on the next character, so I must have worked out some sort of state machine without knowing what that was at the time. I took the conductor's score for music we were playing in band class and entered that into a file for the program to play the multi-voice version on my computer. :)

[0] https://en.wikipedia.org/wiki/Philips_SAA1099

and here's a fun video showing the upgrade with a bit of music from The Secret of Monkey Island towards the end. Like the video creator said, I also like how it sounds similar to the GameBoy: https://www.youtube.com/watch?v=3ZtyP9tE3Ug

[1] QBASIC equivalent documentation https://www.qbasic.net/en/reference/qb11/Statement/PLAY-006....

I have thought about this too, and think there. were mainly 4 things that are different now

1. As a teen, I had a lot more free time and could spend hours every night on fun stuff. School was easy and I didn't spend much time on homework

2. As a teen, I also did not have a day job programming too. My head is kinda tired when I come home, so unless it's a really interesting project I will probably just watch some TV

3. As a teen, I did not know about good code practices and could just throw something together and see if it worked. For some reason I now find it hard not to spend time on a good code structure, architecture and best practices. I am too "advanced" to just push out crappy code quickly

4. As an adult, I know more about the alternatives out there, so I'm thinking that there's no point in creating something when there are alternatives.

It’s the power of boredom, imo.
Yep, getting bored is important for creativity.
Kids these days have much less exposure to boredom. Anywhere you are, you can get lost in TikTok or other social media feeds in three seconds.

As a parent I struggle with this a lot, trying to teach some patience to my children who seem conditioned to fiddle with their phones whenever possible. And of course I'm often not much better myself.

That's very relatable. I don't really have any specific project I could mention that would make anyone's jaw drop. But if I look back at how little I knew compared to now, and the fact that I completely self-taught myself everything, I did some insane stuff for my age. I was so determined and could lose myself for weeks into a project just because I was so positively driven. I could do the same stuff now, much better too. But I wouldn't have the same drive and inspiration to come up with something and build it to perfection.

One thing that comes to mind is a bot I made that played bejeweled blitz. It worked by taking screenshots and calculated the optimal move, and moved the mouse to make those moves. I was 13 and wrote it in VB6.

In highschool I wrote software in 6502 assembly and Turbo Pascal to send files from Atari through joystick ports into lpt port on pc to transfer Atari games and run them on emulator on pc. I had no idea about protocols so I was using one communication line to signal that there's new data on others. Also pre-internet times.

I also wrote few games on Atari when I was even younger, but since I got pc in highschool I haven't been able to make any decent progress on (let alone finish writing) a single game on PC. Despite writing a lot of software professionally as an adult I never had the motivation, that I had as a child, to go beyond shallow, small experiments for my personal coding.

My Atari 2600 had an odd behavior with the reset switch. Holding it down at the beginning of the tank/combat game enabled your first shot to go through walls. Did you any Atari bugs while you worked on it? Pretty amazing that you could program these without the benefit of searching any internet for answers. (btw, I replied to you elsewhere :-P)
Yes, my teens were the glory days of 16 bit demoscene, learned a lot.
I wrote a basic bootable 32-bit OS and an editor in x86 assembly :) all without internet and by poring through the Intel manuals and the "Undocumented..." series of books.
I noticed I missed it and so I went back to it a few years ago. I have old systems (mostly from the 70-90s; a few newer because my love for Sun Sparc & pre-Intel SGI) and newer ones like RISC-V boards and low-powered small devices to thinker with. None of this has any commercial value but it feels so much better than the LLM grifting / code slinging for profit. I wish I found a way to combine them, but I feel it's not possible.
One of my "some day" / "thought experiment" projects is to create a small RISC-V RV32EC processor that would only be able to access 64k of its memory space, but would fit on a 40-pin IC: 16 pins of address, 8 pins of data, some interrupt and timing pins, etc. Basically like a 6502 or 8080/Z80 with the RV ISA. I can already think of some "fun" issues like requiring four read/write cycles per load/store operation.
I did a 16 bit processor that is compatible with RISC-V at the assembly language level but has its own binary encoding:

https://github.com/jeceljr/digitalCPUzoo/tree/main/drv16

It is meant as a helper processor in larger FPGA projects. These need less than 64KB of memory. drv16 is about the same size as the tiniest RISC-V (SERV, Glacial) without the huge performance penalties these have.

Yeah, I spent last summer learning and programming attinys in Arduino and soldering small hacks.

This is certainly appealing in comparison to microservice monstrosity I write in a team at work.