Jump to content
  • entries
    143
  • comments
    451
  • views
    174,012

Chimera update


mos6507

813 views

Earlier in the week we were able to verify that Supercharger games are working again. I haven't tried any multiloads other than Survival Island, but odds are, we're good to go on that front.

 

Next, we've been able to get bidirectional serial communications working. We wrote a test program that lets you type characters in Hyperterminal and have them echo back after reaching the VCS.

 

Next, we were able to get queues working again (I don't think I'll call queues Ouroboros anymore, it's too hard to type). Right now queues appear to work when running out of ARM RAM. We're limited to only 16 of these (4K total). Tomorrow we're scheduled to test queues out of cart SRAM, where timing is much tighter. The current hotspot memory map we're using supports 100 SRAM queues, hence 25.6K bytes, but we have 64K to work with. So ultimately we may adjust how the hotspots operate. We want to limit the hotspots to the last page of cart RAM so as not to steal away too much space from code.

 

Also, we were having some problems with RF interference with the serial cable connected. Through some serendipity we were able to solve this problem by enabling a resistor pack component that is on the cart between the VCS and the CPLD. We hope that this part should both help protect the cartridge from getting fried by bad VCS code and also enable alternate ways of writing RAM.

 

The most recent demo written has 4 queues running at once providing playfield bitmaps. Two represent the first iteration of PF1, for graphics and color. The third represents the background color underneath the second iteration of PF1. The last is the second iteration of PF1 graphics. In addition to mirroring text back out to Hyperterminal, I poke the data into that last queue. The VCS has no trouble keeping up with incoming keypresses during VBLANK. We're currently running at 38.4K baud. I expect us to eventually be able to bump this up to 56K. We also have to implement hardware flow control.

 

For those whom seeing is believing:

 

Chimera Demo 1

 

 

This is an early demo so it isn't really showing anything that couldn't be done through other means (although processing incoming serial through a controller port would be nasty). But a big part of this is making it easier.

 

Here is what the kernel code looks like for this demo. Pretty simple, huh?

 

StartKernel
; Set PF Pattern
sta WSYNC

;lda #%10101010
;sta PF1
;sta PF2

; Count Kernel Lines
ldy #KERNH
KernelLoop


lda CH_QUEUE_FAST
	sta PF1

lda CH_QUEUE_FAST+1
	sta COLUPF
	SLEEP 21
	
	lda #00
	sta COLUPF
	
	lda CH_QUEUE_FAST+2
	sta PF1
	
  lda CH_QUEUE_FAST+3
	sta COLUBK


	SLEEP 8
	lda #00
	sta COLUBK


sta WSYNC
dey
bne KernelLoop

; Clear PF Pattern
sty PF0
sty PF1
sty PF2

EndKernel

 

 

I hope to eventually show some demos that probably could not be done through other means. The text mode we have to work on for the menuing system will be the one to look for. We should be able to share a few boards with interested parties if they want to work on fancier demos than I can create. Let me know.

2 Comments


Recommended Comments

It might be possible to save two cycles on some queue accesses if you had a "delayed access" function. When enabled, hotspots at $40-$7F would cause the second following cartridge fetch to read from the queue after the previous one.

 

Thus, if it's necessary to fetch data from queues 4-6 and store them to PF0-PF2, one could use code:

 lda CH_QUEUE_FAST+4 ; fetch from queue 4
 sta PF0+$40 ; Triggers queue 5 access
 lda #0   ; Accesses queue 5
 sta PF1+$40 ; Triggers queue 6 access
 lda #0   ; Accesses queue 6
 sta PF2

A total of 4+3+2+3+2+3 = 17 cycles, compared with 21 cycles using queues the "normal" way. If timing allowed the Chimera chip to see the immediate operand fetched from "normal" memory before putting the replacement value on the data bus, that would allow for even more interesting options. Even if there wasn't time to act immediately upon the fetched value, if it could be used to select the queue for the next $40-hotspot access that could be useful.

 

Such a facility would probably make it possible to extend my Ruby Runner 10-character color kernel to 11 characters. There might even be enough time to extend it to 12, though that would likely require using a rather funky HMOVE trick and I don't know if the edges could be made to look 'clean'.

 

Still, I can see how something like Chimera might make something like Robotron almost practical.

Link to comment
Guest
Add a comment...

×   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...