Releases on Tape!
Moderator: Moderators
- 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!
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."
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
WIP: MIDIcast BASIC extension
he/him/his
Re: Releases on Tape!
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.
- 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!
Thanks, I'll check that out!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.
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.
Re: Releases on Tape!
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\_.-
-._/classes instead of masses\_.-
- 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!
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.
OK, thanks!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
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
Re: Releases on Tape!
Thanks!chysn wrote: ↑Fri Jul 31, 2020 1:49 pmThat 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.
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.
-
- 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!
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.
- 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!
I was going to time it out this evening, but now I don't have to. Thanks!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.
Last edited by chysn on Tue Aug 04, 2020 11:26 am, edited 1 time in total.
Re: Releases on Tape!
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. 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 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.
-
- Vic 20 Devotee
- Posts: 231
- Joined: Tue Sep 04, 2018 2:40 am
- Website: http://davbucci.chez-alice.fr
- Location: Grenoble - France
- 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!
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.
Re: Releases on Tape!
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
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
- 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!
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.
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.
Re: Releases on Tape!
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.