Jump to content
IGNORED

the official Channel F thread!


Recommended Posts

Hi folks!

 

I just made a Channel F binary called "Hello World!" and tested it with the online PICO-8/CH-F emulator

and it works but it is very slow. Can someone here can test it out on a real console to see if it works

and how slow/fast it displays, etc.. ?

 

I have a Channel F II console but no Multi-Cart or a cart with interchangeable EPROM (or even a Flash

cart). So anyone up to it ? Thanks in advanced! ?

 

- Sly -

hello-world.bin

Link to comment
Share on other sites

MAME/MESS does an excellent job, only differences are that it doesn't cause graphic errors if there's no delay in the plotting routine and the sound emulation isn't entirely accurate. 

Works perfectly for this kind of tests. 

 

@slydc

It's the slowest thing I have ever seen drawn on Channel F... 
Share the code and I'll tell you what's wrong.  ;-)

This code would generate the image in a second, with the graphics data added of course.  

Edited by e5frog
Link to comment
Share on other sites

WOW!!!

 

I am impressed!! You just took the BMP picture and displayed it in sssooo much less

time and it is also centered!

 

But all the data before the BMP picture was in fact an interpreter...a CHIP-8 interpreter

(or an Chip-8 emulator) which is done by Tobias V. Langhoff, which he calls it: Chip-F8.

You can get the ASM file with a single chip8 file here: https://github.com/tobiasvl/chip-f8

 

But seems that it's not finished as i have compiled the "Pong 1-player.ch8" game and it

displays but can't get to start the game or move the paddle. This would be so great to see

an "working" Chip-8 interpreter for the Channel F and this would enlarged the game library

by over 200 games...yes...200 Chip-8 Games! But not all can be adapted... :(

 

I have a repertory of almost all Chip-8 games, programs, demos (the "Hello World" is one of them

- see my attempt here on a RCA Studio II: https://www.youtube.com/watch?v=4pjBislnQm4 )

and also Super Chip-8, XO-Chip, etc) here: https://archive.org/details/chip-8-games

 

Maybe one day we could even see Super Chip-8 games on the Channel F as it can display 128x64

like the Super Chip-8 ? Mapping the 16 hex buttons of the RCA Cosmac VIP would be easy in a way

since the Channel F uses hand controller which acts like 2 joystick in one, meaning: Forward (Up),

Backward (Down), Left, Right, CW, CCW, Pull-Up and Push-Down. So 8 contacts (or buttons) and

8 more with the handle #2 so 8+8 = 16. We could connect a hex-pad to port #1 and #2 easily (

and would somehow like the unreleased Keyboard (K-1)).

 

Of course, that's all a thought as i'm no programmer (except BASIC & LUA) but some of you here

has already the know-how to program on the Channel F (and clones). Would this be a fun project to do ?

 

- Sly -

 

 

chip-f8 (Pong 1player).bin

Link to comment
Share on other sites

No, I took a screenshot, used the allblit-converter for the data and stuffed it with the blit routine available from my homepage (channelf.se).  ;-) 
So... it won't get a whole lot faster than that. 
Maybe stealing the bitmap from the bin would have been a faster way to make it...

Pretty cool to have a "Chip-8" (whatever that is) emulation/interpreter for the Channel F. 

This command mentioned on GitHub works on old versions of mess: "messd channelf -cartridge chip-f8.bin -w -effect sharp -r 640x480 -ka", not sure how much of those settings are still available. 

Currently the latest version is in MAME (not that much has happened to the emulation itself). There's a build called MESSUI that I prefer myself, they messed stuff up in the latest versions so I'm not too keen on the newest ones and my complaints about it may or may not be heard (I might have needed to be more diplomatic about it). 


Seems it could be fun to look into this, biggest Achilles heal for the Channel F is the slow graphics update, if adding a graphics buffer in RAM and having that written and read as will slow things even more (if it's not ever read it needs no buffer) so if those routines could be sped up it might improve things. Not sure how that could be done, using a second buffer to compare to and only plot the difference would be slow as well.  
Screenbuffer could be compared with a second buffer, keep a row and column counter, check for changes with XOR and plot a byte if there's a change in it. 

lm

xdc

xm

 - plot byte if needed

xdc

 - update row/column

 - repeat until all 256 bytes are done
 - Copy buffer 1 to buffer 2, unless updating inside the drawing routine



 

No, 128x64 is not available, there's that much VRAM you can write to, two columns are used to set the palette and only about 102x58 pixels are visible in MAME/MESS, a real setup may show more or less and have different centering. 

Yes a four button pad with a steering cross is a good option, on a Channel F II/Adman Grandstand/Luxor VEC/Normende, the earlier one(s) needs some modding as controllers are internally connected. 

 

Edited by e5frog
Link to comment
Share on other sites

I did some minor changes to speed it up a little - still terribly slow though - as expected when redrawing the whole screen every time. 


I haven't dived in to the code very deep it seems the capabilities of the F8 could be used a little better. 
The instruction for drawing (DXYN) could probably be faster. 

BTW, if skipping instruction 9XY* not ending with 0 the Hello World code seems to bug out - could be because of something else, not sure.
Not sure why no ball is coming in Pong but I noticed the random function is not implemented, it just outputs the NN value loaded in the instruction (as 6XNN function instead of CXNN).

There's no key check at all, so even if the ball was moving, movement wouldn't be possible. 
I wonder which controller directions will be best suited.

firstDigitE:
	lr a, 2
	xi $9e
	bnz .ex9e
	lr a, 2
	xi $a1
	bnz .exa1
	jmp fetchDecodeLoop
.ex9e:
	jmp fetchDecodeLoop
.exa1:
	lr dc, h
	lm
	lm
	lr h, dc
	jmp fetchDecodeLoop


 

Chip-8_ed.zip

Edited by e5frog
Link to comment
Share on other sites

On 8/22/2021 at 12:54 PM, e5frog said:

No, I took a screenshot, used the allblit-converter for the data and stuffed it with the blit routine available from my homepage (channelf.se).  ;-) 
So... it won't get a whole lot faster than that. 
Maybe stealing the bitmap from the bin would have been a faster way to make it...

 

## Ah! I was wondering how the heck you achieved that! Have to check that out...

 

Pretty cool to have a "Chip-8" (whatever that is) emulation/interpreter for the Channel F. 

 

## Well Chip-8 has came out in 1977 with the RCA Cosmac VIP, after it was adapted in 1990 for TI calculators and in the same time, Super

## Chip-8 was developed. And now, it has been adapted to so many game consoles. other OS, platforms, etc..(now even for the Channel F).


This command mentioned on GitHub works on old versions of mess: "messd channelf -cartridge chip-f8.bin -w -effect sharp -r 640x480 -ka", not sure how much of those settings are still available. 

Currently the latest version is in MAME (not that much has happened to the emulation itself). There's a build called MESSUI that I prefer myself, they messed stuff up in the latest versions so I'm not too keen on the newest ones and my complaints about it may or may not be heard (I might have needed to be more diplomatic about it). 

 

## I don't even use those commands, just downloaded the last version + the MESSUI and it works without problems. I think it's still a bad decision

## to put MESS and MAME together, i like when they were both separated (sigh!).


Seems it could be fun to look into this, biggest Achilles heal for the Channel F is the slow graphics update, if adding a graphics buffer in RAM and having that written and read as will slow things even more (if it's not ever read it needs no buffer) so if those routines could be sped up it might improve things. Not sure how that could be done, using a second buffer to compare to and only plot the difference would be slow as well.  
Screenbuffer could be compared with a second buffer, keep a row and column counter, check for changes with XOR and plot a byte if there's a change in it. 

lm

xdc

xm

 - plot byte if needed

xdc

 - update row/column

 - repeat until all 256 bytes are done
 - Copy buffer 1 to buffer 2, unless updating inside the drawing routine


## I know that Chip-8 is 512 bytes and it draws pixel by pixel (64x32) and the maximum it can goes is 4Kb. The best is to contact Tobias (the author

## of Chip-F8) has he done he's own interpreter for PC and a few games and demos. Also, you should take a look at this web page:

## https://multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/

 

 

On 8/22/2021 at 12:54 PM, e5frog said:

No, 128x64 is not available, there's that much VRAM you can write to, two columns are used to set the palette and only about 102x58 pixels are visible in MAME/MESS, a real setup may show more or less and have different centering. 

 

## No problem, only Chip-8 then!


Yes a four button pad with a steering cross is a good option, on a Channel F II/Adman Grandstand/Luxor VEC/Normende, the earlier one(s) needs some modding as controllers are internally connected. 

 

## Already thought of that to replace the hand controllers, something like a NES controller. ;)

 

 

Link to comment
Share on other sites

On 8/22/2021 at 6:30 PM, e5frog said:

I did some minor changes to speed it up a little - still terribly slow though - as expected when redrawing the whole screen every time. 


I haven't dived in to the code very deep it seems the capabilities of the F8 could be used a little better. 
The instruction for drawing (DXYN) could probably be faster. 

BTW, if skipping instruction 9XY* not ending with 0 the Hello World code seems to bug out - could be because of something else, not sure.
Not sure why no ball is coming in Pong but I noticed the random function is not implemented, it just outputs the NN value loaded in the instruction (as 6XNN function instead of CXNN).

There's no key check at all, so even if the ball was moving, movement wouldn't be possible. 
I wonder which controller directions will be best suited.


firstDigitE:
	lr a, 2
	xi $9e
	bnz .ex9e
	lr a, 2
	xi $a1
	bnz .exa1
	jmp fetchDecodeLoop
.ex9e:
	jmp fetchDecodeLoop
.exa1:
	lr dc, h
	lm
	lm
	lr h, dc
	jmp fetchDecodeLoop


Cool!! I knew that this interpreter could be something fun to add to a real Channel F, but all those codes is gibberish to me (sorry!)

And that's whit i thought, i tried anything to move a paddle (the other is controlled by the program) and nothing moves, not even

the ball as if it's waiting for a code (or button) to start.

 

I see that you tinkered with it, i'll check it out ASAP. Thanks very much! :)

 

 

On 8/22/2021 at 6:30 PM, e5frog said:

 

Link to comment
Share on other sites

Oh...almost forgot, many Chip-8 games uses the key #2 for UP, Key #4 for LEFT, Key #6 for RIGHT,

Key #8 for DOWN and Key #5 for FIRE/ACTION.

 

But for the Pong 1-player game, you control the left paddle with Key#1 (UP) and Key#4 (DOWN) and

the ball starts automatically.

 

Link to comment
Share on other sites

  • 2 weeks later...

Hi! Sorry for the very late come back.

 

I've tested both edition (ed3 & ed7) and boy that you were right. Speed

is awfully slow in the edition#3. Is it the same speed in MESS and on a real

Chanel F ?

 

As for edition #7, the hexpad 7 and D uses the same button (W) and is missing

the hexpad C & E (tried many keyboard buttons, couldn't find any assigned to).

 

If the speed is the same in MESS and on a real channel F then it was worth the try.

Link to comment
Share on other sites

I have gotten the speed up by drawing only the two bytes that changes after each row of sprite plot (as originally mentioned in the code). Have made some glitches as well that I need to work out to keep the speed up. 

Got Pong to play nicely. 

 

I have a table with the key mapping in the code, for custom setting. 

To have 16 buttons, both controllers are used once for each switch. Emulation will allow any setup you want (MESS tends to crash when I do that). 

 

A problem I noticed is that it's supposed to have 16 levels of stack - which it doesn't, since it doesn't have room for that in the registers. It will need a rewrite to use RAM instead/also. 

 

There's different information regarding objects being outside of the screen, should they wrap or not... Not sure which one to follow. 

 

Will upload again when graphics is figured out. 

Link to comment
Share on other sites

... I mapped all the keys in the latest MESSUI 0.235 (press TAB then Input this machine), in the current setup in code, if using 1,2,3,4 x 1,Q,A,Z for keyboard:

P1 Up  2

P1 Down  S

P1 Left  Q
P1 Right  E
P1 Push Down  W
P1 Pull Up  A
P1 Twist Clockwise  3
P1 Twist Counterclockwise  1

P2 Up  4

P2 Down  C

P2 Left  Z
P2 Right  D
P2 Push Down  V
P2 Pull Up  X
P2 Twist Clockwise  F
P2 Twist Counterclockwise  R

HOLD 6
MODE 7
START 8
TIME  5
 

Keytest functions properly.

Link to comment
Share on other sites

  • 2 weeks later...

I was afraid I was going to be underwhelmed, but if anything I was surprised by how much I enjoyed everything! I had all the usual Channel F owner confusion (why is there so much audio noise on the TV? what buttons do I need to hit in what order?) but eventually it all came back to me and I remembered all the old tricks again.
 

I played a lot of built-in hockey, Video Whizball, Alien Invasion, Pinball Challenge, Pac Man, and Tetris. It is truly amazing what @e5frog and the rest of the Channel F community have achieved on it, and I really wish it were easier to come by consoles so more people could experience their work with the real controller.

 

I have to say, Pinball Challenge gets beat up on a lot, and I don’t love the way the paddle slows down when the CPU is catching up, but I LOVE the notches on the side and generally had a terrific time with it.


I have been playing a lot of Atari 2600 lately, and I have to say that the Channel F’s visual presentation, while less sophisticated in many ways, really makes a sharp, clean, consistent impression that is pretty unrivaled in my experience. Not many colors, but they’re such nice colors!

 

F4AC6FC4-09CB-4E2D-8D98-94FB8A07C276.jpeg

79200A64-087F-41A9-A839-C8E72AA6050F.jpeg

54F2CD84-97F8-48BE-9FE8-213AB9113D83.jpeg

9D9DC280-AACD-4CA8-8628-9A6F1D032539.jpeg

  • Like 2
Link to comment
Share on other sites

8 hours ago, jgkspsx said:

I was afraid I was going to be underwhelmed, but if anything I was surprised by how much I enjoyed everything! I had all the usual Channel F owner confusion (why is there so much audio noise on the TV? what buttons do I need to hit in what order?) but eventually it all came back to me and I remembered all the old tricks again.
 

I played a lot of built-in hockey, Video Whizball, Alien Invasion, Pinball Challenge, Pac Man, and Tetris. It is truly amazing what @e5frog and the rest of the Channel F community have achieved on it, and I really wish it were easier to come by consoles so more people could experience their work with the real controller.

 

I have to say, Pinball Challenge gets beat up on a lot, and I don’t love the way the paddle slows down when the CPU is catching up, but I LOVE the notches on the side and generally had a terrific time with it.


I have been playing a lot of Atari 2600 lately, and I have to say that the Channel F’s visual presentation, while less sophisticated in many ways, really makes a sharp, clean, consistent impression that is pretty unrivaled in my experience. Not many colors, but they’re such nice colors!

 

F4AC6FC4-09CB-4E2D-8D98-94FB8A07C276.jpeg

79200A64-087F-41A9-A839-C8E72AA6050F.jpeg

54F2CD84-97F8-48BE-9FE8-213AB9113D83.jpeg

9D9DC280-AACD-4CA8-8628-9A6F1D032539.jpeg

The Channel F is a fun little system.  While a bit crude graphically, even compared to what the 2600 could do, it still has some very, cool games that are very much worth playing today.

  • Like 3
Link to comment
Share on other sites

  • 2 weeks later...

Finally have my first "playable" game for the Channel F - another exciting port for me haha!

 

This is a port of the Tele-Spiel ES 2201 game: Ghostchaser. Very simple, when the square moves, you press the button. Press too early, you are blocked from moving, whoever presses first when the ghost moves wins the point.

 

Use push down button on the controller to fire, button 4 on console is reset. My plan is to improve the timer a little so its not randomly selecting to fire straight away, and possibly a controller button reset (perhaps pull?)

 

Once that is done, I want to add on-screen scoring for a bonus feature - I might also work on a colour version with alternative fire buttons required (twist left or right for different colours).

 

The game Ghostchaser on original console is shown here from someones youtube channel (greatly appreciated by a fellow game-recorder of obscure consoles): 

 

Some more info on the console: https://www.old-computers.com/museum/computer.asp?st=2&c=664

 

It appears to be a half-way between an odyssey, playing very similar with only 3 on screen white elements on a black background, and a PC-50X which also uses full circuitry for each game (but runs in two-colour).

GhostChaser.bin

  • Like 1
Link to comment
Share on other sites

7 hours ago, e5frog said:

Nice!

Didn't understand the gameplay, will check it out! 

When the square moves, press down, but don't press too early. That's it ?

 

Its me testing a timer, I was struggling to work out how to delay so this was a good way of me getting something to work, the plan is to add it to the Simon game I'm still working on as I needed a way of showing all the combinations. 

  • Like 1
Link to comment
Share on other sites

Done some more work to it, probably as close as I want to get it to the original Tele-Spiel so this is version 1.0:

 

What I've done since last time:

 

1) Limit of about 1 second to react to ghost moving before disappearing - this is based on the text of the manual (the video doesn't show what happens if you don't press the button - so I'm assuming)

2) Pull up on both controllers now resets the game so you don't have to press 4 on the console

3) I think I've now set it up so that if the random generator for the next level is never less than a second before the ghost moves.*

 

The one thing that I haven't implemented from the video that I noticed, is that when someone "misfires" before the ghost moves, the other player should be prevented from also pressing - this is probably from the circuitry of the board - I could implement this but I think its more fun to allow the other player to score the point. I can add this in if anyone was desperate to have a true-to-Tele-Spiel experience.

 

I think my next shot would be to work on the 2 other "unique" Tele-Spiel games. Skeet Shooting has some unique mechanics, and racing is possibly the first home console version of a vertical scrolling car game with a moving track (the PC 50X has a car game, but you avoid cars, rather than the road adjusting). I'm also formulating ideas for a potential "plus" version of this with some more strategy and gameplay.

 

* F8 assembly question: In order to do this, I used xs (Exclusive OR from Scratchpad) but first I had to shift bits and then shift back again because xs apparently can't handle more than $F, is this correct? It seems to work fine, I was just surprised it only handled a single digit hexadecimal number.

 

 

ghostchaser.png

GhostChaserv1.bin

  • Like 1
Link to comment
Share on other sites

53 minutes ago, Mikebloke said:

* F8 assembly question: In order to do this, I used xs (Exclusive OR from Scratchpad) but first I had to shift bits and then shift back again because xs apparently can't handle more than $F, is this correct? It seems to work fine, I was just surprised it only handled a single digit hexadecimal number.

xs "r" makes EXOR of all eight bits from what is in Ackumulator and the value in register "r".


The op-code is $Ex, where x notes the register.

You can only use register 0 to 11 directly...

https://channelf.se/veswiki/index.php?title=Opcode

 

xs   0

xs   1

...

xs   10

xs   11

xs   12  is the same as "xs   S"
xs   13  is the same as "xs   I"

xs   14  is the same as "xs   D"

 

hmmm....   can't remember what was the thing about 15. I recall checking this at one time or another, I should have added it to the Opcode page... 

 

  • Like 2
Link to comment
Share on other sites

On 9/16/2021 at 11:22 AM, e5frog said:

Here's the faster version.


 

Chip-8_ed9.zip 13.99 kB · 12 downloads

 

Sorry but i was just able to test it today and this is a heck of an improvement!

There is a lot of flicker for the two bats in the Pong 1player game but that's ok.

 

So, when we will see a multicart Chip8 for the Channel F ? ;)

 

Edited by slydc
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...