Subscribe via RSS

Atari 2600 Jr – Recapping + Controllers + Composite

Another one of these little units came across my workbench. This time it was a full set with two joysticks and a lot of games... including a boxed version of Frogger! I'd played with one of these before in my previous-previous apartment, so it must be nearly 4 years ago that I met my first Atari. This one wasn't as clean-and-tidy as the previous version, but it still worked nicely.


DSC00137 DSC00138 DSC00141

The first task was to upgrade the unit to composite output, so I jumped over to my previous post on the topic. I purchased all the components needed from Jaycar and, just before I was about to solder to the pins on the IC, realised that the actual mod instructions showed you where to solder. Not to the pins of the IC, but to the legs of the surrounding resistors.... the diagram is even colour-coded. I therefore also didn't have to scratch back a ground pad either!


In no time, the composite signal was being sent out and my TV Tuner card was picking it up nicely. Whilst I was performing the mod, I noticed that the surrounding electrolytic capacitors weren't looking the cleanest, so I replaced those too. After another trip to Jaycar, purchasing 4x 4.7uf and 1x 2200uf (unfortunately they didn't stock double-ended!) capacitors, I went about removing the old ones and soldering in the new ones. Solder wick really works well here to clean the holes in the PCB prior installing the new capacitors. The positive pins are also nicely marked on the PCB.

DSC00143 DSC00145 DSC00146


DSC00151 DSC00159 DSC00160


With everything replaced, there was no noticeable change in video quality or system stability, but neither were a problem to start with. This was more for longevity! I slapped in the multi-cart and tried Pitfall out. The Quickshot controller worked OK, but felt very sticky and the buttons weren't responding to each keypress... what to do? Pull it apart.

The board was not clean... so I grabbed some isopropyl wipes and gave it a good once-over. I also re-soldered the main A button wire as it had previously been compressed by the case and didn't look like it'd hold out much longer. With the unit back together, I could now jump on-command with the button on the base, but the trigger button up top wasn't overly responsive. The stick itself has three screws that hold it together, so I popped them out to have a look.

DSC00087 DSC00092 DSC00094

Turns out the top button had been mashed to within an inch of its life and the previous players had actually punched a hole in the PCB, removing the trace that the button was meant to make contact with.

A little bit of solder was added, which caused a height increase of the pad. I was slightly concerned that this would mean the button could mis-fire, but the spring prevented that from occurring... instead it just meant the button didn't have to travel as far to make contact. I could now jump through Pitfall reliably! Mario Bros was also now a lot more fun!


I suppose the final step now is to find a new ball for the top of this chewed-on stick!

Filed under: Retro No Comments

Sega Mega Drive – Composite + Region-Free

On a total tagent from recent Amiga stuff, I found this in a box whilst I was moving house. I'd totally forgotten that I'd picked it up from a flea market prior to the Christmas Trip overseas.


DSC00102 DSC00105 DSC00107

I grew up a Nintendo-kiddie with Super Mario Bros and Duck Hunt, so the likes of California Games (oops, that's master-system-vintage) and Sonic were a weird adventure whenever I went to friend's houses. This unit arrived slightly scratched-up, but in perfect working condition. It came with a power pack and RF switch, but I wanted Composite output... so I started googlin' for hacks. Then I looked at the back of the machine and realised it had an 8-pin DIN for A/V output. A quick search found off-the-shelf cables, as I didn't have a properly degree'd DIN plug available that'd fit the socket. Your standard 8-pin DIN has the top two outer pins at a different degree and therefore wont fit.

Instead I had to make one from a 5-pin DIN as it turns out the pinout of the A/V Output port has all the pins I'll need at 3 o'clock, 6 o'clock and 9'oclock!

DSC00114 DSC00112 DSC00120

I purchased a 5-pin DIN port from Jaycar and hacked a standard stereo composite RCA video cable in half. From there, I joined ground together and soldered that to pin 3 on the 5-pin DIN. I then twisted L+R together, as this unit produced MONO sound and soldered that to the left-most pin, when looking at the back of the plug. Finally, the central wire from the yellow video plug was soldered to the right-most pin.

From here, the unit worked perfectly! Of course, to test I only had one game...


To make this fit, I had to actually gently file the cartridge slot.


Turns out the japanese-release games are square, whereas the Australian (and probably elsewhere) release carts have 2 rounded corners. After making it fit, the game just worked... although it might play slightly faster on a 60hz clock!

Filed under: Retro No Comments

Zorro II Cards On The Amiga 500

The next build for my Amiga 500 was a Zorro II Card Slot Adapter. This unit uses the expansion slot on the left-hand side of the Amiga (just like the external IDE adapter) and provides a vertical slot to plug your Zorro II card into. It also has a standard floppy power plug and circuitry to choose this supply if provided, otherwise use power from the Amiga itself.


The collation of parts was pretty straight-forward, and I only made one mistake! The relays I'd purchased were much too large for the PCB holes.


DSC00021 DSC00024 DSC00028

So I used a relay I had on hand. It didn't work once soldered and tested... it was rated for a 24-volt input! So I went ahead and re-ordered the correct part.


Next up, I used a spare molex power supply plug to make powering the card a little easier...

DSC00036 DSC00037 DSC00041

Final notes when building... after you've soldered nearly 200 joints, go over them all with a magnifying glass...


It's really easy to miss a soldered join when the plates on the PCB are so shiny... also when the lighting above is LED and the reflections of the melted solder look more 3D than they really are! Fully inspect each joint, otherwise you'll get grey screens, white screens and even half-booting!

The shot above shows one of two pins that I failed to correctly solder, and note that it shows it after I found it and slightly bent the pin to test that it wasn't actually making contact! The actual hardware symptom was that, whilst booting, the drives would be found, Workbench would start booting and then it'd pause at the 'wait timeout' in the StartupII boot script. I assume there's some interrupt or IO signal that's meant to come over that pin... amazing how random things are when signals aren't correct.

DSC00011 DSC00013 DSC00015

Finally, the board was assembled and ready to test!

MegaMicro Technologies: SCRAM 2000

SCRAM 2000 is a SCSI for A2000, A3000, A4000. And now also the Amiga 500! This board features a board-mounted 3.5" SCSI hard drive, an external DB-25 SCSI port and the ability to host a total of 8mb RAM.


The card came without a SCSI drive, so I grabbed a 40mb Seagate SCSI (from Apple!) from my box'o'crap, set the ID to 0 and mounted it to the card. Note that the spacing is very tight for the data cable, so make sure the wires are leading away from the card when you plug them in...


After a lot of toying around, the disk was mounted, formatting and even auto-booting on my KS1.3 Amiga! I used a boot disk instead for the KS1.2 Amiga. Note that the install disk can be used as both. Grab it from here and use ScrapPrep to get your drive in order. Then you just need to copy over the Workbench disks and make sure the boot priority is the highest amongst all drives connected! Check out this post for more details on bootable drives (disregard that it's about IDE drives!)

DSC00129 DSC00133 DSC00134

A fun note on this card... it would've actually come in kit-form to the original purchaser back in the late 80s. When that user assembled it, they put the three status LEDs in backwards. I was wondering, whilst debugging things and trying to work out why my machine wouldn't load, why the LEDs just didn't light whatsoever. I assumed it was because I was using a KS1.2 machine and there was no config, etc.... but it turns out that the LEDs were actually in wrong. I fixed this and also rigged up a LED to use on the activity LED headers... a much quicker way to test things like this!


Next trick was to upgrade the RAM on-board. The board uses ZIPs and this was my first time encountering them. Just think of an IC standing on one side, with all pins out the bottom edge. They're interleaved and you must make sure that they line up correctly before inserting them!


DSC00112 DSC00120 DSC00123


As is my usual rush.... I happened to put the last chip in backwards. With the card inserted, the machine wouldn't respond at all... no power light, nothing! I had only ordered 16 chips, so I was very fortunate that everything 'just-worked' when I swapped it around.


Finally, you'll note that the external SCSI port was nicely corroded on the board I recieved. A quick trip to Jaycar saw the purchase of a replacement part and, after a little destruction, the new port was soldered in place.

DSC00107 DSC00108 DSC00110

After this, I had a perfectly bootable SCSI A500 system with 8mb of Fast RAM!

GVP HC+8 Series II, Revision 2 Zorro II SCSI Card

This card happens to be very similar to the SCRAM above. It also hosts 8MB of RAM and a SCSI controller with an external SCSI port. The main difference here is that drive is mounted the opposite way around and SIMM RAM is used.


This first thing I did was get the RAM situation sorted out. The card came with 2 SIMMs installed and the auction quoted that this was 2MB of RAM. I threw the card in the system and the top line of WorkBench 1.3 indicated just under 3MB as the A500 has 512kb internal and the was also a 512kb expansion card in the trapdoor slot. With this, I tried to do things and kept getting the crash below...


I thought I'd bought a faulty card until I pulled the two SIMMs out and realised that they were only 256kb each! The Amiga was trying to get to the other 1.5mb of RAM and there was physically nothing installed... no wonder it crashed. I quickly populated this with 8 1MB RAM SIMMs and the machine soaked them all up, testing them out perfectly.


This one also had a corroded external SCSI port, so I went ahead and replaced it as well.

DSC00166 DSC00246 DSC00248

Finally, a few shots to show what SysInfo has to say about the card.

DSC00386 DSC00387 DSC00388

Installing an setting up the drive was just as simple as the SCRAM setup. the GVP software works beautifully and you can grab the setup disk here, but but here it is as an ADF.


Just make sure that the HDD is not grounding on the ground-plate of the power regulator!

SupraDrive 2000 WordSync

This card is still on its way from the US of A. As mentioned on the Amiga Hardware Database, this card uses two 8-bit transfer buffers instead of DMA. The card is noticably more simple with regards to chip count and board complexity. It's also half-size, not taking the full length of an A2000 case... so I might even try and shoe-horn it into a nice side-car style box.

I'll update more when it has arrived.

Filed under: C64/Amiga No Comments

Capturing the output of an Amiga

You might have more luck than me, but I've had a little bit of trouble both outputting a clean composite signal from an Amiga and then capturing it using a PC. Not knowing if my first capture device was at fault, I upgraded an A520 RF modulator to support S-Video, but this still didn't work. The video capture device in question was a Japanese Area Powers Entry Model V.2, bought in a hurry during the last trip whilst testing Super Famicoms... Haha... the name is hugely appropriate!


It didn't work back in Japan when testing the Famicoms, and it didn't work now with the Amiga 500 + A520. I went googling and found all sorts of posts indicating driver installation caveats for Windows 10, but none of this worked. I then tested it with my PlayStation 2 and got a pretty crisp picture!... It was then obvious that this unit would not work with the output of the Amiga.

AverMedia H339 Mini

This cute/tiny PCI-Express card is very barebones. You can tell it's OEM and came from a machine of one of the big brands. Very hard to find drivers as well! I ended up pulling apart a Dell Driver from here. Here's the actual setup file you'll need for Windows 7,8,10 64-bit.


DSC00004 DSC00006 DSC00008

Anyway, with this physically installed and the device happily showing in Device Manager, I attempted to use the unit under VLC. Make sure that you choose the correct input (via the advanced button via the device properties) when you're setting up the capture...


vlc-2 vlc-3 vlc-4

And that you have PAL chosen instead of NTSC.... and then...


Ahh! Finally, no more switching monitors and no more photos of a computer monitor! Finally just easy PNG screenshots. Note that you might notice a slight delay/lag in the capture video on your PC with VLC. To fix this, hit show more options in the capture dialog and set the caching to 0ms.
You can also set ":live-caching=0" on VLC command line.

Filed under: C64/Amiga No Comments

Formatting an IDE Drive for use in an Amiga 500

You may have previously seen the IDE Adapters that I'd built for my Amiga 500 over here (internal) and here (external). Whilst they worked very well with FAT32 drives attached, I had no end of trouble trying to work out how to partition, format and mount as a native Amiga disk. For everything below, you'll want to use this bootdisk.

The FastFileSystem

Digging through the blog, I'd remembered that I'd done a bit of this back in the day when mucking around with the Amiga 1200. I had used a CF card internally on the A1200 and installed WB3.9 succesfully on a SmartFileSystem Partition. Unfortunately, we can't use that on the A500, so we'll be basing our partitions on FFS, or FastFileSystem. This comes with Workbench 2.0+, but you'll need the file sitting in your L folder for anything lower.

Connecting a drive

Since we're talking IDE, we'll need an adapter. As per my previous mentions, you can find how to build an internal one here and an external one here. Both work great, but follow the posts there for the caveats and tricks when connecting and powering drives.

DSC00238 DSC00244 DSC04120

Note that this can also apply to SCSI drives. Just disregard the steps to add the driver to the disk and/or HDToolBox in the next section.


We'll use HDToolBox for this. It's on the bootdisk I've provided and it's already configured to use the ide.device driver installed in the devs folder. If you're rolling your own, then you'll need to copy the driver over to your floppy and edit the icon for HDToolBox to specify a SCSI_DEVICE_NAME as such...

DSC00303 DSC00305 DSC00307

This is an important step and you'll need a bit of patience... HDToolBox will sit for around 5 minutes interrogating LUNs with no disks, waiting for a response. If you've only connected one drive as master or slave, then the opposite LUN will pause. Below, I've only connected a master, so I saw the message "Checking ide.device address 0 unit 1..." (IDE slave) for a looooong time... but all came good!

DSC00308 DSC00309 DSC00310

From here, you'll need to change the drive type and read the parameters from the drive. Click Change Drive Type and then choose to add a new drive definition. Hit the Read from drive button on the right and cross your fingers.

DSC00311 DSC00312 DSC00313

The shot below shows where HDToolBox has detected by Disk Smith 32mb CF Card. Unfortunately it then failed when trying to write the actual partition table to the disk.

DSC00314 DSC00315 DSC00316

Partition sizing is important, so make sure you pay careful attention to all parameters. The Amiga 500 format application will error out if you try to make a partition too large. Unless you have an upgraded system with more RAM than the standard, don't try and partition a drive that is too big! For example, my 128mb (yes, megabyte!) CF card with one partition formats fine, but if you try a 2gig or 4gig card, you'll have trouble with the auto-detected settings. Here's an idea of the parameters that I've tried...


Size 4096mb 2048mb 128mb 32mb
brand SanDisk WINTEC Dick Smith
ext.power +5v No
cyl 3970 3970 12000 1002 496
heads 16 4 8 8 4
blocks per track 63 256 32 32 32
blocks per cyl 1008 1008 256 256 128
Part.Size (~mb) 1990 950 650 487 196 97 976 487 196 97 749 128 ??
cyl.start 2 2 2 2 2 2 2 2 2 2 2 2 2
cyl.end 3968 1985 1323 992 400 200 1985 992 400 200 6000 1001 495

I read in one of the IDE adapter's instructions that you need to have a low cylinder count, so that's why I started with higher surfaces/heads... but instead it seems that a higher cylinder count works better? There's also talk of making sure that your partition sizes match boundaries of the chips inside your CF cards... but I'm not going to pull one open. All I can recommend is that you detect the settings via HDToolBox and then manipulate them to have a higher cylinder count so that surfaces/heads and blocks are lower.

Anyway, where was I? Creating partitions! After you've adjusted the drive parameters, you can click Partition Drive and set up the partitions. It defaults to two, halving the drive. Note the names and sizes, as you'll need them for the mountlist in the future. I changed the layout by deleting the second partition and stretching the first to the end.

DSC00320 DSC00321 DSC00322

Again, write down those start and end cylinder offsets! You can now hit ok-ok-ok-finish and save all settings. The Amiga will probably reboot.


So, remember how I told you to remember those parameters above? You wrote them all down, didn't you? If you didn't, please open up HDToolBox again and record the numbers from the Drive Type screen and the Advanced area in the Partitioning screen. Once you've noted it all down, you're ready to edit On the bootdisk provided, this is located in the devs folder. If you've booted this disk, then just open Shell and type ed devs/ and press enter.


Once you're in here, you just need to manipulate the fields to match your partition. Starting on the very first line, make sure the name is correct. Change DH0 to whatever you've called yours. Note, there's a bunch of example partition mappings in this file. If you want to use one of the below versions, you can press CTRL-B to delete lines from the text file. For example, you could start at the very top row, hit CTRL-B 17+ times and wipe the top example. Just for fun, here's a reproduction with comments of what you need to change.

FileSystem   = L:FastFileSystem    ; If you want FAT32, then scroll down
Device = ide.device

Unit = 0                   ; 0 = MASTER, 1 = SLAVE

Flags = 0

Surfaces = 4               ; From HDToolBox (HEADS)
BlocksPerTrack = 63        ; From HDToolBox (Blocks Per Track)

Reserved = 2
Interleave = 0

                           ; For the next two values, you'll need
                           ;    to have opened the advanced area when
                           ;    creating partitions in HDToolBox
LowCyl = 2                 ; Start Cyl from Advanced Options
HighCyl = 256              ; End Cyl from Advanced Options
Buffers = 30
GlobVec = -1
BufMemType = 1
DosType = 0x444F5301   ; FFS Dos Type, leave as-is.
Mount = 1

Apologies that the photo above doesn't match the final file that is on the bootdisk! I made the final file match the rest of the examples here as much as possible. Either way, just make sure you get the details in correctly and that there's no other duplicate partition name/definition in

Mounting and Formatting

Before you can do anything with the drive, you'll need to make it available to the system. The low-level tools, as per HDToolBox above, can use the drivers to find and interrogate drives, but they don't make them available to the system directly. To do this, we'll need to use the mount command, pointing it to the mountlist we've created above. Type in the following from a Shell.

mount DH0: from devs/

Make sure that you've replaced DH0 with your partition name and leave the colon at the end. The from operator tells mount not to use the standard mountlist and instead use the file that we specify afterwards. Hit enter and you should be put back to the command prompt without any messages or warnings. The only thing that might happen is that you get a drive visible on the workbench... if this happens, then somehow the partition you've mapped is already formatted and ready-to-go. If this is a surprise, then don't try and open it... anything could happen.

From here we'll want to format the drive. The format command is used here with the DRIVE and NAME parameters. We then specify the disk format at the end.

format DRIVE dh0: NAME CFCARD0 ffs

Above, you can see the partition name is DH0:. As per usual, replace this with your partition name, leaving the colon at the end. After NAME you can type a friendly name for your partition. This is the name that'll show under the icon on your workbench. It's also the name that you can use in Shell.


Do you like the name I gave it? You'll see it's legit as it's in the screenshots below when copying files. I'd gotten pretty desperate after a miriad of partition size permutations, trying to get a format session not to fail. Finally, as per above, one worked... but not before I started typing stupid names for the formatted partition name!

Note that you can add the term quick to the end if you just want to quick format, but I recommend to do a full format the first time!


With the drive totally prepared, it should be visible on the workbench with a single Trashcan inside of it. From here, we'll want to transfer the OS onto it, so go ahead and purchase the Floppy & Hard Disk Image Pack from Amiga Forever. In the kit you'll have two ADF images: one for Workbench 1.3 and another is the Extras 1.3 disk. You'll need to insert these one at a time and copy the entire contents of each onto your new partition.

A quick note on copying disks on the A500: Regardless if you're using real floppies or a Gotek, floppy-switcheroo is the name of the game when trying to get Workbench copied over onto the IDE HDD. Firstly, understand that the copy command is an executable that lives in the c folder of your bootdisk. You can easily copy files around when the bootdisk is inserted. Issues start to arise when you switch disks and try to call copy or any other executables that 'exist' on the bootdisk. Workbench will ask you to insert the bootdisk first to find the executable and then actually run the requested command with its parameters.

This is all fine and well, until you try the following command:

copy DF0: DH0: ALL

It looks simple enough... I've swapped the Workbench 1.3 disk in and asked it to copy. Of course, when it started to execute, it asked me for the disk which contains the actual copy executable:


Yeah, I know, it says A590Setup... a good hint as to what disk I created this IDE Boot Disk off. Anyway, the point is that that was my boot disk and that's where copy lived. Once you switch the disk in, it'll start to execute copy... and copy from DF0 to DH0. Sounds good? It wasn't! As I wanted Workbench 1.3 to copy over, not my boot disk! Because I had DF0: in the copy command, and not workbench1.3:, it's just copying from the drive after swapping the bootdisk in and hasn't checked the name!

To solve this, we have two options. If you're using my bootdisk, then I've already solved it for you with the first option: make the copy program resident. In startup-sequence, I've called the resident command with copy as an argument, making Workbench copy the copy executable to system RAM (not the RAM: disk!) and persist it there during floppy disk changes. This means that it's always available whenever you need to call it.

The second option is shown below. Copy copy to RAM: (the actual RAM disk) and call it from there via RAM:copy.


... copy ... copy ... copy ...


Note that the Workbench 1.3 floppy has a space in its name and that the copy command can't handle this without special formatting. I guessed and tried to reference it as workbench1.3: without the space and somehow this worked fine? I then tried the same method with the Extras 1.3 disk, but that failed entirely. Due to not knowing how to reference it, I used DF0: instead and hence wound up with the situation above where I copied over the wrong disk. After a quick bit of googlin' now, it seems that you simply have to double-quote things:

copy "extras 1.3:" dh0: all

I'll try that at a later date.

Bootable disk

The bootdisk mentioned throughout this article can be converted to an actual bootdisk. I suppose I should've called it a setup disk at first, but it is actually still a standalone bootdisk. Or something. Anyway, it'll now be a bootstrapdisk, mapping the relevant OS drives and folders to the HDD and then kicking WB off from there. The startup-sequence files to do this are all ready to go. Open a shell and switch to the s folder. From there, ed startup-sequence.hd.

; Startup sequence for Hard Disk users...checks for hard disk, then
; transfers control if it is present. (The script assumes DH0:)
; TO USE: copy your normal startup-sequence files (Startup-Sequence,
; and StartupII to the S: directory of your hard disk.
; Then rename your normal Startup-Sequence file
; as Startup-Sequence.f in the S: directory of the floppy, just in case.
; Now replace the Startup-Sequence file on the floppy with this file.
Setpatch >NIL:

;The line below needs to be edited to match your partition name
;You also then need to make sure that has the correct
; parameters for your partition!
mount IDH0: from devs/
assign >NIL: IDH0: exists

; hard disk is present
assign sys: IDH0:
assign c: SYS:c
assign L: SYS:l
assign FONTS: SYS:fonts
assign S: SYS:s
assign DEVS: SYS:devs
assign LIBS: SYS:libs
makedir ram:tr
assign t: ram:tr
execute s:Startup-Sequence
execute df0:s/Startup-Sequence.f

Simply make sure that IDH0 in all three places is changed to whatever your HDD partition name is and then rename the files:

rename startup-sequence startup-sequence.f
rename startup-sequence.hd startup-sequence

From here... reboot!

Filed under: C64/Amiga No Comments

Amiga A520 Modulator – S-Video Out

Whilst trying to capture the Amiga via a USB Capture device, I ran into problems. I couldn't get anything other than a black screen and considered the fact that the A520 modulator was producing a bad signal. The USB Capture device worked fine on Windows 10 with the playstation, so I knew that it worked.

I'd been using an A520 on the Amiga for a while as my secondary PC monitor has Composite Video in and it was easy to switch back and forth. I also wanted colour, so I chose the A520 over the A500's standard mono video output.


DSC00255 DSC00257 DSC00260

The USB capture device also accepted S-Video, so I thought I'd try and 'upgrade' the A520 to S-Video, cleaning the signal in the process, in an attempt to capture the video on my desktop. Another advantage would be that I'd stop having to switch video inputs all the time, which would also help standard windows usage as half the time a window would open on the screen that was currently displaying the Amiga.

So, what to do? Google! Zenithia's blog was a first hit with this post where he uses another post's instructions to modify an A520. The other post is S-Video from the A520 at Dave's Amiga Hardware Page. Zenithia seemingly does the circuit-board conversion correctly but, at the end, he describes how Dave leaves out the information on adapting the two Y and C signals from the modified A520 to an S-Video plug. Instead, Zenithia uses a capacitor to fake the sync... let's sort all this out and build the cable correctly!

Required Components

One thing that Dave's page doesn't have is an obvious list of required components... so... here's your shopping list:

	22uf electrolytic - 16v (x3)
	100uf electrolytic - 16v 
	220uf electrolytic - 16v 
	56pf ceramic
	0.1uf (100n) ceramic

	- 180 ohm
	- 220 ohm
	- 270 ohm
	- 330 ohm
	- 1 Kohm
	- 10 Kohm
	- 470 Kohm
	- 1 Mohm
	- 2.2 Mohm

I've included the four stock electrolytics on the board (not mentioned by Dave) as purchases also. The 100uf on my A520 pretty much fell off... there's no real chance that capacitors from 1989 are any good anymore!

Modifying an A520

First up, grab your A520 and prize it open. It's held together with plastic pins that insert into sleeves on the opposite half-shell. Grab a flat-head screwdriver and gently separate the case at each corner. The case will come apart with minimal force, so never apply too much pressure! Finally remove the two screws that hold down the RGB plug.



Once apart, turn on your soldering iron. There's 19 steps to follow from the instructions at Dave's page. Make sure that any wiring that you use to bridge pins or points are insulated! Also try and place any bridging capacitors or resistors away from the soldered pins of other components so they aren't pierced when the case it put back together!

Dave's page has three images at the end, showing the original circuit, the circuit after modifications and finally the deltas between both. You'll note that the modified circuit shows how the C and Y are now available from the two RCA sockets on the modulator.


The modifications are pretty straightforward. One tricky part was the installation of a resistor in R18. My board had the holes drilled, but no solder pads. So instead I just piggy-backed the resistor under the board, soldering to points along the traces. If you look really closely below, you'll see that the holes have no pads, directly below the hacked on resistor.


Another point is to be super-careful when cutting traces! Too often my knife would go flying to towards another trace trying to do other damage.

DSC00270 DSC00273 DSC00277

Finally, the hack inside the modulator is pretty tricky. Make sure you have a sharp pair of snips when you're cutting the white plastic housing away. Once done, solder a pin through the RCA plug rear lead and push it down towards the header. From there, it'll be held perfectly in place to solder the final connection.

Wiring up the cables

So, you now have both Chroma (Colour) and Luma (Intensity) available on your modulator. The previous Audio-In RCA plug is Intensity, with Video Out being Chroma. From here, you need to wire up an S-Video Cable appropriately. I grabbed an S-Video cable I had spare along with a component cable that I have absolutely no use for.

DSC00288 DSC00290 DSC00292

After chopping them both in half, I bared the ends of both and wired everything together. The pinout of my S-Video cable was as follows:

	1	gnd		black
	2	gnd		brown
	3	intensity	red
	4	chroma		orange

With that, I just made sure the two channels were paired and that the grounds were attached to the shields of each RCA lead. The other two wires were the signals and, officially, I could wire them either-which-way as I can swap the plugs at the Amiga end!

Does it even work?

It sure does, but the USB Capture device still doesn't pick up the signal! The Amiga must output some very weird frequencies or incorrect signal voltages. Regardless, my secondary monitor also takes S-Video, so I plugged it in...

DSC00294 DSC00298 DSC00300

Ahh... crisper... I mean, it's not perfect, but it's much clearer! Disregard the last shot... one of my A500s is throwing those vertical lines and they're on the todo list to fix. As for getting the picture USB-capture'd, I suppose I could start toying with the RGB port to get a better signal, but I have no idea if this USB Capture device will ever support it... instead I've gone and sourced an internal AverMedia PCI-e Card. Will update later when that arrives.

Filed under: C64/Amiga No Comments

Amiga 500 – External IDE Port

After building an internal IDE port for the Amiga 500, it was time to try an external port that connects to the expansion slot. This happened to be another lesson in taking-your-time-and-doing-proper-research. As I was unpacking the bags for this unit, I realised I'd bought SMD resistors and capacitors that were, literally, microscopic. I couldn't even see them in the tape-strips that they were sent on.


I went back to the bill of materials as linked to on the project page and realised that there was a code after the SMD items: 0805. Turns out there's an industry standard sizing and I had no idea. I therefore put in a new order to DigiKey and got these correct, got the relays correct (for another project) and then got a few other handy bits. Here's a photo of the size comparison, only take-able once I'd received the second order. Actually, I must admit that DigiKey's free shipping with any order over 50 bucks is super fast!

Now that I had the right items, I whipped out the boards that I'd had printed and started placing the chips.


The replacement items arrived and I started assembling the boards. It wasn't until I tried to actually solder in the 74HC04 inverter that I realised I'd also ordered the wrong part. SMD chips come in a plethora of sizings, just like the resistor component sizing above and I'd purchased SOP14s instead of SOIC14s. I decided to MacGyver it and make them fit... but it caused me high levels of stress as things didn't go smoothly during the testing phase.

DSC00174 DSC00177 DSC00180

After ruining around 4 boards, I managed to finally solder down the 4 ICs. This was my first attempt at SMD soldering and I must say that I'm not a fan. Firstly, I had the wrong-sized solder, but I fixed that up by purchasing the smallest available: 0.7mm. With this new solder, it was much easier to not bridge legs on the ICs, but the tip on my soldering iron was also too large. I've since ordered smaller 'blade' style tips.

DSC00182 DSC00185 DSC00194

You can see above where I managed to solder the ill-fitting inverter upside down... I then tried to remove it and trashed the traces on the board. So damn fiddly... And then the resistors and capacitors... the best method I found was to tin one pad, use fine tweezers to place the component on the tinned pad and then melt it in place... from there, you can just solder up the other side. I then tested all continuity to make sure contact was correctly made.


The edge connector wasn't a simple solder-in-position... I had options. I could solder in a right-angled header and then build a bridging board, as per the original author's instructions. Or I could use a single vertical pin header and bend the bottom row of pins of the edge connector and solder it all together. This latter option lead to a much stronger build, so I went with it.

DSC00203 DSC00205 DSC00209


DSC00214 DSC00222 DSC00224

Finally, I just needed the IDE pin-header in place!


After around 10 hours of debugging, I managed to get this thing to work. Firstly, one or two legs on the inverter IC weren't cleanly making contact, and then I realised I'd put the LED on the wrong way around. After a lot of further tracing with a multimeter, it turns out that my master HDD was on cable-select when it needed to be forced. I also seemed to require a second HDD as slave to get HDToolBox to read the drives correctly.

DSC00241 DSC00244 DSC00245

But it works! I'll write up a post very shortly on how to work with these drives. For now, you can use the boot disks from my other internal IDE port post.

Filed under: C64/Amiga No Comments

PCMCIA Cards on Desktop PCs

The PCMCIA (or PC Card) standard was built for portable machines which involve smaller form-factors than desktop PCs. Similar to ISA and PCI cards in desktop PCs, the cards offered expansion capabilities for portable machines including storage and communications. The most common cards are either ethernet, modem or wireless. Storage became an option with both flash memory cards, IDE interface cards and SCSI cards.

Desktop machines can be fitted out with PCMCIA card interfaces. Below I'll cover ISA to PCMCIA, PCI to PCMCIA and USB to PCMCIA, noting the limitations of each. I've had an IBM External CD-ROM 0991-011 in the collection for a while and I'd always wanted to check out its capabilities noting that it has a sound-card built-in!

The desktop machine that'll be running the tests is a PIII-500 with 512mb RAM. It's got enough storage internally to support multiple versions of Windows, so we can test compatibility across the board. I've actually taken out ethernet and sound cards, and disabled unnecessary onboard peripherals, to prevent hardware conflicts with any installed PCMCIA bridge.


I've tested the following PCMCIA Cards during this article. I wanted to make sure I had a card from each category, since I'd expected that certain adapters wouldn't handle all types of cards.

Device Description Driver
SanDisk 1.2gb Memory Card Flash Storage Uses the standard Mass Storage Driver
Belkin 11g Wireless Card Wireless Network Download
IBM External CD-ROM + Sound Card + Gameport External IDE Interface + Extra Download.EXE

I'm pretty much in-love with the IBM External CD. It's got the beautiful 'Aptiva'-esque styling and a bloody sound-card built-in!


DSC00137 DSC00140 DSC00143

Yup, that's the amazing all-inclusive IBM External CD-ROM, but we'll discuss its capabilities at a later date. Following are the two boring (aka. just-work!) cards...


Super boring. They didn't even try to use a differing palette!

PCMCIA Interfaces

To slap a PCMCIA card into a desktop machine, you'll need some kind of adapter. The following are the units that have been tested throughout this article.

Device Connection
IO-Data CardDock EX/DV ISA
Ricoh PCI
Ricoh PCI
Condor PCI Super Card PCI
AirFree USB

First up, here's the Condor PCI Super Card. It's huge and seems to have been custom built for a specific chassis? It might actually have been for a Kodak photo kiosk or somesuch where there are card slots on the front of the case. Based on it's length, I could see this card providing ports to the front.


Unfortunately, it wasn't detected by any part of the system!

DSC00095 DSC00098 DSC00099

The other Ricoh 485-based and 475II-based cards...

DSC00105 DSC00107 DSC00111

Hagiwara Sys-Com Airfree


DSC00116 DSC00117 DSC01195

And I-O DATA's CardDock2-EX/DV...


DSC00127 DSC00131 DSC00132

The results are as follows. The basic finding have been that the newer PCI/USB interfaces only support specific classes of PCMCIA devices. Those being Mass Storage and Network. As soon as you bring in a card that needs interrupts or other low I/O ranges then you're out of luck. On the flip-side, newer versions of windows don't support the older ISA hardware, meaning that the ISA PCMCIA bridge that I had just wont work on anything newer than Millenium.

Bridge Device Operating System Result
IO-Data CardDock EX/DV All Windows 98 SE Fully operational.
IO-Data CardDock EX/DV Any Windows XP Card cannot be installed. Drivers wont recognise hardware and Add/Remove Hardware doesn't auto-detect it.
Ricoh 485/475II Sandisk Flash Storage Windows 98 SE Works, but cannot be easily re-partitioned. Needed to use BOOTICE. (see information below)
Ricoh 485/475II Belkin 11g Wireless Card Windows 98 SE Worked perfectly. Used Odyssey Client 4.52 for WPA2 access.
Ricoh 485/475II IBM External CDROM Any Failed with resource issues. Hardware could not start.
Condor Super PCI Any Any Entire card couldn't be recognised. Even the BIOS didn't list it. Going in the bin... but it's so cool-looking!
Hagiwara Sys-com Airfree Flash Storage Windows 98 SE Works fine. A bit tricky to install on the US English version of Windows 98 SE as the installer just drops out. Works perfectly on Windows 98 SE JP.
Hagiwara Sys-com Airfree Belkin 11g Wireless Windows XP Works fine, as above with installation.
Hagiwara Sys-com Airfree IBM External CDROM Any As above with the PCI cards, it just doesn't work at all thanks to resource limitations.

Partitioning Removable Media In Windows XP Or Lower

I'd somehow managed to trash the partition table on the SanDisk Flash Memory during the testing above. It hadn't caused the resource errors above (I went back and re-tested the scenarios after I'd realised the disk wasn't actually readable), but it had caused errors when trying to access the drive in My Computer... when it actually chose to show up. Both FDISK, DISKPART and Disk Management in all forms/versions/flavours of old-windows didn't want to touch the partition table. I also tried Partition Magic 7.0, but that didn't care either.

winxp-diskpart-nope winxp-pm70-cant-see winxp-sandisk

Actually, FDisk in Windows 98 SE JP managed to show the card, but then suggested that it was onlt 136mb in size? I actually tried to follow through with it and that's what probably really killed the partition table.

sandisk-fdisk-1 sandisk-fdisk-3 sandisk-fdisk-2

Thanks to this post at, I was directed to an older version of BOOTICE which disregards all forms of safety and allows you to totally wipe and re-partition removable media in older versions of Windows.


Choose the correct disk and click 'Parts Manage'. You'll be presented with the screen below...


I was expecting an option to set up the actual parition table, but nothing was presented. Instead you need to choose 'ReFormat USB Disk' and choose the top option.

WPA2 on Windows 98 SE

As mentioned above, you can install the Odyssey Client 4.52 on Windows 98 to enable connections to WPA2-encrypted wireless networks.


I expected that I'd have to build a guest network with WEP encryption, or worse - no encryption, to test the wireless PCMCIA cards... but I didn't! This software worked perfectly!


The IBM External CD-ROM is super-cool! The fact that it comes with a sound card inbuilt and a gameport/midiport is awesome. I suppose it's really suited to an older laptop that doesn't have a soundcard. I actually tried using the joystick port and it works fine, but don't expect all joysticks to work 100%. I'll post about that soon.

As for the PCMCIA to PCI or USB, you're mileage may vary. If you just want to use flash storage or ethernet cards, then go for it... but why not just get an ISA or PCI card? I remember back in the day I really wanted a PCMCIA to PCI adapter for a wireless card to join the Canberra Wireless network... as actual PCI wireless cards were still a pipe-dream. That never happened... and now I have a surplus of the technology and no real reason to need it. Actually... that's the point behind too many posts on this blog!

Filed under: Retro No Comments

Passing Freight in South Yarra – April, 2020

Thanks to having a camera hanging off the balcony, I'm able to capture and record scenes like the following. Also, thanks to FTTP NBN, the steam is live 24/7.

Above you'll find an up Maryvale Paper Service entering first from the left. Shortly after, a down Long Island Steel train will pass through. The up service was relatively on-time, but the steel was allocated a run for the 11:30am service, running well-late even for the 13:30 (9557) timeslot.

Anyway, here's the live cam. (But if below is temporarily unavailable, browse here to find the latest URL: stevenhoefel - youtube - live)


Filed under: AUS 2 Comments

Restoring an Azure DB Bacpac into SQL Express

Every so-often, one receives a request out of the blue to revive things that one has totally forgotten about. In most cases, it's comments on pages on this hideous blog asking questions about things that I've gotten rid of, in one form or another, and can't answer! Fortuantely, this time I could: it was a request to revive a project which had been on ice for a long time, but had been well-backed-up... or so I thought.

Firstly, it took me two days to find the files... not cool. If you shut down a project, get EVERYTHING and put it in ONE LOCATION. The system comprised of a zip of the IIS inetpub folder, a zip of the data drive and finally, a database backup from the SQL-as-a-service database. This, thanks to Azure not providing direct access to the server, takes the form of a bacpac file.

Back in the day, when developing, the preprod server was located on a HP something-something with 44gb of RAM which hosted multiple VMs. It made a fantastic noise when it first booted, making sure the fans could hit the required RPMs, and so it was left on most of the time. It was quite the powerhouse and did everything we needed. To save cost, the preprod server only ran SQL Express, so whenever we needed to back-port the production database to diagnose and squash bugs, we needed to manipulate the backups to make them fit.

What do I mean by this? Well SQL Express (or, at least the old 2014 version running in the VM) isn't as capable as Azure DBs and therefore you needed modify the backups so that they wouldn't throw errors when they were being restored. Below is a perfect example (this happened tonight) of such errors...

database-1 database-2 database-3

All looking OK, taking large amounts of time, and then...


Bang! With is not a valid operator... what's it doing embedded in a SQL script? Let's find out! Did you know that a bacpac file is just a pkzip archive? Install 7-zip, right click on the bacpac file and choose Open Archive.


Nice, contents. You'll find the database tables stored as BCP files in the Data folder and actual entire structure and scripts in the model.xml file. If you have your favourite editor installed correctly, then you should just be able to double-click model.xml and edit the file inline.

We know that the error is about shared access keys, so I CTRL-F'd the relevant keyword and the result was at the very bottom of the file. It's trying to store the logging and auditing on Azure shared storage... which is obviously not a good idea if we're running a private server. It's also totally incompatible with SQL Express, so lets rip it out.

		<Element Type="SqlDatabaseCredential" Name="[]">
			<property Name="Identity" Value="SHARED ACCESS SIGNATURE">
		<Element Type="SqlDatabaseCredential" Name="[]">
			<Property Name="Identity" Value="SHARED ACCESS SIGNATURE" />
		<Element Type="SqlFullTextCatalog" Name="[SnomedCatalog]">
			<Property Name="IsAccentSensitive" Value="True" />
			<Relationship Name="Authorizer">
					<References ExternalSource="BuiltIns" Name="[dbo]" />

I also ripped out the Full-Text Searching block above, as shown, and another block much further above that was also referencing this block. Once I'd made all the changes to the zip file, I closed my editor and went back to 7-zip.


Yes, 7-zip, I very muchly would love to commit the changes back into this 1gb archive, thank you. From here, I attempted to deploy the bacpac to the server...

Ok, right, by editing a file inside this archive, we've trashed the thumbprint. A checksum is a magical calculation of a chunk of binary data that, somehow, resolves it down to a unique number that indicates the bits. If a bit changes, the checksum number changes and this allows software to know if things have been tampered with. That's what has occurred here... we've actually tampered with it and it's changed the calculation.

The SQL Server has run a calculation on the file and the result has mismatched with something, but with what? Turns out that in the original.xml file is a checksum value! We need to change this value to the new checksum, but how do we calculate that? Don't even bother thinking, just copy the following script into a file called checksum.ps1 and store it in your home directory.

$modelXmlPath = Read-Host "model.xml file path"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create("System.Security.Cryptography.SHA256CryptoServiceProvider")
$fileStream = new-object System.IO.FileStream ` -ArgumentList @($modelXmlPath, [System.IO.FileMode]::Open)
$hash = $hasher.ComputeHash($fileStream)
$hashString = ""
Foreach ($b in $hash) { $hashString += $b.ToString("X2") }

If you've never run scripts in Powershell before, then you'll need to run the following command first if you get an error like 'checksum.ps1 cannot be loaded because running scripts is disabled on this system.'

set-executionpolicy remotesigned

Once sorted, run the following:

PS D:\> checksum.ps1
model.xml file path: d:\model.xml

That final number needs to be pasted into original.xml in the archive. Save it back into the archive and deploy once more. Note that, before you try to deploy again, you'll need to detach the half-deployed database and delete the mdf/ldf files that were half-stored in the deployment folders that you set when you tried previously.

I then hit another error, a long way into deployment where the server said that AT was a shit command. Turns out one of my previous developers had tried to cast a datetime into a timezone using the query getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Aus Eastern Standard Time'. Neat! But SQL Express hates that... so... open the archive, edit model.xml, save it, copy it out of the archive, checksum it, edit original.xml and deploy again...


Fiinnnnaaalllyyyy....!!! IT'S ALIVE! ... Hah... it's not...


dbo.Sort Failed? What dat? Google! There's always someone else that has had your error before... tempdb full? Let's add a new 100gb disk and slap tempdb over there. You can do this by running the following in a new query editor against master...

USE master;

MODIFY FILE (NAME = tempdev, FILENAME = 'T:\MSSQL\DATA\tempdb.mdf');

MODIFY FILE (NAME = templog, FILENAME = 'T:\MSSQL\DATA\templog.ldf');

And you'll need to restart SQL before it applies...

The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.
The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.

Completion time: 2020-04-08T22:55:04.1929547+10:00

Of course, you'll need to change T drive to something else! Enjoy!... or not... what the hell is this error?


Right, memory? Is that physical memory? Swapfile memory? Or storage space? Fortunately, it's a VM, so lets increase every one of those. If you have the RAM, then that's easy... slide that slider to the right. Disk space is a little trickier. Open the main Virtual Box console and choose Virtual Media Manager from the File menu. From here, select your disks, slide the slider to the right and then hit apply. Note that this will only change the dimensions of the disk, it wont touch the partitions.

database-10 database-11 database-12

So, to extend the partitions, open Disk Management (right-click the start button) and then find the drive. Once located, right-click and choose Extend Volume. If the free space is directly after the drive, it'll already be selected and you can just hit nekk-nekk-finish. Enjoy!

Filed under: Retro No Comments