Garo - Sewers - album on game console cartridge
Sewers is my second EP, released in 2011. It revolves around the theme of Teenage Mutant Ninja Turtles, the cartoon I was absolutely fascinated by while growing up. It was released in a digital format accompanied by a limited edition of game cartridges that contained special link for downloading the EP with additional content.
Cartridges I used were the original ones from Zhiliton console system which was popular in Lithuania in the 90s. The artwork was hand painted by Andrius Labašauskas.
Despite the fact that cartridges contained only download link, many people assumed that the cartridge actually contains the music and the rumour spread. Luckily, nobody was able to test that theory as at that point nobody had a working Zhiliton console anymore.
The cartoon
Teenage Mutant Ninja Turtles was the first western cartoon that I saw on TV. I was born while Lithuania was still occupied by soviet union. There was maybe one or two state run TV stations that were broadcasting the “correct” content that was filtered through by central comity of the communist party. Therefore we as kids were only able to see a handful of soviet cartoons that were mostly in line with the ideology.
Fortunately, the soviet union collapsed in 1991 and Lithuania regained its independence. The first thing that changed was the TV. Suddenly there were new TV channels popping up and content on the state owned channels changed dramatically. In the very beginning they were just re-broadcasting some of the western TV channels without any copyright agreements, full blown pirate style. The broadcasts were not regular, so you never knew what you gonna stumble upon on each channel.
I remember very vividly how one day while flipping through the channels I saw a cartoon that was unlike anything I’ve ever seen before. There were these green turtles who were wielding cool guns, riding skateboards, using high tech gadgets and eating pizza. They looked cool as hell and I was absolutely blown away. As the broadcasts were not regular I had to frantically browse TV channels multiple times a day hoping that I will stumble upon this amazing cartoon again.
One more thing from the cartoon that stuck with me was the theme song. It was so catchy and energetic, filled with the sounds of cheesy guitar riffs and melody that you just can’t get out of your head. I remember I had a casette recorder hooked up to TV waiting eagerly when I will stumble upon the cartoon so I can record the theme song and listen to it on repeat for hours. Apparently that engraved into my brain so deep that good 15 years later I decided to write a whole EP dedicated to this catchy 60 second long theme song .
Zhiliton Entertainment System
Similar to the TV we didn’t have access to any video game consoles in soviet union. There was a handheld device with the game where cigarette smoking and swearing wolf from a very popular kids cartoon has to catch eggs falling from different directions. But that was pretty much it. No Nintendo, no Sega, no nothing.
Shortly after independence first game consoles started popping up across the semi-legal markets that became popular around the country. These were usually rip-offs of western or japanese consoles, but they were something we could afford and they were available. One of the most popular was Zhiliton, a rip-off of Nintendo Famicom designed to resemble Sega Mega Drive. Proudly claiming to be 16-bit while it actually was 8-bit. I didn’t own one myself as my father was very much against video games and considered them to be a complete waste of time (although I have to admit that later he was the one who brought me a copy of original Doom on floppy disks from his work, still can’t comprehend how did that happen), but I had quite a few friends who did own it and played my first video games on it.
The Zhiliton had a very distinct yellow cartridges that were used to load games. The games were pirated versions of popular games so you could get good ones with games like Super Mario Bros, Contra, Battle City, etc. But they were more rare and quite expensive. The most popular ones were the ones that had 100+ games on them. Titles like “100 in 1” or “9999999 in 1” were very common.
The artwork featured the screenshots from a few better games that these cartridges had, but most of the stuff inside was some glitchy, unplayable mess, many times the same game just starting from different level or with other small modifications.
Given the 8-bit / 16-bit stylistic of the whole EP, releasing it using this iconic piece of nostalgia made all the sense.
Gariūnai market
It was already good 15 years after the period when these markets and Zhiliton consoles were popular, so finding somebody who is still selling them was no easy feat. To my surprise, I was still able to find few people in one of the oldest and iconic markets in Vilnius called Gariūnai who still had these old cartridges on their shelves.
Gariūnai used to be the biggest market in Lithuania and was the place where you could buy anything from food to clothes to electronics to cars. There was a period when it was the only place in Lithuania where you could buy certain types of goods, for example extra large baggy pants that were absolute gold back then. Along fake designer clothes and stolen car stereos you could find Zhiliton consoles and tons of game cartridges for them. It was a bit of a trip down the memory lane to go there and see the place that I haven’t been to since I was a kid.
There is a very interesting video made in 1995 about the car traders that were bringing used cars from Europe and selling them in Gariūnai market.
To my surprise cartridges were not cheap, the price was comparable to the games you would buy for Playstation or Xbox. Luckily the seller had a whole bunch of faulty ones and agreed to sell me 100 of these for a very reasonable price.
Along the cartridges I also got lots of sticky labels for these cartridges from many different games. We used them for inspiration to create the turtles related artwork for the cartridge.
Writing software for console
In the midst of excitement about how cool it will be to have that cartridge I of course thought that it would be even more amazing to actually make a working version of the cartridge that would allow you to play the EP on the console. Obviously I had to discard this idea as doing it would take ages and literally nobody would use it even once. Needless to say you would need to do it in assembler and even the program that shows text “Hello world” is like hundred lines of code.
;*********************************************
; NES Hello World
; Made by: Pedro A. Fabri
; Based on Nerdy Nights Tutorials
;*********************************************
;*********************************************
; Variables
;*********************************************
.rsset $0000
;*********************************************
; NES Header
;*********************************************
.inesprg 1 ; 1x 16KB PRG code
.ineschr 1 ; 1x 8KB CHR data
.inesmap 0 ; mapper 0 = NROM, no bank swapping
.inesmir 1 ; background mirroring
;*********************************************
; Bank 0
;*********************************************
.bank 0
.org $C000
RESET:
SEI ; disable IRQs
CLD ; disable decimal mode
LDX #$40
STX $4017 ; disable APU frame IRQ
LDX #$FF
TXS ; Set up stack
INX ; now X = 0
STX $2000 ; disable NMI
STX $2001 ; disable rendering
STX $4010 ; disable DMC IRQs
JSR vblankwait
clrmem:
LDA #$00
STA $0000, x
STA $0100, x
STA $0200, x
STA $0400, x
STA $0500, x
STA $0600, x
STA $0700, x
LDA #$FE
STA $0300, x
INX
BNE clrmem
JSR vblankwait
;*********************************************
; Load Palettes
;*********************************************
LoadPalettes:
LDA $2002 ; read PPU status to reset the high/low latch
LDA #$3F
STA $2006 ; write the high byte of $3F00 address
LDA #$00
STA $2006 ; write the low byte of $3F00 address
LDX #$00 ; start out at 0
LoadPalettesLoop:
LDA palette, x ; load data from address (palette + the value in x)
STA $2007 ; write to PPU
INX ; X = X + 1
CPX #$20 ; Compare X to hex $10, decimal 16 - copying 16 bytes = 4 sprites
BNE LoadPalettesLoop ; Branch to LoadPalettesLoop if compare was Not Equal to zero
;*********************************************
; Load Sprites
;*********************************************
LoadSprites:
LDX #$00 ; start at 0
LoadSpritesLoop:
LDA sprites, x ; load data from address (sprites + x)
STA $0200, x ; store into RAM address ($0200 + x)
INX ; X = X + 1
CPX #$28 ; Compare X to hex $14, decimal 20
BNE LoadSpritesLoop ; Branch to LoadSpritesLoop if compare was Not Equal to zero
LDA #%10001000 ; enable NMI, sprites from Pattern Table 1
STA $2000
LDA #%00010000 ; enable sprites
STA $2001
;*********************************************
; Main Logic
;*********************************************
Forever:
JMP Forever ;jump back to Forever, infinite loop
;*********************************************
; NMI Interrupt
;*********************************************
NMI:
LDA #$00
STA $2003 ; set the low byte (00) of the RAM address
LDA #$02
STA $4014 ; set the high byte (02) of the RAM address, start the transfer
RTI ; return from interrupt
;*********************************************
; General Functions
;*********************************************
;*********************************************
; VBlank Wait
;*********************************************
vblankwait:
BIT $2002
BPL vblankwait
RTS
;*********************************************
; Read Buttons
;*********************************************
RTS
;*********************************************
; Bank 1 - DBs
;*********************************************
.bank 1
.org $E000
palette:
.db $0F,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$0F
.db $0F,$1C,$15,$14,$31,$02,$38,$3C,$0F,$1C,$15,$14,$31,$02,$38,$3C
sprites:
; X tile attr Y
.db $60, $11, $00, $68 ; H
.db $60, $0E, $00, $70 ; E
.db $60, $15, $00, $78 ; L
.db $60, $15, $00, $80 ; L
.db $60, $18, $00, $88 ; O
.db $70, $20, $00, $68 ; W
.db $70, $18, $00, $70 ; O
.db $70, $1B, $00, $78 ; R
.db $70, $15, $00, $80 ; L
.db $70, $0D, $00, $88 ; D
.org $FFFA ;first of the three vectors starts here
.dw NMI ;when an NMI happens (once per frame if enabled) the
.dw RESET ;when the processor first turns on or is reset, it will jump
.dw 0 ;external interrupt IRQ is not used in this tutorial
;*********************************************
; Bank 2 - Graphic Binary
;*********************************************
.bank 2
.org $0000
.incbin "mario.chr" ;includes 8KB graphics file from SMB1
Anyway it was interesting researching a bit about how the people used to write the software for these old consoles. Also I have found very interesting videos explaining how graphics worked on different console systems. Here is the part about Commodore and Nintendo consoles and this one continues on the topic of how Apple and Atari were handling it and also about early CGA graphics on PC . Here is also video from the same guy explaining how music and sound effects worked on early PCs and consoles . All videos are under 10 minutes, definitely worth a watch.
Press release
For this release I wanted everything to look very professional. I already had distributor that managed my music on all digital platforms, but I also wanted to have proper press release for the EP. I was always quite shy about my music and bragging about stuff in general, so I asked my friend and studio colleague Mark Splinter (who was never shy about any of these aspects) to write one for me. He did a really good job and I ended up with this:
Sewers EP didn’t conquer the world, but it was tons of fun writing these tunes and twisting the theme in so many different directions. It was also great fun giving out cartridges to friends and artists from all over the world during legendary Satta Outside festival in Lithuania. It is also very nice when some friend or random person just pings you telling that he really likes one of the tracks from the EP. That happened quite a few times with this EP and it always makes me happy.