FDS Writing extension for TapeDump

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
FDS Writing extension for TapeDump
by on (#109187)
Hi, everyone. The NES programming bug hit me again (or was it a wave of FDS nostalgia that did it?) and so I wanted to find a way to upload .FDS images and save them to disk using my program, TapeDump (version 1.0 here). I was wondering, continuing the "no extra hardware needed" idea, whether KCS audio files could be sent TO the NES, or Famicom, via the microphone, or something.

Anyway, I didn't try to get KCS decoding going on the Famicom just yet (anybody has any advice with tape decoding, let me know) because I thought the simpler first step would be to get general (fast) data uploading going on the Famicom with a dedicated cable. Last summer I in fact did make a special cable for my C-64 DTV using the schematic included with DTVTrans, the software that uploads data to the C-64 via the PC's parallel port at a good rate.

So here are the initial results of my experiment:

Here's how I connected the DTVTrans cable to the Famicom expansion port:
Image

I adapted this cable to the Famicom's expansion port, choosing wires that wouldn't conflict with the existing connected joypads, and got the wiring all right and software polling of the data lines working. Using the DTVTrans software on the PC, I can upload files to the Famicom at about 4.6Kbytes/sec.

I then got down to studying how to write to FDS disks, and eventually, using a disk drive that HAS NO COPY-PROTECTION CIRCUITRY, got my software to write full FDS disk images from the PC! Since my current PC can't run FDSLoader at all, this disk re-writing via parallel port is the next best thing.

A quick whipped-together ZIP file: http://www.chrismcovell.com/data/TapeDu ... Writer.zip
(my in-progress version skips the usual TapeDump title screen and goes directly to the FDS Writer code)

Pic of it writing:
Image

Loading of FDS files straight to the RAM adaptor for soft booting works well too, though some files can't be loaded properly, and several games read the FDS disk themselves right after booting, but it's a good way to load your own software onto the FDS RAM unit for quick testing.

Pic of RAM upload:
Image
---

Okay, so I'll keep working on this program since it still needs polishing and stuff. Does anybody have any comments about the cable and connection method?

The $4016/$4017 bit assignments are not set in stone for now, but there are some limitations. I can't use the same $4016/7 bit assignments for the Famicom and the NES, because the NES has a few too many of those bits going to its expansion port, not the joystick port. And the bits that ARE usable on NES Joy 2 can't be used on the Famicom without having to disconnect the usually hard-wired Joystick 2 on the Famicom. That's why I chose other available bits on the Fami expansion connector.

If anybody makes a cable to try this out on their Famicoms, let me know if it works. The DTVTrans cable calls for Schottky-barrier diodes but the requirement may not be that strict. I've included a "PortTest.NES" program for debugging and verifying correct cable operation. (Remember that, as I discovered to my surprise, lines being sent to the Famicom appear logically inverted, because the Fami uses pull-up resistors, or something like that...)

Port tester:
Image
Re: FDS Writing extension for TapeDump
by on (#109196)
Back in the day of acoustic couplers for modems, I don't think they got above 300 baud... wikipedia tells me the last one got to 1200 baud, but only with very good seals.

The two KCS parsing circuits I've seen (Famicom Keyboard, something from How to Build Your Own Working Microcomputer) both had a ~hysteretic stage to fix up the derivative-taking nature of audio cassettes. Since the famicom microphone doesn't have any such stage... it's hard to advise without some real-world data as to just how 1200hz+ audio comes in on the microphone's 1 bit ADC.
Re: FDS Writing extension for TapeDump
by on (#109236)
Here's a program I made up to test the Famicom mic:

http://www.chrismcovell.com/data/Waveform_Check.zip

Image

The microphone, when in the controller's case, is extremely insensitive... put earbud headphones up to the mic hole and it barely registers as a pulse on-screen.

So I removed the mic from the controller case and it got much more response on-screen.

I also connected a waveform generator directly to the Mic wires and took some measurements:

Sensitivity Range (waveform is solid with no noise): 10 Hz -> 15 KHz

At high frequencies, it triggers at around 1.25 Volts.
At low frequencies, it triggers at 0.125 V. Max voltage 2.71 V (then the capacitor in the controller starts to lift the DC voltage away from 0V.)

Duty Cycle: 7.8% <-> 97.5% at low frequencies
49% <-> 55% at high frequencies

Maybe someone else can do more accurate measurements. Anyway, I had fun playing with the Mic input, but I'm not sure if I want to go down the long path to getting FDS rewriting working through 300 baud mic transmission... :?
Re: FDS Writing extension for TapeDump
by on (#109238)
I've looked in Castle Excellent, which can save games using the Famicom data recorder. Its code for parsing KCS is in the first 255 bytes of the ROM, so it's easy to find.

The way it worked is it made a "temporal comparator" to determine whether it's been closer to 746 or 1491 cycles since the last time the input toggled. It should be easy enough to look at the input on the microphone and see if it's suitable for such logic, or if there's too much noise. Or maybe you could even just borrow the code from Castle Excellent for the purposes of testing, dunno.

I do suspect that driving the microphone with a sine instead of a square wave is better.
Re: FDS Writing extension for TapeDump
by on (#109242)
Does Castle Excellent actually use KCS?

I checked earlier into the data format for Wrecking Crew and it used an incompatible format (borrowed from the SHARP MZ series of computers) for transmitting data, which means decoding/encoding software is esoteric/nonexistent.

The same KCS08 program that I use for TapeDump decoding can be used for encoding as well, so the same standard will be preferable.

In my tests with the Mic, square waves triggered much better than sine or triangle waves.
Re: FDS Writing extension for TapeDump
by on (#109243)
It looked like KCS? Definitely 1200/2400 Hz FSK at 1200 baud; marker tone of 5 seconds of 1200 Hz. I suppose it might have been some other very similar FSK.
Re: FDS Writing extension for TapeDump
by on (#109246)
Wikipedia says there's something called KCS and something called CUTS. I can't really tell the difference. KCS, as I understand it, is FSK at 300 baud, 0=1200 Hz, 1=2400 Hz, 110 between bytes. CUTS is pretty much the same except with the option to run at 1200 baud.
Re: FDS Writing extension for TapeDump
by on (#109267)
can you make a rom dumper use a real famicom via rs232?
Re: FDS Writing extension for TapeDump
by on (#109270)
Possible, but I'm not the one to do it. I don't have a working COM port on my computer (and USB solutions have failed me.)
Re: FDS Writing extension for TapeDump
by on (#109990)
Here's a partial disassembly of Castle Excellent's KCS code. Yes, it uses KCS, but the bit ordering is backwards in the bytes it sends compared to KCS.

KCS: 0,b0 b1 b2 b3 b4 b5 b6 b7,1,1
Castle Excellent: 0,b7 b6 b5 b4 b3 b2 b1 b0,1,1

Code:
;*****************************
;Disassembly of Castle Excellent KCS loader/saver
;*****************************
; Partial work by Chris Covell
;*****************************
;
;*****************************

;*****************************
; 8000: Long delay.
;*****************************
k_Long_Delay:   ldx #$91
-:      dex
      bne -
      rts

;*****************************
; 8006: Short delay.
;*****************************
k_Short_Delay:   ldx #$47
-:      dex
      bne -
      rts

;*****************************
; 800C: Wait for Audio Level transition
;*****************************
k_Wait_Transition: ldy #$00              ;Y will be a "loop" counter
-:      iny
      beq +                 ;256 loops = timeout
;-----
      lda $4016             ;Joystick 1 + strobe
      and #$02              ;Get Tape data bit
      eor $30               ;Is it different from last read?
      beq -         ;If not, keep looping, inc Y
      eor $30
      sta $30               ;$30 will contain Level after transition
      rts                   ; Y will contain # of loops until transition
;-----
+:      dey         ;Y = FF = 256 reads with no change.
      rts

;*****************************
; 8021: Count Audio Level Transitions within 40 loops
;*****************************
k_Count_Transitions:   ldx #$28              ;Do 40 loops no matter what
      ldy #$00
-:      lda $4016             ;Joystick 1 + strobe
      and #$02
      eor $30               ;Transition?
      beq +
      eor $30               ;Store the change
      sta $30
      iny
      dex
      bne -
      rts                   ;Y will contain # of transitions
;--------
+:      lda $30                ;This just wastes cycles
      lda $30
      lda $30
      dex
      bne -
      rts

;*****************************
; 8041: Send Zero Bit - Single long cycle
;*****************************
k_Zero_Bit:   lda #$00
      sta $4016             ;Joystick 1 + strobe
      jsr k_Long_Delay
      lda #$01
      sta $4016             ;Joystick 1 + strobe
      jsr k_Long_Delay
      lda #$00
      sta $4016             ;Joystick 1 + strobe
      rts

;*****************************
; 8057: Send a bit currently stored in Carry
;*****************************
k_Send_Bit:   bcc k_Zero_Bit
;*****************************
; 8059: Send a "One" - A Pair of short cycles.
;*****************************
k_Ones_Bit:   lda #$00
      sta $4016             ;Joystick 1 + strobe
      jsr k_Short_Delay
      lda #$01
      sta $4016             ;Joystick 1 + strobe
      jsr k_Short_Delay
      lda #$00
      sta $4016             ;Joystick 1 + strobe
      jsr k_Short_Delay
      lda #$01
      sta $4016             ;Joystick 1 + strobe
      jsr k_Short_Delay
      lda #$00
      sta $4016             ;Joystick 1 + strobe
      rts

;*****************************
; 807F: Waits for stable Leader tone
;*****************************
k_Wait_for_Leader: lda #$04
      sta $4016             ;Joystick 1 + strobe
      ldx #$00
      stx $30
-:      jsr k_Wait_Transition   ;Wait for a transition
      cpy #$12                ;And check it's between $12 and $19
      bcc k_Wait_for_Leader   ;loops per transition
      cpy #$1A
      bcs k_Wait_for_Leader
      inx
      bne -                  ;256 transitions
      rts

;*****************************
; 8097: Send Leader tone for 7.04 seconds
;*****************************
k_Send_Leader:   lda #$21   ;#$2100 / 2400Hz * 2
      sta $2F
      ldy #$00
-:      jsr k_Ones_Bit   ;Send continuous "Ones" for duration
      dey
      bne -
      dec $2F
      bne -
      clc
      rts

;*****************************
; 80A9: Send a full byte as: 0,b,11
; CASTLE EXCELLENT SENDS THE BYTE OPPOSITE TO KCS FORMAT!!
;*****************************
k_Send_Byte:   jsr k_Zero_Bit      ;a coded "0" is sent first
      ldy #$08
-:      asl $17                 ;MSB first!! Backwards from KCS format!
      jsr k_Send_Bit      ;Then all 8 bits
      dey
      bne -
      jsr k_Ones_Bit          ;Then a "1"
      jmp k_Ones_Bit      ;Finish with a "1"

;*****************************
; 80BC: Receive a byte
; CASTLE EXCELLENT RECEIVES THE BYTE OPPOSITE TO KCS FORMAT!!
;*****************************
k_Recv_Byte:   lda $4016             ;Joystick 1 + strobe
      and #$02
      beq k_Recv_Byte       ;Wait for rising edge
-:      lda $4016             ;Joystick 1 + strobe
      and #$02
      bne -                ;Wait for falling edge
      sta $30                 ;Save zero
      jsr k_Wait_Transition   ;Wait 0->1
-:      sty $2D                 ;Save timing result
      jsr k_Wait_Transition   ;Wait 1->0 (or 0->1)
      tya
      clc
      adc $2D                 ;Add both timings together
      bcs -                   ;If over $FF, read again.
      cmp #$50      ;If $50 or less, read again
      bcc -
      lda #$08
      sta $2E         ;Counter for 8 bits
-:      jsr k_Count_Transitions ;How many transitions in a span (1/2400th sec?)
      cpy #$04
      bcs +                   ;If more than 3 transitions... QUIT!  (Bad transmission)
      cpy #$02                ;Carry set if >=2, cleared if 0 or 1
      rol $17                 ;Carry rolled into ZP
      tya
      lsr a                   ;If odd number of transitions, even it out
      bcs ++
      jsr k_Wait_Transition   ;Skip 1 pulse
++:      jsr k_Wait_Transition
      dec $2E
      bne -
      lda $2D
      clc
+:      rts
;-------------------------------------------------

;-------------------------------------------------
$80FF:    ;Reads in Joystick 1 with NMIs off, stores in $20 and A
;-------------------------------------------------
$810B:   ;Reads in Joystick 1, stores in $20 and A
;-------------------------------------------------
$8111:   ;Read Joystick
;-------------------------------------------------
$8129:   ;Reads in Joystick 2 with NMIs off, stores in $20 and A
;-------------------------------------------------
$8135:   ;Reads in Joystick 2, stores in $20 and A
;-------------------------------------------------
$813B:   ;Read Joystick 2
;-------------------------------------------------
$8158:   ;NMIs OFF: clears $2000.7
;-------------------------------------------------
$815E:   ;NMIs_on: sets $2000.7
;-------------------------------------------------
$8164:   ;Screen_off: clears $2000
;-------------------------------------------------
$816A:   ;Wait VBlank start, turn on screen
;-------------------------------------------------
$8175:   ;Bankswitch CHR.
;-------------------------------------------------
Start_KB_or_Tape_Send:   ;$8180: Starts Xmission to keyboard or tape
      bit $1F
      bpl +
      jmp k_Send_Leader
+:      jsr Keyb_Next_Row
      lda #$00
      sta $17
      jsr Keyb_Write_Data
      lda #$AA
      sta $17
      jsr Keyb_Write_Data
      lda #$55
      sta $17
      jmp Keyb_Write_Data

;-------------------------------------------------
Start_KB_or_Tape_Recv:   ;$819F: Starts Xmission from keyboard or tape
      bit $1F
      bpl +
      jmp k_Wait_for_Leader
+:       jsr Keyb_Next_Row
      jsr Keyb_Read_Data
      jsr Keyb_Read_Data
      lda $17
      cmp #$AA
      bne +
      jsr Keyb_Read_Data
      lda $17
      cmp #$55
      bne +
      clc
      rts
+:      sec
      rts

;-------------------------------------------------
Send_KB_or_Tape: ;$81C2: sends to KB or Tape depending on $1F.8
      sta $17
      stx $1A
      bit $1F
      bpl +
      jsr k_Send_Byte
      jmp ++
+:      jsr Keyb_Write_Data
++:      ldx $1A
      rts
;-------------------------------------------------
Recv_KB_or_Tape: ;$81D6: Receives byte from KB or Tape depending on $1F.8
      stx $1A
      bit $1F
      bmi +
      jsr Keyb_Read_Data
      jmp ++
+:      jsr k_Recv_Byte
++:      ldx $1A
      lda $17
      rts
;-------------------------------------------------
Keyb_Write_Data: ;$81EA: Writes a byte to Keyboard serially (?)
      ldy #$07      ;8 loops
-:      asl $17         ;Feed byte stored in $17 out to Keyboard
      lda #$00
      rol a                 ;Bit 0 = Keyboard row reset
      ora #$06              ;Enable keyboard
      sta $4016             ;Joystick 1 + strobe
      and #$03              ;Disable keyboard matrix
      sta $4016             ;Joystick 1 + strobe
      dey
      bpl -
      rts
;-------------------------------------------------
Keyb_Read_Data:   ;$81FF: Reads only column 2 (???) of the Family BASIC keyboard?
      ldy #$07      ;Loop 8 times
-:      lda $4017             ;Joystick 2 + strobe
      lsr a
      lsr a
      and #$01      ;Isolate Keyboard column 2??
      ora #$06              ;Enable keyboard matrix (usually resets it)
      sta $4016             ;Joystick 1 + strobe
      and #$03              ;Disable keyboard matrix
      sta $4016             ;Joystick 1 + strobe
      lsr a
      rol $17               ;Store column 2 data in $17.
      dey
      bpl -
      clc
      rts
;-------------------------------------------------
Keyb_Next_Row:   ;$821A: Increases Keyboard Row
      lda #$00              ;This should increment row
      sta $4016             ;Joystick 1 + strobe
      lda #$02
      sta $4016             ;Joystick 1 + strobe
      rts
;-------------------------------------------------

Re: FDS Writing extension for TapeDump
by on (#111232)
Okay, I've got KCS file receiving/disk writing working pretty well now, so I'll release a Beta version:

http://www.chrismcovell.com/data/TapeDu ... r_Beta.zip

Image

Be sure to read the included Quick readme.

This KCS writer will receive FDS disk header files and file header+data files at 1200 baud over the Fami's microphone. I've set up some scripts and included DOS/Win programs and batch files to automate FDS -> WAV conversion.

Let me know if you get it working! Different PC+Fami combinations will yield better or worse results through the microphone, and I've discovered that the circuits (and volume/detection levels) are different for the microphones inside of my two Famicom systems: a Sharp Twin Famicom and a Sharp Famicom Titler. The Titler receives audio files loud and clear if you connect the audio out from your PC to GND and the mic's red wire inside the controller; however, the Twin Famicom is rather hard-of-hearing. I discovered that bridging a resistor inside the Twin Fami system boosts its microphone detection to within "normal" parameters (hysteresis is still evident meaning the duty cycle will appear narrower through the Mic test program.) If anybody wants more info about the Twin Fami fix, ask me and I'll post a pic.

also...

Did anybody try out the Parport DTVTrans writing with a cable yet? Let me know. I've also made a bootstrap (DTVTrans protocol) receiving program that can be run without need for a devcart at all. (All that is needed is Wrecking Crew, a single Game Genie code, and some time.)
Re: FDS Writing extension for TapeDump
by on (#111607)
.... .. . . . @ * *... . ... ... .

tumbleweeds ^^^


So, nobody has tried this out or got it working? Interest is at 0%? :(
Re: FDS Writing extension for TapeDump
by on (#111639)
Not a large population of people on here with FDS and flash carts I'd imagine.
Re: FDS Writing extension for TapeDump
by on (#111643)
I am interested, but I don't have any free time and won't have any until june.

That being said, thank you very much for using something else than a parallel port !

Is there a way to make the microphone work on an AV Famicom ? Because I don't have the original famicom currently.
Re: FDS Writing extension for TapeDump
by on (#111644)
ccovell wrote:
So, nobody has tried this out or got it working? Interest is at 0%? :(


I think many people interest in it. But they don't know how to build (soldering work), or don't have cable to make it.
I want to ask, I only need DTVTrans cable to the Famicom expansion port is enough to dump FDS ?
Look like it transfer data not use sound format.

About KCS, I need a Famicom keyboard ?
Re: FDS Writing extension for TapeDump
by on (#111645)
Tomy: For reading cartridges & FDS disks to your PC, you only need to record the FC's audio output. (Read the instructions on-line.)

For writing FDS disks, I've programmed 2 ways: KCS needs no soldering at all: just hook up your PC's sound output to the Famicom's microphone; a direct electrical connection is probably better. PAR uses the DTVtrans cable (you'll need soldering/cable construction) and is much faster and more reliable, of course.

I haven't written any in-depth instructions yet because I wanted to know if NESDevers could get it working reliably.
Re: FDS Writing extension for TapeDump
by on (#111813)
I think it's pretty cool but I don't own a Famicom or Famicom Disk System. If I did I'd be interested.
Re: FDS Writing extension for TapeDump
by on (#113585)
Okay, so has anybody tested out either method of disk writing from my program? I'm going to change the wiring diagram a bit for the PARport writing, just due to conflicts with other Famicom expansion hardware like external controllers. I'll also make a suggested wiring diagram for NES units (as I don't have an NES myself...)
Re: FDS Writing extension for TapeDump
by on (#113673)
I have an AV modded red&white Famicom and a Disk System with the original 7201 board (so no write protection). But I have no way to run custom code on it (except for Family Basic). I'm planning to get an everdrive sometime soon though. I don't have Wrecking Crew but I have Family Basic, Mach Rider and Lode Runner. Edit: I now have Wrecking Crew as well.

Maybe you should try advertise this on Famicom World forum (great mods and members there!) or some place with many Famicom owners. Even on Famicom World there aren't that many Disk System owners, but probably more than here.
Re: FDS Writing extension for TapeDump
by on (#113689)
I'll post on other boards only when this program is up and running at/near completion. For now, it's a definite work-in-progress. Family Basic might be a way to get code running on the Famicom, but does it support USR or EXEC commands to jump to machine code programs? (Or at least POKE & PEEK?)
Re: FDS Writing extension for TapeDump
by on (#113702)
Ok now that I have free time again (whew) I'd definitely want to try TapeDump and this FDS writing extension.

However apparently, there is at least one of 2 possible inputs that are necessary :
1) Extension controller input
2) Microphone intput on controller #2

Both requires the original Famicom and are not available on the AV Famicom I own. It's too bad becuase I bought an AV model because I was told that controller cords were too short on the original...

So looks like as a first step I'd have to start bidding on an original Famicom. Thankfully they are common and cheap. If I get one, I'll own all the 4 major models of the NES console (Famicom, Frontloader NES, AV Famicom, Toploader NES) which is a nice thing to own for a long time NES-dever :beer: :D
Re: FDS Writing extension for TapeDump
by on (#113705)
Bregalad wrote:
Both requires the original Famicom and are not available on the AV Famicom I own.


Hmm... did you do some untoward hacking to your AV Famicom? It does have the Expansion connector just like most other Famicom models.
Re: FDS Writing extension for TapeDump
by on (#113716)
Bregalad wrote:
Ok now that I have free time again (whew) I'd definitely want to try TapeDump and this FDS writing extension.

However apparently, there is at least one of 2 possible inputs that are necessary :
1) Extension controller input
2) Microphone intput on controller #2

Both requires the original Famicom and are not available on the AV Famicom I own. It's too bad becuase I bought an AV model because I was told that controller cords were too short on the original...

So looks like as a first step I'd have to start bidding on an original Famicom. Thankfully they are common and cheap. If I get one, I'll own all the 4 major models of the NES console (Famicom, Frontloader NES, AV Famicom, Toploader NES) which is a nice thing to own for a long time NES-dever :beer: :D


The Famicom has short cords because it is from the era of the console being far from the TV with long wires, while the console is very near the player. The SFC continued this in Japan, while the NES started the long-controller-cords trend in the US for Nintendo.
Re: FDS Writing extension for TapeDump
by on (#113738)
Quote:
It does have the Expansion connector just like most other Famicom models.

Yeah, you're right. I missed it because it is well hidden :mrgreen:

So I'll have to give a try to this parallel port solution, but I know the failure probability is very high but it doesn't cost much to try.

Quote:
The Famicom has short cords because it is from the era of the console being far from the TV with long wires, while the console is very near the player.

Sounds very impractical to me. You don't want a console to be there in the middle of the room permanently, nor you want the A/V and power supply cords to be in the way. Also it does not sound very practical to fold and unfold the console every single time you want to use it.
Re: FDS Writing extension for TapeDump
by on (#115299)
ccovell wrote:
I'll post on other boards only when this program is up and running at/near completion. For now, it's a definite work-in-progress. Family Basic might be a way to get code running on the Famicom, but does it support USR or EXEC commands to jump to machine code programs? (Or at least POKE & PEEK?)

Yes it's not called USR but there's the CALL command which you can use to call 6502 subroutines and you can POKE and PEEK any address as far as I know. I'm planning to get an Everdrive sometime soon though. I just came back from a trip to Japan and I picked up Wrecking Crew there.

mikejmoffitt wrote:
Bregalad wrote:
Ok now that I have free time again (whew) I'd definitely want to try TapeDump and this FDS writing extension.

However apparently, there is at least one of 2 possible inputs that are necessary :
1) Extension controller input
2) Microphone intput on controller #2

Both requires the original Famicom and are not available on the AV Famicom I own. It's too bad becuase I bought an AV model because I was told that controller cords were too short on the original...

So looks like as a first step I'd have to start bidding on an original Famicom. Thankfully they are common and cheap. If I get one, I'll own all the 4 major models of the NES console (Famicom, Frontloader NES, AV Famicom, Toploader NES) which is a nice thing to own for a long time NES-dever :beer: :D


The Famicom has short cords because it is from the era of the console being far from the TV with long wires, while the console is very near the player. The SFC continued this in Japan, while the NES started the long-controller-cords trend in the US for Nintendo.

The lack of the microphone on the AV Famicom is exactly the reason I prefer the Red & White Famicom. The only problem with it is that you might need to AV mod it, and the fact that it might not be possible to use Controller II START or SELECT (which is required in non-Japanese Battletoads and R.C. Pro Am II). I never understood why short controller cords are a problem though. If you don't want to sit so close to the TV, just extend the video/power cables. Sitting close to the Famicom is not a problem, actually it just makes it easier to reach the reset button or to change games. And if you have an FDS it's easy to change disk sides.

Consoles before the Famicom usually had two joysticks with extremely short hard-wired cables or even the buttons on the console itself so the Famicom kind of continued with that trend. I think the NES and SNES got long controller cords because (adult) westerners tend to want to sit in the sofa while the Japanese have no problem sitting on the floor.
Re: FDS Writing extension for TapeDump
by on (#115347)
They wanted the NES to feel more like part of your entertainment setup, right alongside the VCR, which by then was using simple remote controls. In order to fit in, it had to work at this distance, hence the long cords.

The Famicom, and most consoles before it, featured long power and RF cables, and the console would (as you mentioned) sit near the players. I often hear people complaining about this feature of the Famicom, and while it's a little annoying when today we expect long cables, it doesn't deserve the criticism from a design perspective as it made sense back then.

The Super Famicom continued this trend though, which is pretty annoying. Fortunately, swapping PCBs / Cables with an American controller is easy.

I feel obliged to pitch in whenever this topic comes up

brain fart, I already said everything I just said a few posts up. Moving along...
Double brain fart, I'll leave it since it clarifies the difference

For anyone doing testing, I have an extremely ugly but very well-working Famicom. It's AV modded, and the microphone does work, though the cable is a little worn so sometimes moving the player 2 controller around a bit makes clicking noises. I'm going to see if this will be an easy fix or not. I'd let it go for less than the running price of a Famicom in its condition, so if anyone wants it for research I'd be happy to let it go cheap (I have a few consoles right now).
Re: FDS Writing extension for TapeDump
by on (#115375)
If anybody has an old-model Famicom (not AV or Twin, etc.) as well as a waveform generator, could they test the Mic's cutoff frequency (by attaching 2 wires from the generator to the mic's pins?

(You can use either the TapeDump with KCS input and watch the KCS timing numbers at the bottom, or use the waveform test ROM here: http://www.chrismcovell.com/data/Waveform_Check.zip and increase the frequency of a square wave at various voltages until the square wave breaks up (or the KCS timing readout becomes "unstable".))

I did testing on my 2 Famicom units (Twin Fami and Fami Titler) and the frequency responses of each are vastly different. I also discovered that the frequency response of the mic itself and the capacitor inside of the controller have very little impact on waveform detection, rather, there is strong lowpass filtering on the mic line which is internal to the Famicom, and can be bypassed with a wire bridge.

This is all part of my experiments with getting higher audio transfer speeds out of the Famicom for KCS uploading. With a bypassed Twin Famicom, 5200 bps is quite reliable:
Image

As you can see from the chart, the unmodified Twin Famicom can barely receive 1200 bps, unless you use an amplifier to boost the waveform above ~2 volts. (The average output from a PC line-out is 0.8-1.5v, according to various webpages on the subject.)
Re: FDS Writing extension for TapeDump
by on (#116432)
This is getting a fair amount of testing over here: http://bakutendo.blog87.fc2.com/blog-entry-268.html
Re: FDS Writing extension for TapeDump
by on (#120628)
I had a few problems in the beginning, writing FDS disks with this. The problem is a resistor labelled R8 of the value 10k inside the Famicom (Red/White shell, the original). The board is HVC-CPU-GPM-02. Replace it with a wire (no resistance) and TapeDump will be writing disks in no time. I also added an RCA jack to my controller, to keep from having a permanent wire attached to it. Possibly if I ever wanted to use the mic again, I could plug a professional mic in...
Re: FDS Writing extension for TapeDump
by on (#120725)
That resistor R8 was cutting out the higher frequencies from the microphone line, right? It has no connection with the success of disk writing itself, it should be pointed out.
Re: FDS Writing extension for TapeDump
by on (#120804)
Yes, something like that. The leader tone was reporting a 14 with TapeDump. When we get into the data it goes in the 20's and 30's. After removal of the resistor and adding a wire, TapeDump was able to gather the data thru the microphone successfully.
Re: FDS Writing extension for TapeDump
by on (#139333)
I just want to thank Chris for this excellent piece of software. It saved my copy of Legend of Zelda (by rewriting it) that had gone corrupt somehow. Sure, KCS wasn't the easiest thing in the world to get working but in my case it was worth the trouble. Saving games from the trash can is saving history!

Thanks again. :)
Re: FDS Writing extension for TapeDump
by on (#139382)
Great!

When I slow down my random PCE and SMS programming, I might get back to TapeDump for a bit.
Re: FDS Writing extension for TapeDump
by on (#140657)
So I have an FDS de-protected FDS set up on the way, but I have an AV Famicom with an N8 Everdrive. I plan on making a parallel cable to overwrite my FDS games with their English translated counter parts. I seem to be missing a step, am I supposed to load the FDS tapedump via the Everdrive then hotswap the Ram adapter and FDS drive in order to write to the FDS disk?
Re: FDS Writing extension for TapeDump
by on (#140677)
Yes, hot-swapping is the idea if you only have a PowerPak/Everdrive cartridge at first. However, the first FDS disk you can write to should be the included TapeDump.fds, and from then on, you can load TapeDump straight from FDS without the need for hotswapping.
Re: FDS Writing extension for TapeDump
by on (#143188)
I finally got everything together to make and test my DTVTrans cable and it works! Thank you so much for writing this awesome piece of software. I was able to recover my Kid Icarus side B that kept giving me an "Error 22" message, it now works beautifully. I've also overwritten my Esper Dream FDS game with the English translation and will be playing that and a few other games soon.

I had to use Bat54 diodes, the cable would not work without them. I tried a couple other diodes I had laying around, but they did not work either.
Re: FDS Writing extension for TapeDump
by on (#143190)
I'm glad to hear it worked. One word of warning: if overwriting one side of a game, make sure you use the same version # as your original. Eg: Metroid has several versions, and each of them checks both the game name and version number before running / saving, etc.
Re: FDS Writing extension for TapeDump
by on (#143233)
I'll make sure to rewrite both sides just to be sure, thanks again.
Re: FDS Writing extension for TapeDump
by on (#143263)
Will you be adding dumping of FDS disks with the parallel port cable?
Re: FDS Writing extension for TapeDump
by on (#143329)
It wasn't a plan right now, since the DTV -> PC routines need more data lines... I may add faster / other protocols in the future.
Re: FDS Writing extension for TapeDump
by on (#143375)
ccovell wrote:
It wasn't a plan right now, since the DTV -> PC routines need more data lines... I may add faster / other protocols in the future.


I was just curious, I'm more than happy being able to write to my disks now.