Releases on Tape!

Modding and Technical Issues

Moderator: Moderators

User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Releases on Tape!

Post by chysn »

With my next game, in progress now, I'm planning a physical release on tape. To some extent, the same problems will apply to this as applied to my cartridge release (coming in September): Where do I get the media? Where do I find cassette labels? The goal is to match the kind of production quality that was available in 1981. That's not a super high bar, as professional releases often involved ZipLoc sandwich bags; but I want people to feel like they're getting what they paid for, with some of what they're paying for being anachronism.

I've already purchased a second C2N so that I can test the product on a couple machines. But, tldr, I was wondering if anybody has experience doing this, especially with respect to reliable duplication. Can I just record with a C2N and test with the other C2N? Or is some kind of duplication process better?

Obviously, I expect volume to be low. I don't need a solution that scales well, so my gut feeling is "record from VIC-20 to tape, and test each tape on the other C2N."
VIC-20 Projects: wAx Assembler, TRBo: Turtle RescueBot, Helix Colony, Sub Med, Trolley Problem, Dungeon of Dance, ZEPTOPOLIS, MIDI KERNAL, The Archivist, Ed for Prophet-5

WIP: MIDIcast BASIC extension

he/him/his
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

Misfit let www.thefuturewas8bit.com take care of duplication and sale of his recent vic20/c64/c16 titles. I helped master a few of those to .tap files as source material. He does cartridges as well. If you don't specifically fancy doing all the work of duplication, contact him and see what can be done.
User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Releases on Tape!

Post by chysn »

tlr wrote: Fri Jul 31, 2020 12:48 pm Misfit let www.thefuturewas8bit.com take care of duplication and sale of his recent vic20/c64/c16 titles. I helped master a few of those to .tap files as source material. He does cartridges as well. If you don't specifically fancy doing all the work of duplication, contact him and see what can be done.
Thanks, I'll check that out!

I did get my cartridge cases and PCBs from TFW8B, so I'd have confidence in them. I just can't imagine selling enough of them that I'd need to farm it out.

What do you mean by "master to .tap files?"
Last edited by chysn on Tue Aug 04, 2020 11:27 am, edited 1 time in total.
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

chysn wrote: Fri Jul 31, 2020 12:55 pmWhat do you mean by "master to .tap files?"
Taking the game binary in it's original form and making it into a tape image, potentially with a custom loader. As an example, for Pentagorat it was done like this: youtube.
User avatar
Noizer
Vic 20 Devotee
Posts: 297
Joined: Tue May 15, 2018 12:00 pm
Location: Europa

Re: Releases on Tape!

Post by Noizer »

Hi chsyn, there was upon a time a guy working here at https://www.sintech-shop.de/ called Thomas Eberle or so. He had a tape copy station for a zx spectrum tape magazine and a huge knowledge about using it. Maybe you could try your luck at the Contact page
Valid rule today as earlier: 1 Byte = 8 Bits
-._/classes instead of masses\_.-
User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Releases on Tape!

Post by chysn »

tlr wrote: Fri Jul 31, 2020 1:04 pm for Pentagorat it was done like this: youtube.
That is so cool! I'm imagining that it starts with a load directly into the tape IRQ vector, maybe with a bit of code into the nearby $02a1 space... although that seems like it would crash, since the IRQ vector would come first. Definitely looking into that, though, although a custom loader is probably overkill for a 3.5K game.
Noizer wrote: Fri Jul 31, 2020 1:07 pm Hi chsyn, there was upon a time a guy working here at https://www.sintech-shop.de/ called Thomas Eberle or so. He had a tape copy station for a zx spectrum tape magazine and a huge knowledge about using it. Maybe you could try your luck at the Contact page
OK, thanks!
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

chysn wrote: Fri Jul 31, 2020 1:49 pm
tlr wrote: Fri Jul 31, 2020 1:04 pm for Pentagorat it was done like this: youtube.
That is so cool! I'm imagining that it starts with a load directly into the tape IRQ vector, maybe with a bit of code into the nearby $02a1 space... although that seems like it would crash, since the IRQ vector would come first. Definitely looking into that, though, although a custom loader is probably overkill for a 3.5K game.
Thanks! :)

In this implementation it autostarts using the CHROUT ($0326) vector and uses the tape buffer space ($033c-$03fc) for code. The advantage of using the tape buffer is that it always gets loaded up when searching a file so the only real file data to be loaded is the two bytes at $0326.

Doesn't it still take quite some time to load 3.5K using the kernal loading routines? Might not be a complete waste to use a fast loader, but perhaps not too much of a loading screen.
DarwinNE
Vic 20 Devotee
Posts: 231
Joined: Tue Sep 04, 2018 2:40 am
Website: http://davbucci.chez-alice.fr
Location: Grenoble - France

Re: Releases on Tape!

Post by DarwinNE »

tlr wrote: Fri Jul 31, 2020 2:00 pm Doesn't it still take quite some time to load 3.5K using the kernal loading routines?
I wrote two small games for the unexpanded VIC20 in the past, I prepared a cassette version for one of them (Alien Invasion, it was not put on sale, I gave them to some friends as gifts). I noticed it takes less than two minutes to load the game, including a small loader that can be skipped to further reduce loading times. I don't really think one needs a fastloader for a game for the unexpanded VIC.
User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Releases on Tape!

Post by chysn »

DarwinNE wrote: Fri Jul 31, 2020 5:04 pm
tlr wrote: Fri Jul 31, 2020 2:00 pm Doesn't it still take quite some time to load 3.5K using the kernal loading routines?
I wrote two small games for the unexpanded VIC20 in the past, I prepared a cassette version for one of them (Alien Invasion, it was not put on sale, I gave them to some friends as gifts). I noticed it takes less than two minutes to load the game, including a small loader that can be skipped to further reduce loading times. I don't really think one needs a fastloader for a game for the unexpanded VIC.
I was going to time it out this evening, but now I don't have to. Thanks!
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

DarwinNE wrote: Fri Jul 31, 2020 5:04 pmI wrote two small games for the unexpanded VIC20 in the past, I prepared a cassette version for one of them (Alien Invasion, it was not put on sale, I gave them to some friends as gifts). I noticed it takes less than two minutes to load the game, including a small loader that can be skipped to further reduce loading times. I don't really think one needs a fastloader for a game for the unexpanded VIC.
Assuming it takes ~2 min to load 3.5K using normal loading, I'm expecting 30-40 sec using a custom loader without pushing it too much. That may not be enough reason to do it, but it allows something happening during loading which is cool. 8) Another advantage is that you quite easily can make the autostart boot force the machine into unexpanded layout on machines with memory expansion avoiding problems for users.
DarwinNE
Vic 20 Devotee
Posts: 231
Joined: Tue Sep 04, 2018 2:40 am
Website: http://davbucci.chez-alice.fr
Location: Grenoble - France

Re: Releases on Tape!

Post by DarwinNE »

tlr wrote: Sat Aug 01, 2020 1:53 am but it allows something happening during loading which is cool.
Indeed! I would like to let it play some music, for example! :D
The auto configuration would be awesome, too.
User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Releases on Tape!

Post by chysn »

DarwinNE wrote: Sat Aug 01, 2020 2:01 am
tlr wrote: Sat Aug 01, 2020 1:53 am but it allows something happening during loading which is cool.
Indeed! I would like to let it play some music, for example! :D
The auto configuration would be awesome, too.
Yeah! My game's music player is a tiny thing that plays music with a curated shift register, and it can fit anywhere.

Does anyone know of any online source code examples of such loaders?
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

chysn wrote: Sat Aug 01, 2020 9:31 amDoes anyone know of any online source code examples of such loaders?
Online source I'm not sure about. I obviously have the source for my loader here but it's not entierly straight forward.
Here is a snippet from the core of it:

Code: Select all

STAGE2_LOAD_THRESHOLD	equ	$0180
STAGE2_PILOT_BYTE	equ	$fe
STAGE2_SYNC_BYTE	equ	$aa

part2_load:
	jmp	.load
part2_check:
	jmp	.check
part2_count:
	dc.b	0			;+0ftStage2BlockCount
part2_bcd:
	dc.b	$00,$00			;+0ftStage2BlockBcd
.check:
	clc
	bit	.state_zp
	bpl	.chk_ex1
	lda	.chk_zp
	bne	.error
	lda	.jmp_zp
	ora	.jmp_zp+1
	beq	.load
	sec
.chk_ex1:
	rts

.load:
	lda	#0
	sta	.state_zp
	cli
	rts

.error:
	lda	#ERROR_COLOR1
.er_lp1:
	sei
	eor	#ERROR_COLOR1^ERROR_COLOR2
	sta	$900f
	bne	.er_lp1

irq_server:
	lsr	$912d
	lda	#>STAGE2_LOAD_THRESHOLD		;+1ftStage2ThresholdH
	cmp	$9129		; $ff = expired (long bit, '0')
	sta	$9129
	rol	.shift_zp
	lda	.shift_zp
	ldx	.cnt_zp
	ldy	.state_zp
	beq	irq_sync_bitslip
	bmi	irq_ex1
	bcs	irq_sync_byte

irq_ex1:
	lda	#$05
	eor	$900f
	sta	$900f
	stx	.cnt_zp
	jmp	$eb18

irq_resync_bitslip:
; Y=0
	sty	.state_zp
irq_sync_bitslip:
; Y=0
	cmp	#STAGE2_PILOT_BYTE		;+1ftStage2PilotByte
	bne	irq_ex1
	beq	irq_nextstate	; always taken

irq_sync_byte:
	dey
	bne	irq_header
; Acc=byte, X=.cnt_zp, Y=0, C=1
	cmp	#STAGE2_PILOT_BYTE		;+1ftStage2PilotByte
	beq	irq_nextbyte
	cmp	#STAGE2_SYNC_BYTE		;+1ftStage2SyncByte
	bne	irq_resync_bitslip
	ldx	#$80+7-1   	; Will go into .cnt_zp upon exit
	sta	.chk_zp		; Will make .chk_zp $00 after passing exit.
	bne	irq_nextstate	; always taken

irq_header:
	dey
	bne	irq_file
; Acc=byte, X=.cnt_zp, Y=0, C=1
	sta	$ab-$80,x
	dex
	bmi	irq_nextbyte_chk

irq_nextstate:
	inc	.state_zp
irq_nextbyte_chk:
	lda	.shift_zp
	eor	.chk_zp
	sta	.chk_zp
irq_nextbyte:
; Y=0 (except after irq_chk)
	iny
	sty	.shift_zp
	bne	irq_ex1		; always taken

irq_file:
	dey
	bne	irq_chk
; Acc=byte, X=.cnt_zp, Y=0, C=1
	sta	($ac),y
	inc	$ac
	bne	irq_skp1
	inc	$ad

	sed
	dec	part2_count
;	sec
	lda	part2_bcd+1
	sbc	#1
	sta	part2_bcd+1
	lda	part2_bcd+0
	sbc	#0
	sta	part2_bcd+0
	lda	part2_count
	and	#%00000111
	ora	#LOAD_COLOR
	sta	$900f
	cld
irq_skp1:

	jsr	$fd11		;cmp $ac/$ad w $ae/$af
	bcc	irq_nextbyte_chk
; done
	bcs	irq_nextstate	; always taken

	dc.b	"*TLR*"

irq_chk:
; Y=1 (usually), C=1
;	sec
	ror	.state_zp
	bne	irq_nextbyte_chk ; always taken
Something like this is needed to set it up:

Code: Select all

	lda	#%11111100	; Motor on
	sta	$911c
	lda	#%01111111
	sta	$912e
	sta	$912d
	lda	#%10000010	; CA1
	sta	$912e
	lda	#<STAGE2_LOAD_THRESHOLD		;+1ftStage2ThresholdL
	sta	$9128

	lda	#>irq_server
	sta	$0315
	lda	#<irq_server
	sta	$0314
The .tap can be downloaded via the download link here: https://misfit.itch.io/pentagorat?download if you want to trace it in action.
User avatar
chysn
Vic 20 Scientist
Posts: 1205
Joined: Tue Oct 22, 2019 12:36 pm
Website: http://www.beigemaze.com
Location: Michigan, USA
Occupation: Software Dev Manager

Re: Releases on Tape!

Post by chysn »

Thanks! I don't think I'll tackle a custom loader with this particular release, but it's something I'll certainly play around with soon.

I made some positive strides toward getting materials over the last week. I found a good lot of new 15-minute cassette tapes, and a supplier for printable labels. Now I'm on the lookout for cases. Soft plastic cases are tempting, but then I can't do a fold-out insert, which I think is essential.
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
tlr
Vic 20 Nerd
Posts: 567
Joined: Mon Oct 04, 2004 10:53 am

Re: Releases on Tape!

Post by tlr »

chysn wrote: Mon Aug 03, 2020 3:48 pmThanks! I don't think I'll tackle a custom loader with this particular release, but it's something I'll certainly play around with soon.
Yw! Let me know if you want me to explain anything about the loader/tape-loaders in general. This particular one is created to .tap by a cross-tool similar to these: make_r-load and make_s-load but there's nothing preventing you from making a tool running natively.
Post Reply