Jump to content
IGNORED

the official Channel F thread!


Recommended Posts

Thanks! I found the .txt file after posting my comment actually, and I have been reading the veswiki since then (I find the actual details about the CPU quite interesting). I saw your name over there, quite an honor to have you answer my question :)

Quote

It's a black/white folder for a very uncommon cart, it would be unwise to scan it and put it out there for anyone to churn out prints from... 

Pardon me if this is a stupid question, but why would it be unwise? Are people really going to churn prints from it? What for?

Wouldn't it be good to have it on archive.org (or the Facebook "Fairchild Channel F Fan Page") to make sure it is not lost from history?

Link to comment
Share on other sites

2 hours ago, TheFairChild said:

Pardon me if this is a stupid question, but why would it be unwise? Are people really going to churn prints from it? What for?

I made the text file, feel free to scan your #19 instructions and upload them, should you ever find one.

Link to comment
Share on other sites

Ah good old checkers, the game that probably broke the camels back and led me to full romcart and emulation 😂 the one that slipped away.

 

On an update, I didn't get quite as much done over the summer break as I planned. This was largely down to Shapez 2 coming out and me perhaps playing a little bit more than I care to admit.

 

What I do have mostly done is yet another game though, some nice person has been generously donating on itch and suggested another pc 50x port of Wipeout, which I did mostly do in two days. It has a simple breakout game with a 2 player Vs mode I still need to fix but all the "wipeout" variants were done pretty much straight away. So that'll be coming up on the horizon for anyone who got bored of hockey on the console chip.

Link to comment
Share on other sites

On 9/8/2024 at 9:44 AM, e5frog said:

It's a black/white folder for a very uncommon cart, it would be unwise to scan it and put it out there for anyone to churn out prints from... 

If you just need to read it:
https://channelf.se/gallery/txt/videocart19.txt

 

On 9/8/2024 at 10:47 AM, TheFairChild said:

Pardon me if this is a stupid question, but why would it be unwise? Are people really going to churn prints from it? What for?

Wouldn't it be good to have it on archive.org (or the Facebook "Fairchild Channel F Fan Page") to make sure it is not lost from history?

 

On 9/8/2024 at 1:48 PM, e5frog said:

I made the text file, feel free to scan your #19 instructions and upload them, should you ever find one.

 

@TheFairChild Maybe you missed the two points in the underlying concern.  I think the concern is that since it is a basic black/white folder then it could be easily replicated, and since it is for a very rare cart and an even rarer instruction manual, then those people may attempt to sell the replication as an original and ask for higher dollars for a knockoff that the unknowing people would purchase.

Link to comment
Share on other sites

21 minutes ago, fdr4prez said:

 Maybe you missed the two points in the underlying concern.  I think the concern is that since it is a basic black/white folder then it could be easily replicated, and since it is for a very rare cart and an even rarer instruction manual, then those people may attempt to sell the replication as an original and ask for higher dollars for a knockoff that the unknowing people would purchase.

Ah, I definitely missed that point, thanks for clarifying! I don't plan on owning the real stuff (either the Channel F or the actual carts). I personally use it on my recalbox, and for the other carts I do enjoy seeing the "old" scans (instead of a simple txt file). I just did some research and saw that the original videocart-19 is going for crazy amounts, so I understand the concern.

 

Maybe one way would be for someone to scan it, and put a "watermark" before uploading it, so that it is clear that it is not an original.

Anyway, I've made my peace with it, no big deal. My obsessive-compulsive disorder that tells me I miss one manual will just have to shut up :)

On unrelated news, I have been reading the "F8_Guide_to_Programming.pdf", all pages on the veswiki, some source code of homebrew games available there. I also setup a dasm/mame dev env, and after some painful hit&miss, I've managed to plot a pixel going left to right (by using the plot function from veswiki)! 

 

    processor f8

    org	$0800

    LR   $5,A         	; 0800 55
    NOP

    LI	$40
    LR  1,A
    LI  20
    LR  3,A 
    LI  0
    
loop:   
    LI $C0
    LR 1,A
    PI plot

    LR $40
    LR 1,A

    LR A,2
    INC
    LR 2,A
    PI  plot

    JMP loop

	org $fff
	.byte $ff

 

Yes, this is some awful code, and I kinda rely on the accumulator overflowing (and some bad things happening when trying to plot with coordinates outside of the screen I guess), but oh god how it makes you realize how hard it was to make complex things back then. I feel in awe when looking at code from pacman and stuffs like that.

 

And when I see some guys here are making actual carts... You guys rock.

Link to comment
Share on other sites

It feels like I am missing something, there are a few things that I don't understand the "why" :

- the padding at the end (org $fff and .byte $ff) : why is it needed?  Is it documented somewhere? 

- the available bios calls, how did you know them? Reverse engineering, or is there a document I am missing?  Couldn't find them in the f8 programming guide, so maybe there is another official source of info? 

Link to comment
Share on other sites

1 hour ago, TheFairChild said:

It feels like I am missing something, there are a few things that I don't understand the "why" :

- the padding at the end (org $fff and .byte $ff) : why is it needed?  Is it documented somewhere? 

- the available bios calls, how did you know them? Reverse engineering, or is there a document I am missing?  Couldn't find them in the f8 programming guide, so maybe there is another official source of info? 

Don't think it's necessary. Some of us do a "signature" at the end but it's not needed. I have a basic one pixel movement code I can share if that helps when I get home again, it has the basics of what you've done (plotting a pixel on the screen) with removing it once moved and the code to use controller buttons.

 

Regarding bios calls, I think there is a separate file very similar to the 2600 that defines some things, which you can include. A few others like the "clear screen" command is done by calling a specific address and it does the job of wiping the screen for you (not particularly fast but fastest if you want to remove everything completely).

Link to comment
Share on other sites

2 hours ago, TheFairChild said:

It feels like I am missing something, there are a few things that I don't understand the "why" :

- the padding at the end (org $fff and .byte $ff) : why is it needed?  Is it documented somewhere? 

- the available bios calls, how did you know them? Reverse engineering, or is there a document I am missing?  Couldn't find them in the f8 programming guide, so maybe there is another official source of info? 

Padding is/was for some emulation and other things wanted files at even KB boundaries. 

 

They have been reverse engineered, F8 Programming Guide is just about the F8 processor system in general, not for the specific built-in programs in the Channel F nor how the hardware is hooked up.
Sean Riddle made some work on "BIOS" here: https://channelf.se/veswiki/index.php?title=Disassembly:Bios
Alex West have made a huge contribution here: https://channelf.se/veswiki/index.php?title=Disassembly:Videocart_16
I did some work on Hangman: https://channelf.se/veswiki/index.php?title=Disassembly:Videocart_18
(I was going to patch port RAM to plain SRAM but got lost - with translation to Swedish.   :)

  • Thanks 1
Link to comment
Share on other sites

On 9/10/2024 at 10:18 AM, e5frog said:

They have been reverse engineered, F8 Programming Guide is just about the F8 processor system in general, not for the specific built-in programs in the Channel F nor how the hardware is hooked up.

Amazing. I've been reading the bios annotations, and had a look at the videocart disassemblies. The most interesting was being able to look at the pacman source, after a few days, I think I kinda understand how it works :)

I used a bit of everything to do a simple code, when I can draw a pixel, change its color (by cycling through green/red/blue/bkg), and move it around (and check that it doesn't go outside of bounds).

 

;
; Control a pixel, while being able to:
; - change its color
; - change its position
; - make it permanent
; Thanks to the trove of information available at https://channelf.se/veswiki
; for making it possible.

    processor f8

	include "ves.h"

; Constants
START_X		= 51
START_Y 	= 29
COLOR_BACKGROUND = $c0
COLOR_GREEN = $00
COLOR_RED 	= $40


; Registers used
PIXEL_X		= 30
PIXEL_Y		= 31
PIXEL_COLOR = 32

    org	$0800

cartridge.start:
	CARTRIDGE_START
cartridge.init:
	CARTRIDGE_INIT

main:
	; clear screen, colored background
	li	$c0		; $d6 gray - $c0 green - $21 b/w - $93 blue
	lr	3, A
	pi	BIOS_CLEAR_SCREEN


program.init:
 
	; init pixel (x, y) to middle of the screen
	SETISAR PIXEL_X
	li START_X
	lr S, A

	SETISAR PIXEL_Y
	li START_Y
	lr S, A	

	SETISAR PIXEL_COLOR
	li COLOR_BACKGROUND
	lr S, A

program.loop:
	; draw the pixel (make it blink)
	li COLOR_RED
	lr 1, A

	SETISAR PIXEL_X
	lr A, S
	lr 2, A
	SETISAR PIXEL_Y
	lr A, S
	lr 3, A
	pi plot

	li $12
	lr 5, A
	pi BIOS_DELAY

	SETISAR PIXEL_COLOR
	lr A, S
	lr 1, A
	pi plot

	li $12
	lr 5, A
	pi BIOS_DELAY

program.loop.readController:
	clr
	outs 0			; enable input from controllers (related to bit6 of port0?)
	outs 1			; clear port1 (right controller	)
	ins  1			; read right controller first (requires half the CPU cycles than reading left controller on port 4 
	com				; invert bits, so that 1 means button pressed
	ni %10001111	; mask out twists and pullup
	bnz program.loop.readController.endRead	; if button pressed, no need to read other controller	
	outs 4			; clear port4 (left controller)
	ins  4			; read left controller
	com				; invert bits, so that 1 means button pressed
	ni %10001111	; mask out twists and pullup
	bz program.loop	; no input, continue loop

program.loop.readController.endRead:
	; button pressed
	ni %00001111
	bz program.loop.handleInput.changeColor
	; up direction
	ni %00000111
	bz program.loop.handleInput.up
	; down direction
	ni %00000011
	bz program.loop.handleInput.down
	; left direction
	ni %00000001
	bz program.loop.handleInput.left
	; right direction (only one left, and we know something was pressed)
	jmp program.loop.handleInput.right

program.loop.handleInput.changeColor:
	SETISAR PIXEL_COLOR
	lr A, S
	ci COLOR_BACKGROUND	; color_background is 192, the other colors are 0, 64, 128; loop back to 0 if we are at 192
	bz program.loop.handleInput.changeColor.reset
	ai 64
	lr S, A
	jmp program.loop.handleInput.changeColor.end
program.loop.handleInput.changeColor.reset:
	li 0
	lr S, A
	jmp program.loop.handleInput.end
program.loop.handleInput.changeColor.end:
	li $64
	lr 5, A
	pi BIOS_DELAY
	jmp program.loop.handleInput.end


program.loop.handleInput.up:
	SETISAR PIXEL_Y
	ds S
	jmp program.loop.handleInput.checkBounds

program.loop.handleInput.down:
	SETISAR PIXEL_Y
	lr A, S
	inc
	lr S, A
	jmp program.loop.handleInput.checkBounds

program.loop.handleInput.left:
	SETISAR PIXEL_X
	ds S
	jmp program.loop.handleInput.checkBounds

program.loop.handleInput.right:
	SETISAR PIXEL_X
	lr A, S
	inc
	lr S, A
	jmp program.loop.handleInput.checkBounds

program.loop.handleInput.checkBounds:
	SETISAR PIXEL_X
	lr A, S
	ci 255
	bz program.loop.handleInput.checkBounds.xyMin
	ci 102
	bz program.loop.handleInput.checkBounds.xMax
	SETISAR PIXEL_Y
	lr A, S
	ci 255
	bz program.loop.handleInput.checkBounds.xyMin
	ci 58
	bz program.loop.handleInput.checkBounds.yMax
	jmp program.loop.handleInput.checkBounds.end

program.loop.handleInput.checkBounds.xyMin:
	li 0
	lr S, A
	jmp program.loop.handleInput.checkBounds.end
program.loop.handleInput.checkBounds.xMax:
	li 101
	lr S, A
	jmp program.loop.handleInput.checkBounds.end
program.loop.handleInput.checkBounds.yMax:
	li 57
	lr S, A
	jmp program.loop.handleInput.checkBounds.end

program.loop.handleInput.checkBounds.end
program.loop.handleInput.end:
	jmp program.loop

	
; Includes
	include "drawing.inc"

; Padding
	org $fff
	.byte $ff

I used the ves.h, and the my drawing.inc basically contains the plot function from veswiki.

 

I am really curious about how it was back then: do you think the coders at the time had access to internal Channel F documentation? For instance, I understand that for us, we know that to clear the screen to a specific value, someone had to reverse engineer the values "$d6 gray - $c0 green - $21 b/w - $93 blue". But back then, how did they know that?

  • Like 1
Link to comment
Share on other sites

I'm sure they had some documentation. Brad Reid was going to check some boxes for documents a few years back but I haven't heard back from him again... guy must be around 70 or more.

If looking through code you'll find the options used, more combinations of numbers is possible. They knew back then because it's hard wired... it was meant to be that way.  ;)

There's only 255 other combinations than the startup color to try in the clearscreen routine - could always be tested...

Fun to see you code!

  • Thanks 1
Link to comment
Share on other sites

10 hours ago, e5frog said:

There's only 255 other combinations than the startup color to try in the clearscreen routine - could always be tested...

I actually ended up writing some code to do exactly that => loop through the 255 values, and see what could be used. Turns out there are not only plain screen colors, but also some fun patterns (lines of different kinds)!

Link to comment
Share on other sites

1 hour ago, TheFairChild said:

I actually ended up writing some code to do exactly that => loop through the 255 values, and see what could be used. Turns out there are not only plain screen colors, but also some fun patterns (lines of different kinds)!

We need a youtube video - an displayed numbers.  ;)

Link to comment
Share on other sites

On 9/12/2024 at 10:19 PM, TheFairChild said:

Amazing. I've been reading the bios annotations, and had a look at the videocart disassemblies. The most interesting was being able to look at the pacman source, after a few days, I think I kinda understand how it works :)

I used a bit of everything to do a simple code, when I can draw a pixel, change its color (by cycling through green/red/blue/bkg), and move it around (and check that it doesn't go outside of bounds).

 

snip

I used the ves.h, and the my drawing.inc basically contains the plot function from veswiki.

 

I am really curious about how it was back then: do you think the coders at the time had access to internal Channel F documentation? For instance, I understand that for us, we know that to clear the screen to a specific value, someone had to reverse engineer the values "$d6 gray - $c0 green - $21 b/w - $93 blue". But back then, how did they know that?

Congratulations, you got a lot further than I did in a lot quicker time! if you build up to making full games please make sure you share it with everyone. I've found that itch.io is useful for a releasing platform and some people will find you there - RetroAchievements site also seems to really bulge the number of people who plays games, when I first found them playing homebrew I was surprised that many people were playing games on the system even emulated!

 

I mentioned I would upload something regarding moving a pixel but you've already done that so great work, regarding the ending and padding, there is a way (at least if you are assembling in dasm) of sort of "doing it for you" in case you were needing to change the size of files if they got bigger. That way you can change the variable at the top of your code (I usually only go as far as 4 kb but love to cut it down to 1 or 2 kb when possible). I totally nicked this off of other people doing homebrew so its not unique to me.

 

... (usually leave this near the top)

game_size = 4 ; kilobyte size

.... (game code)

	org [$800 + [game_size * $400] - $16]

signature:
	.byte	"·Michael·WR· 2024"

 

In regards to my own homebrew, got round to finishing Super Wipeout, its kind of small on the screen, sorry, I was matching the relative size of the original game but I could totally do a bigger version in the future that takes more advantage of the size.

All details, settings, etc, available at: https://mikebloke.itch.io/super-wipeout-channel-f

  • Like 1
Link to comment
Share on other sites

Just got a kinda working version of Reversi out:
 image.thumb.png.0821eb884b20234ab780b41bb739f7e8.png

 

The code is available on github for anyone interested. It’s not the prettiest, but I’ve learned a lot along the way. There's definitely plenty of room for improvement (and I mean a lot).

I will continue to update/clean when I have time, there are still things that really bother me there :)

 

The 1970s and 1980s were definitely an exciting time to experience.
 
The F8 Programming Guide is a nice documentation, but the amount of reverse-engineering available on the VES Wiki is truly amazing. Thanks for that.
  • Like 3
Link to comment
Share on other sites

Looks really nice, love how the board is drawn up.

 

Don't understand why it says "SKIP" and then I can't do anything else but skip - and loose. 

If I make the upper right red chip green in any of the two ways possible I get the SKIP-message. 

If I make the lower red chip green game continues as usual. There's also a draw when no draw is needed.

 

There are SKIP appearing all the time even if trying to play as "fair" as possible. 


Just tried the "master" release, the WIP doesn't compile.
It could be a really nice game though. 
 

 


 

Link to comment
Share on other sites

Oops, my bad, I had a debug JMP in the master branch, that I was using to test draw/skip conditions (artificially making them necessary, so that I didn't have to play a whole game).
I just pushed the master branch again without that JMP, so that it should be possible to play a real game now. Although it only supports player vs player for now, not player vs computer.

 

The wip branch is just an attempt at re-organizing the code, I have a few ideas there but it ain't stable/compilable yet.

Link to comment
Share on other sites

8 hours ago, e5frog said:

Nice to see them out in the wild?

Did they have fantasy prices for the loose carts as well?

Sorry, I didn't look at those prices. 

 

He also had a boxed console for $500, and the box was a bit rough. 

 

5 hours ago, Blazing Lazers said:

I hope that nobody would actually spend that sum on Checkers

I was there for both days and I am fairly sure he did not sell any of the Channel F items. 

Link to comment
Share on other sites

On 9/29/2024 at 12:10 PM, TheFairChild said:

Oops, my bad, I had a debug JMP in the master branch, that I was using to test draw/skip conditions (artificially making them necessary, so that I didn't have to play a whole game).
I just pushed the master branch again without that JMP, so that it should be possible to play a real game now. Although it only supports player vs player for now, not player vs computer.

@TheFairChild
Seems to work great, but the end screen disappears quickly, perhaps add a delay and/or detect that there's no controller indata (release) before restarting. 
 

    ; First wait for release
.waitRelease:
    clr
    outs    0
    outs    1
    ins    1
    com
    bnz    .waitRelease
    outs    4
    ins    4
    com
    bnz    .waitRelease




Very nicely done, impressive coding - still love the drawing of the playfield. 
 

Edited by e5frog
Added information.
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...