Jump to content
IGNORED

Project Veronica


Recommended Posts

why to emulate SID when you can (possibly cheaper) play Future Composer from Amiga.

By "play" I mean generate bytes ready to push to POKEY. Too bad no sound input in cart port.

 

Not necessarily SID. But a SID-inspired SW-synth.

Advantage is, not much memory needed and not always the same samples (sampling disk ST-01 anyone?)

However, if someone has teh skills to code a SPC700 (SNES soundchip) inspired or another wavetable synth even better :)

 

But hey, if we start off with a MOD player (FC is kinda MOD right?) no complains from me ;)

Link to comment
Share on other sites

My first idea is to let the cart render the screen.

 

That is basically what the Rotator demo is doing. The screen is partitioned into two sections. 6502 renders the upper (smaller) part and 65816 on the Veronica does the lower part. Calculations are done in parallel on both CPUs. Both CPUs render graphics data into the offscreen buffer that is located under CART window ($8000-$9FFF). No need to copy anything due to the bank switching nature of cartridge port capabilities. Since Veronica contains two switchable 16KB rambanks we get double buffering out of the box.

 

Let alone, 6502 could play digi sound with 15KHz (or at least 7KHz).

 

You can use Veronica for any kind of calculations one can imagine, graphics oriented, sound, math calculations, etc. It is a general purpose coprocessor. For instance, due to 65816's efficiency it is possible to write a high sampling frequency audio player if one drafts carefully a cycle exact program on 6502 that reads data from cart window location. Why setting the sample frequency as low as 15 MHz?

Edited by Marek Konopka
  • Like 2
Link to comment
Share on other sites

I would guess because '15 khz' can be based off of the display timing since the horizontal refresh rate is approximately 15.75khz

 

The sampling frequency does not have to be in synchronization with raster timing. One can go higher than 15 KHz especially considering the fact that 65816 can produce samples much faster then 6502 does.

Link to comment
Share on other sites

 

The sampling frequency does not have to be in synchronization with raster timing. One can go higher than 15 KHz especially considering the fact that 65816 can produce samples much faster then 6502 does.

 

My idea if you will, was that the 6502 does GTIA (or other) HW register changes per scan-line as it would be useless for screen rendering.

Splitting the work load as you did is not in my interest as I was looking at it from a game point-of-view. And when the co-processor can render 10 "big" sprites in 70 scan-lines (my theoretically approximation) why bother? 6502 can (must) read the joystick and handle the FSM for the player and the NPCs. Then it writes the new positions of the player sprite and the NPC sprites and animation shapes to a buffer, which the co-processor uses for its next frame.

 

And all this in combination with DLIs. Thinking about it, guess 7.5KHz is max sampling freq, as you wouldn't have enough time on bad lines when using char-mode.

OTOH, when no DLIs are needed then a POKEY timer can be used with higher frequency. Maybe that is what you have in mind.

 

But anyhow, this is pure speculation. I try to finish a normal Atari game till summer. THEN I really would like to explore the possibilities of this piece of HW.

 

 

PS:

Had some beers. I think what I wrote above makes sense anyhow. However, I will better stop now and come back tomorrow :)

Link to comment
Share on other sites

The logical way to do sound would be to pre-process. e.g. for SID emulation, just calculate the resultant sample values for each upcoming scanline with the '816 and have them ready for the 6502 to read via Timer IRQs in the next frame. At 15 MHz, such processing should allow relative HiFi vs existing methods at probably 20% or less CPU expenditure of the '816.

That leaves the remaining cycles for the '816 to do rendering, calculating, other stuff.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

There is a six modules available from first series at this time. Price is US$89 +US$10 shipping. Please the willing for confirmation of interest (PM or @) and eventuallly choice the color of the housing - white or black. All modules working at the 14.31818MHz. Close to the datasheet guaranteed 14MHz. Most worked at 16MHz but I can't guarantee it.

  • Like 1
Link to comment
Share on other sites

Test and demo software for Veronica - with the approval of author (Marek Konopka):

AREGREAD - hardware register test - Atari side

VREGREAD - hardware register test - Veronica side

VRAMTEST - Veronica RAM test

BANKTEST - Banked RAM test (need a few second)

REGLOC - locate hardware register in the Veronica address area

DETECTOR - detected Veronica presence and calculate clock speed.

BIOSLOAD - BIOS loader, needed for DETECTOR and ROTATOR

ROTATOR - rotating skulls demo - load first BIOSLOAD, then run batch file @R

Veronica.atr

Edited by Simius
  • Like 2
Link to comment
Share on other sites

Detailed description is prepared by Marek Konopka.

Simplified Veronica memory map:

 

There is two memory banks (BANK0 and BANK1), 32kB each. Veronica has 64kB system RAM. The total RAM amount is 128kB.

 

From Veronica side:
0000...01FF - Zero Page RAM, Stack
0200...020F - Veronica Hardware Register
020F...3FFF - RAM
4000...7FFF - RAM or BANK (controlled by WINDOW bit, 0 - RAM, 1 - BANK)
8000...BFFF - RAM
C000...FFFF - RAM or BANK (controlled by WINDOW bit, 0 - BANK, 1 - RAM)

Veronica Hardware Register:
bit7 SEMAPHORE (default = 1)
0 - there is data for processing
1 - wait for data
Atari clear this bit, when the data in BANK had prepared.
Veronica set this bit, when the data in BANK had processed

bit6 WINDOW (default = 0)
0 - BANK mapped in C000...FFFF Veronica address area
1 - BANK mapped in 4000...7FFF Veronica address area

bit5 VBHALF (default = 1)
0 - lower half of BANK available
1 - upper half of BANK available

bit4...0 - unused (always = 1)

From Atari side:

8000...BFFF - System RAM/Basic ROM or BANK
D5C0 - Atari Hardware Register

Atari Hardware Register:
bit7 SEMAPHORE (default = 1) common with Veronica Hardware Register

bit6 - unused (always = 1)

bit5 RD5CTL (default = 0)
0 - System RAM (or BASIC ROM) in A000...BFFF Atari address area
1 - BANK visible in A000...BFFF Atari address area

bit4 RD4CTL (default = 0)
0 - System RAM in 8000...9FFF Atari address area
1 - BANK visible in 8000...9FFF Atari address area

bit3 ABHALF (default = 1)
0 - lower half of BANK available
1 - upper half of BANK available

bit2 - unused (always = 1)

bit1 RAMBANK (default = 0)
0 - BANK0 for Atari, BANK1 for Veronica
1 - BANK1 for Atari, BANK0 for Veronica

bit0 SOFTRST (default = 0)
0 - set default value in Veronica Hardware Register, reset Veronica CPU
1 - normal operation of Veronica CPU

 

Simple work scheme:
1. Clear SOFTRST bit
2. Turn off NMI/IRQ/DMA in Atari
3. Clear RAMBANK bit
4. Set RD5CTL bit (and RD4CTL if required)
5. Copy boot procedure for Veronica to the BANK
6. Set start vector in BFFC/BFFD (be mapped to FFFC/FFFD in Veronica) to the BOOT procedure.
7. Set RAMBANK bit
8. Clear RD5CTL bit (and RD4CTL)
9. Clear SEMAPHORE bit
10. Set SOFTRST bit
11. Turn on NMI/IRQ/DMA
12. Wait until Veronica set SEMAPHORE bit.

 

Sorry for bad english and some possible errors.

Edited by Simius
  • Like 3
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...