Monday, October 15, 2018

Safe SYNC GB - 1U Tile Module

The current method of syncing your gameboy with an external analog clock source is functional indeed, but we all know what you really want to hook it up to! Or maybe you don't, but either way if your clock source isn't the cleanest or even high voltage like a 24v peak to peak saw tooth or a sine wave with a voltage offset you no longer need to worry about it combusting in your hands!

The board is currently sized to fit in a 1U rack and is very shallow for skiffs. As you can see below.

Now you're probably wondering what we can feed into it and what the gameboy actually receives. Below I have simulated a few inputs and probed the SI pin on the gameboy's link port. The first simulation shows a very hot saw jumping between -12V and +12V, but the gameboy receives a clean square wave with skarp edges between 0V and +5V.

Another simulation shows a sine wave of only 2V peak to peak and an offset of +5V! But as you can see on the gameboy's SI pin, we have another 5v pulse.

So, what about the gameboy as the master clock? No worries, just change the setting on your GB and the module will output a 0-12V pulse so you can use your GB to sync up to modules that may need more than a 0-5V pulse.

After thoughts:
Adding a jumper to the board which switches the output range from 0-12V to 0-5V would only require a three pin jumper or toggle switch.

Adding three of these modules to a 3U faceplate is possible and would allow the user to daisy chain the I/O an control other modules along with more gameboys from a  single handheld.

Wednesday, June 22, 2016

NES controller on PC Engine / TurboGrafx 16

My brother needed a second controller for his PCEngine so we could co-op some shmups but original controllers are wildly expensive! And even if you find a cheaper option from another region, you'll need to buy yourself an adapter...ugh. So what I was design a circuit board to implant into an NES controller shell!

Easy as pie. This board supports either the cord for a PCengine or a turbografx and has broken out headers in case you want to install it into a different (larger) controller shell. This version does not support turbo buttons right now though.

Top Side:
Back Side:
Once I print some, I'll update with another post. 

Friday, February 26, 2016

Weird Science - The start of my modular company

For the last few years, I have been designing modular synth equipment in hopes of opening a store to sell them, or in the very least, have my own kit to play with. I began designing 3U modules but just sat on the designs for several years tweaking, adjusting, testing and revising them without anything to show for it besides a mountain of intellectual property.

Now, I have a chance to actually make my modules but the interest is in 1U, so I have been redesigning the layouts and retracing everything to accommodate the 1U, or Tile, layout. I am very quickly discovering that many of my module designs are better fit to a 90 degree mounting scheme, and boards are cheaper since they can be more square.

If anyone is interested in Modular stuff, please check me out once my store is up and running. I should be uploading some things to Big Cartel within the next month or so.

I call myself, Weird Science.

Weird Science

Weird Science

Weird Science

Sunday, January 24, 2016

Gameboy Camera Force Trippy H

Here is something I have been working on for a few days now and only got a little bit of progress. But progress is progress and this really helps me understand gameboy debugging.
Analyzed the WRAM addresses for any and all changes that occur when you press buttons, select particular cursor locations and of course: when you enter DJ mode (Trippy H).
After hours and hours, I found that WRAM $D5CE is the game mode byte, or at least that's what I call it. This byte is changed directly before switching between dancing mario, menu, view, shoot and trippy H (as well as the other menus and modes).
1:D5CE 00 w
The first instance was when you press a button while mario dances. I restarted the emu and pressed A. The code broke and stopped at $74AC where there was an "LD A, $00"
Has someone done this before?

Dance = 19, menu = 00, shoot = 01, DJ = 1F, view = 02, play - 07, etc.
After learning this, I set an access break when the byte 00 is written to $D5CE
I replaced this with "LD A, $1F" and restarted again.
This time when you press a button at dancing mario, Trippy H starts!
Next update I would like to stop the cart from checking if the camera is present. This will allow the ROM to be put onto a normal flash cart. 
2nd future update would be to remove unnecessary routines like "shoot  " and "view" hopefully the ROM itself can be reduced in size. Potentially an MBC1 + SRAM + BATTERY
3rd future update I would like to break the ROM even more and remove saving altogether so that it can be safely put on a 64M cart along with LSDJ or a dedicated ROM only cart.

Sunday, December 13, 2015

ROM, EPROM, EEPROM that I like

Here is a quick-check list of different roms that are easy to get.
All run on single supply voltages of 5v and are accessed via a parallel bus.
Also listed is what to do with those pesky control pins when if you just want these to be read by the controlling system (NES, Genesis, z80, etc)

8-bit UV Eproms:

27c16 - 2,048b x8 = 2 KBytes 
27c32 - 4,096b x8 = 4 KBytes
27c64 - 8,192b x8 = 8 KBytes 
27c128 - 16,384b x8 = 16 KBytes
27c256 - 32,768b x8 = 32 KBytes
27c512 - 65,536b x8 = 64 Kbytes

8-bit EEPROMs:

29f010 - 131,072b x8 = 128 KBytes alt: 29ee010, 49f010
29f020 - 262,144b x8 = 256 KBytes alt: 49f020
29f040 - 524,288b x8 = 512 KBytes alt: 49f040

8- or 16-bit UV EPROMs:

27c400 - 512Kb x8 or 256Kb x16
27c800 - 1Mb x8 or 512Kb x16
27c160 - 2Mb x8 or 1Mb x16
27c322 - 2Mb x16 (no 8-bit mode available)

8- or 16-bit EEPROMs:

29f200  -  256Kb x8 or 128Kb x16 (~1.64usd ea)
29f400 - 512Kb x8 or 256Kb x16 (~2.11usd ea)
29f800 - 1Mb x8 or 512Kb x16 (~3.12usd ea)
29f160 - 2Mb x8 or 1Mb x16 (price unknown)

8-bit EEPROMs I am looking into:

29- or 49-f040  - 512Kb x8
29f080  -  more info once I use them

There are of course hundreds of other roms, but I don't use them.

Control Pins:

None of these pins can be left hanging (disconnected) as far as I know. So don't do it.
Note: "!" will be used to distinguish low-enable pins. This means that when this input is pulled low, the function is enabled.

!CE - Chip Enable, AKA !E:
Most likely your system will need this to be connected to the control bus of the system. Sometimes it is connected to GND directly if your system has NO other memory that it must address. Sometimes it is connect to !OE, but only if your system has no other memory to access.

!WE - Write Enable. AKA !WR:
Typically your system will not be able to program the rom, so this should be pulled high by a resistor connected to vcc. Sometimes you can get away with connecting this pin directly to vcc without a resistor. Anywhere between 4k7 to 10k ohms should be good.

!OE - Output Enable. AKA !RD, !G:
Most likely your system will need this to be connected to the control bus of the system. Sometimes it is connected to GND directly if your system has NO other memory that it must address. Sometimes it is connect to !CE, but only if your system has no other memory to access.

!PGM - Program Enable:
This is similar to !WE but is only seen on a select few ROMs that also require a VPP voltage. Connet this pin to vcc inside your system.

VPP - Programming voltage:
This is typically a high voltage of 12v to 21v required to program a UV EPROM. This is not going to be used by your system, so it should always be pulled high/VCC/+5v.

!OEVPP - Output Enable / Programming voltage
When low (0v), this pin acts as the data output enable pin. When high (vcc) this pin shuts off data output. When connected to vpp (typ. 12v - 21v) this pin acts as vpp putting the chip into programming mode. Connect this pin to your control bus as though it were just !OE.

Q15A-1 - This pin is very special! When in 16-bit mode (byte pin high), this pin is used as data pin D15 or Q15.When in 8-bit mode (byte pin low), this pin is Address pin minus 1. And yes, by minus 1, this is less than 0. What that means is, the pin will connect to A0 on your computer's bus, eprom pin A0 will then connect to computer side A1, etc. here is a little diagram:

rom ---- computer
A-1 ---- A0
A0 ----- A1
A1 ----- A2
A2 ----- A3

!BYTEVPP - Byte Mode / Program Supply:
This pin is pulled high if using the rom in 16-bit mode, or ground when in 8-bit mode.
When this pin is connected either to VSS or VCC, then VPP is ignored, The only time the VPP function is used is when the voltage connected is 12v to 21v as instructed by the appropriate datasheet.
Further explanation from a datasheet:

The M27C160 (for example) has two organisations, Word-wide and Byte-wide. The organisation is selected by the signal level on the BYTEVPP pin. When BYTEVPP is at VIH the Word-wide organisation is selected and the Q15A–1 pin is used for Q15 Data Output. When the BYTEVPP pin is at VIL the Byte-wide organisation is selected and the Q15A–1 pin is used for the Address Input A–1. When the memory is logically regarded as 16 bit wide, but read in the Byte-wide organisation, then with A–1 at VIL the lower 8 bits of the 16 bit data are selected and with A–1 at VIH the upper 8 bits of the 16 bit data are selected.

For a much more in-depth explanation of eproms, see:

Saturday, December 12, 2015

Odyssey 2 variety cart

I am also currently working on a flash cart for the Odyssey 2 that supports a wide array of roms, proms, eproms, etc.

27C-, 28F-, 29F-, 29EE-, 49F-, etc.
16, 32, 64, 128, 256, 512, 010, 020, 040, and maybe more.

SwinSID SE - reworked by Me

Been toying with the SwinSID which is a decent DIY version of the SID chip. My version takes up no more space than the original and would be a drop-in-replacement with no extra wiring. Programming the atmega would be a little difficult though since there is no room for an ICSP.