Another day, another 500 miles, and another round of hacking. I'm dedicating an hour to this on and off over the weekend.
Right now, I've got an accurate int to hex function written in assembler for printing values of registers, an interrupt handler + installation, and some test code. Right now, I ran into a snag with calling the TSR function on int 21h, but I think its due to lack of sleep. Last few days has been very very stressful and I'm only picking at this as I go. I think I'm going to have to add a section to the next article talking about position-dependent vs. position-independent code as it will become important when we go to install into RAM.
Wish some of the documentation though on the specifics of how TSRs work internally survived; a lot say you have to use small memory model even though I have example code of tiny model TSRs.
Work has been going slow on the next installment of my retro-malware article. Right now, I've got an itoa function written in assembly, but real life has been kinda kicking my ass and I'm not making much headway in writing as I would like. As of right now, I know exactly what I need to write and code, but making the code flow.
Bleh. It doesn't help right now I'm travelling cross-country.
I'm absolutely stocked with the response the first bit of original content I've written for SN has gotten over 80 comments (even if a fair number are my own). It's very good motivation to keep going with it, and I've started working on outlining and planning the next section which I think will cover the following.
I'm targetting ~2000 words in total, not counting the prelude section of the article. This will serve as a prelude to looking at the DOS memory map as a whole as well as get our first taste of how segmentation and relocation work under DOS since we will have to manage CS/DS/SS when we're in TSR mode. I'm currently writing out some demo code but its been fairly slow going since I got tripped up by the fact a pointer is 2 bytes (16-bit), and a lack of free time until this weekend. I'm hoping to have the code half of this cranked out by Friday to write up over the weekend.
I've decided for the time being to continue using NASM. While NASM is not a period specific assembler, its very easy to use, free software and has excellent documentation, and its the only assembler that can target x86_16 from Win64 and Linux64 that actually works. I wouldn't mind using the OpenWatcom assembler except its essentially undocumented. If I was going for period specific, I would need a 16-bit copy of LINK.EXE and MASM. Both are in the Windows DDK but extremely unfriendly to setup, or use Turbo Assembler and code in VirtualBox (pass; I like Notepad++ on Windows).
I've had some hangups on figuring out where to go beyond the basics of TSR programming. Unfortunately, non-IP based stuff appears to have dropped off the face of the internet. LANMAN client on Microsoft's FTP is completely MIA, and I can't find a freeware stack available anywhere that supports anything !TCP/IP. I could write something using Layer 2 protocols, but even then I'm kinda "eh" since that really doesn't go into the history of early networking or stuff. As best I can tell, at least for IPX, the actual Novell NetWare client was TSR, but its essentially non-existent. LANMAN in theory is free on Microsoft's FTP, but no developer documentation that I can find.
One idea I had though was perhaps reviving my ham radio stuff, and plugging the whole thing into AX.25. KA9Q for DOS is open source and implements KISS, and I can emulate another AX.25 host over the serial port (or go full turkey, and plug the other side into an actual radip using Linux as a glorified BNC). That would get me a period specific way of getting the data out of a target system in a targetting attack. (obviously, real NSA would use something beside amauter radio bands, but the concept exists. You could easily hide a micro-radio in a PC case wired up to an ISA slot or something, using the case itself as an antenna).
It's been a busy week between class, and doing my Let's Play series; I've found doing Let's Plays a good way to unwind after a stressful day, and I've also done a bit more livestreaming. To avoid spamming the journal list, I'll likely just do weekly updates until I have communities implemented properly in rehash.
Dwarf Fortress
For those who missed it, I've started a livestreaming series where I play one of my favorite games of all time, Dwarf Fortress. I'm keeping a recap thread going alive on the official DF forums at Bay12. For those who are fans of the game are recommended to check it out. My schedule is somewhat fluid from week to week, and is complicated by a trip to New York City Sunday-Tuesday, but I will try and stream at least once week, or two; I'll usually announce streaming times 24-48 hours in advance, and on Twitter.
I'll name dwarves after those who commit story snipits, or those in the Livestream chat. My next broadcast date is tentatively late Wednesday, but that's subject to change.
NetHack
I have uploaded episodes 2, 3 and 4 (scheduled to go live at midnight tonight), with hope of having regular updates on Monday, Wednesdays, and Fridays. I have footage through episode 7 recorded, but episode 5 requires considerable editing as I do Sokoban in that, and I edited out most of the boring parts (which will be uploaded as a "special" video) with, or soon after 5.
Episode 2
- On this episode of Let's Play NetHack, we wander our way through the Gnomish Mine's, groaping our way through the dark in hopes of finding Minetown.
Episode 3
- As our first character meet an unfortunate end, a shocking revelation is revealed that sending our poor host into a mental breakdown.
Episode 4 (goes public at midnight)
- We learn that Barbarians can fight well in the dark as multiple events conspire to drive us crazy.
If you enjoy my videos, please, leave comments, and subscribe to my channel. Furthermore, I'll offer shoutouts and credits to anyone who'd be up for creating titlecards for my series, and perhaps offer them an exclusive chance to choose a game to me livestream or do a LPs. Given requests, I'm also going to record a special video at some point that goes more into detail on how to play NetHack specifically.
So, I've been feeling the urge on doing another livestream this weekend, and was debating what game to stream. I've had an urge to play Dwarf Fortress as of late, which also allows for good interaction with those in the community due to nickname and assigning roles; and perhaps keep playing the same fort over a series of streams. The tentative time of this livestream would be 12-6PM EST, on my Twitch channel. I'd be up for fielding questions from the community, talking about gaming and tech in general, basically the insanity of April Fools, only a more reasonable block of time.
I think I got all the kinks out of my recording setup, so I should be more reasonably be able to edit and post the stream (for those who missed the previous post, my recording of the 24 hour livestream was corrupted due to stupidity and user error). I'd be interested in suggests of what biome to play in, as well as names for the initial dwarves (6 remaining, excluding the one I claim for myself).
In other news, I've continued my Let's Play of NetHack, with Part 2 posting on Wednesday. Part 3 was supposed to go live on Friday, but got released a day early by mistake.
As promised, I've started a Let's Play series going into the details of NetHack as I once again quest for the Amulet of Yender through the Mines of Menace. For those who've never ascended, or just wish to understand the game better, I'm going into detail on much of the mechanics behind the game such as wand identification, price IDing, curse testing, and so forth. Hopefully with my guidance, you too can one day ascend into a demi-god. I'll try and update the series Monday, Wednesdays and Fridays, but I may miss a day if life gets too hectic.
All my content, unless otherwise noted, is licensed under the Creative Commons ShareLike-Attribution license, and encoding in a WebM container with the VP8 and Ogg Vorbis codecs. I'll be uploading the raw WebM files once I have a suitable host to do so.
Introduction to NetHack
- In which the interface, goals of the game, and dungeon layout are explained.
Let's Play Nethack #1
- In which we start off as a Dwarvish Valkerie, get our first artifact, and run into trouble.
So, given the success of the livestream, I'm discussing with the staff doing future livestreams to sit back, discuss things with the community and such. We're thinking about once a month, and perhaps doing a multiplayer game that everyone can join in on (I'm thiking either Civilization or Europa Univeralis IV).
However, given my own experiences doing it, I'm going to try my hand at doing a Let's Play. Given its where we started, I thought it would be most appropriate to start with a series based on NetHack, and am working on recording an introduction video which will go over the basis of the game, and help prevent the series from being too repeative (I'll only upload runs which have a decent chance of ascending; generally ones that make it to Mine's End and finish Sokoban, maybe a bit further).
I'll post the intro video and my first episode hopefully this week. I'll probably upload them to YouTube and provide raw files. I'm encoding my raw videos in VP8+Ogg Vorbis in a WebM container, and will be licensing my content under Creative Commons Attribution-ShareAlike 4.0 International. Once I figure out a place to upload large WebM files, I'll also provide the edited source files for anyone who is YouTube allergic. I'll probably enable monetization on my account and let YouTube place ads in my video, to hopefully get a little money out of it. Beside NetHack, I may feature other games on Linux and open source gaming in general.
NOTE: This is a personal project and not related to SN directly. Unless something is on the main page, assume this is non-SN related, and I'm just writing about it here (since this is the closest thing I have to a blog)
Finally got the first set of code committed to rehash to allow use of IPv6 properly (dev.sn.org has had a AAAA record for ages, but IPv6 address handling has been hosed since day 1, that's why we don't publish one for production). Just need to add some UI tags so admins can see if a ipid/subid is IPv4 or IPv6, and we're more or less set here.
Squished an annoying bug in rehash that prevented formkeys working due to changes in how mod_perl works, I dunno worse, the abuse of the MP1 API, or the hack I had to code to emulate the old behavior; here's the comment I left about it:
# UNBELIEVE HACKINESS AHEAD
#
# Ok, under MP1, it was possible to use param as a "semi-persistant" scratchpad
# that is, to save a new element in the hashref, and get it back by future calls
#
# This worked because the older APR methods allowed you to store into the HASREF.
# even though this behavior was wrong, and bad according to MP documentation. MP2
# now removed the STORE method from the APR tables so any attempt to write to them
# goes BANG.
#
# Since we can't do that now, we're going to have to fake it. On our first call to
# getCurrentForm, we'll copy the param tables to a hashref, then shove it into the
# apache2 pnotes, and then retrieve it on demand.
#
# This is a fucking hack, but I can't think of a better way than to refactor a TON of
# perl, and perl is not a language that makes it easy to refactor ...