惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
罗磊的独立博客
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
美团技术团队
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
The Register - Security
The Register - Security
IT之家
IT之家
WordPress大学
WordPress大学
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
NISL@THU
NISL@THU
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
B
Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
S
Security Affairs
小众软件
小众软件
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
A
Arctic Wolf
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence

Secret Weblog

Becoming More Xee: A Modern XPath and XSLT Engine in Rust Looking for new challenges! Repeat Yourself, A Bit The Curious Case of Quentell The Humble For Loop in Rust The Humble For Loop in JavaScript Don Question Best Practices I Was a 1980s Teenage Programmer Part 5: Achieving Assembly I Was a 1980s Teenage Programmer Part 4: The Call of Assembly The Tooling Shift JavaScript: when you need two ways to do it! Empowering Programming Languages Bloat and Retrofuturism Refreshing my Blog Again Random Rust Impressions Apilar: An Alife System I Was a 1980s Teenage Programmer Part 2: Olivetti M24 I Was a 1980s Teenage Programmer: the Alphatronic SolidJS fits my brain Is premature optimization the root of all evil? Framework Patterns: JavaScript edition Roll Your Own Frameworks Framework Patterns Secret Weblog Highlights Refactoring to Multiple Exit Points mstform: a form library for mobx-state-tree Seven Years: A Very Personal History of the Web Morepath 0.16 released! Is Morepath Fast Yet? Introducing Bob Strongpinion Punctuated Equilibrium in Software Morepath 0.15 released! Impressions of React Europe 2016 Morepath 0.14 released! Morepath 0.13 now with Dectate Dectate: advanced configuration for Python code JavaScript Dependencies Revisited: An Example Project The Incredible Drifting Cyber A Brief History of Reselect The Emerging GraphQL Python stack Thoughts about React Europe Build a better batching UI with Morepath and Jinja2 GraphQL and REST Server Templating in Morepath 0.10 10 reasons to check out the Morepath web framework in 2015 A Review of the Web and how Morepath fits in Morepath 0.9 released! Better REST with Morepath 0.8 Morepath 0.7: new inter-app linking They say something I don Life at the Boundaries: Conversion and Validation BowerStatic 0.4 released! Morepath 0.6 released! Morepath 0.5(.1) and friends released! New HTTP 1.1 RFCs versus WSGI Against On Naming In Open Source My visit to EuroPython 2014 Morepath 0.4.1 released (with Python 3 fixes) Morepath 0.4 and breaking changes Announcing BowerStatic Morepath 0.3 released! Morepath 0.2 Morepath Python 3 support The Call of Python 2.8 Morepath 0.1 released! WebOb and Werkzeug compared Morepath: from Werkzeug to WebOb Racing the Morepath: SQLAlchemy Integration The Centre Cannot Hold Breaking Morepath Changes Morepath Update How to do REST with Morepath Morepath Security the Gravity of Python 2 #python2.8 discussion channel on freenode Alex Gaynor on Python 3 Morepath Documentation Starting to Take Shape Back to the Center Morepath App Reuse Implementing Grok Grok: the Idea Why Linux Works for Me On the Morepath Reg, Now With More Generic! The New Zope as a Web Framework Jim Fulton, Zope Architect Renewing Zope Object Publishing The Weirdness of Zope The Rise of Zope My Exit from Zope Reg: Component Architecture Reimagined JSConf EU 2013 impressions Obviel 1.0! JS Dependency Tools Redux Obviel 1.0rc1 released! Succinct data structures
I Was a 1980s Teenage Programmer Part 3: MSX-2
Martijn Faassen · 2024-05-29 · via Secret Weblog

A couple of years after the first two parts, we pick up on this series again. This is Part 3 of a series.

ZX Spectrum

When I was 12, in 1985, I went to secondary school in the city nearby. I would cycle 10 kilometers every morning, about half an hour, and back again in the afternoon. In school I made a friend, and my friend had a ZX Spectrum. This is an intriguing little device with rubber keys each of which had multiple modes. In the right mode you could whole BASIC statements with one keypress, something my friend knew how to do. After school, or even on hour-long breaks during school, we would cycle a few minutes to his house, and play with the computer.

In January 1986 the Space Shuttle Challenger exploded. I remember that at some point afterward my friend coded up an animation of the space shuttle going up and exploding. Too soon? Many animations back then used a primitive tiling system. A tile would be the bitmap of a character, but reprogrammed to look like something else. Then you've move these characters across the screens. The movement would be jerky, but it was cool back then.

MSX-2

For Christmas 19861 I was hoping we'd get a computer. I had seen my uncle's Amiga and I was hoping we might get one of those, but an MSX-2 would also be very cool.

We got the computer, along with color TV that would serve as a monitor. Not an Amiga, it was indeed an MSX-2 computer made by the Dutch electronics concern Philips, the VG-8235. Only a few years ago have I learned it was actually designed and manufacturered by Japanese firm NEC and that Philips had basically just slapped a label on it.

The VG-8235: what came in the box

The MSX-2 computer was equipped with an 8-bit Zilog Z80A CPU running at 3.5 MHz. These were very common in microcomputers back then. I now realize that this chip design was already 10 years old when this computer was built. In the heady days of the 1990s where PC specs were rapidly increasing it would be inconceivable that new computer models would come out with 10 year old CPUs, but the microcomputer revolution of the 1980s was a lot about getting 1970s chip designs to the masses.

MSX was an interesting project to try to standardize home computers, just like the IBM PC had created standard for office computers. It never took off in the United States, but it was big in certain parts of the world. Japanese electronics companies were the driving force behind it, but it also was fairly well established in certain parts of Europe, especially the Netherlands, thanks to Philips. The MSX-2 was the newer version of the standard, with improved specifications for graphics, and more memory.

I learned MSX stood for "Microsoft extended" as it had a Microsoft extended BASIC implementation; Microsoft had started out as a BASIC interpreter implementer for microcomputers and was big in this market. Apparently there is other lore that it stood for "Matsushita-Sony", or that it was named after the MX missile, or that it stood for "Machines with Software eXchangeability".

MSX Games

The MSX-2 supported many games. You would obtain games by going to your friends and copying 3.5 inch floppy discs, which would often contain collections with dozens of games. The whole disk was only 360 kilobytes big! The way we exchanged disks with games wasn't legal, but that barely registered in our minds. The MSX supported a cartridge slot and that's how games were generally sold. But these cartridges could be ripped and saved onto disks. I never owned a game cartridge.

My friend, who after the ZX Spectrum also had upgraded to an MSX-2, had one game cartridge, as it came with an upgraded sound chip that could also by used by other games.

Konami was a big publisher on the MSX-2 that made many of the best games. The Metal Gear series of computer games was born on the MSX-2.

Here are some examples of MSX games:

Penguin Adventure (MSX-1)

A popular Konami game from the MSX-1 era.

Nemesis (MSX-1)

A side-scrolling space shooter. Nemesis was known as Gradius on other platforms.

Metal Gear (MSX-2)

The metal gear series of games started on the MSX. I only ever played the MSX versions.

Space Manbow (MSX-2)

Another side-scrolling game like Nemesis, but with more advanced graphics. I will go into details on those graphics in the next article.

Aleste 2 (MSX-2)

BASIC is the world

But the MSX didn't come with any games out of the box. When you started the computer, you got BASIC. It's interesting how BASIC was computers in the early microcomputer era. A new standard for home computers had to standardize a BASIC right along with it. BASIC was built into the ROM of the computer -- it was just there when you started up the computer. I don't think I really had a conception of other programming languages -- only that BASICs could differ slightly between computer models. I also knew that arcane tools existed on some platforms called a "compiler" that would produce faster programs. At some point I picked up that "assembly language" was required to make real games, basically writing "machine code" directly.

My father had switched from Microsoft GW BASIC to Microsoft QuickBASIC around this time on the Olivetti M24. This did away with the need for line numbers and introduced named locations you could GOTO or GOSUB from. Wild stuff. But not on my MSX-2. This had the conventional line-number based BASIC. The advantage of this is that it didn't require a full-screen editor to write your program. You booted up the computer in a few seconds and you were ready to type in 10 print "Hello world" to start your program.

Programming in BASIC on the MSX

Immediately after we got the MSX I was learning from the manual, this time in Dutch, and I started my first experiments with computer graphics instead of just plain text. I don't even think I had any games for it yet -- that took a trip to the older brother of a school friend, who had an MSX-2 too. MSX-2 computers contained a Yamaha V9938 video chip which supported a 256 x 212 resolution with 256 fixed palette colors. Most games used 256 x 212 with 16 colors chosen from a palette. It also supported hardware sprites - little pieces of graphics, one color only, that could move smoothly around the screen.

Space Avoider

I remember the first sprite-based game that I wrote. It involved spaceships. The player spaceship was at the bottom of the screen and could move left and right. I had no idea how to make it fire missiles, so that's all it could do. I did manage to introduce a single alien craft, which would start on top and slowly move down. The goal was to avoid being hit by the alien spaceship; this was gameplay defined by my highly limited abilities.

I knew the word "space" in English; what nerd doesn't know "space"? I had heard "Space, the Final Frontier" many times, and knew about "Space Invaders". I asked my mother how to say "avoid" in English, and the game title Space Avoider was born.

In the first version of the game, the alien's X coordinate would be identical to the horizontal position of the player, so it was in fact impossible to avoid the alien; certain doom awaited the player. A later version ensured victory was an option by making the alien space ship move slightly more slowly. I believe I even accomplished multi-colored ships by layering mono-colored sprites over each other, though the two sprite layers weren't always entirely in sync.

Next time...

Thanks for reading part 3 of this series! Next time, we'll go deeper into the MSX hardware and the call to write code in assembly.