Jump to content

Photo

Using the Ultimate Cart as a 65816

Veronica FPGA 65816

11 replies to this topic

#1 foft OFFLINE  

foft

    Dragonstomper

  • 728 posts
  • Location:Nyon, Switzerland

Posted Sat Apr 14, 2018 7:24 AM

I have written a new core for the Ultimate Cart. It is an implementation, a behavior based clone, of the Project Veronica 65816 cartridge. The 65816 implementation is not cycle exact but seems to run fairly reliably so far.

 

In order to get it running you need to download and flash http://www.64kib.com...ica20180414.pofusing the USB blaster.

 

You will need to flash back the standard core to use it as a flash card reader later.

 

You will then need software, I suggest trying the following two:

http://atariage.com/...ica/?p=3190927:atr file with tests and demos

http://atariage.com/...ica/?p=3227906:Veronica Basic

 

Many thanks to Zenon/DIAL, Marek Konopka, and Simius for their work on the original. Thanks for Robin Edwards for his work on the Ultimate Cart. Thanks to Robert Finch for his 65816 core. Thanks for Avery Lee for his work on the documentation of the Veronica cart and Veronica Basic.

 

See https://github.com/r...ds/UltimateCartfor details about the Ultimate Cart.

See http://atariage.com/...oject-veronica/for details about Project Veronica.

See https://github.com/r...ee/master/FT816for the 65816 core.

See http://www.64kib.com..._cart/veronica/for my core to tie it all together.

 

Video demos:

 

 

 

 



#2 Tezz OFFLINE  

Tezz

    River Patroller

  • 2,378 posts
  • Location:Manchester, England

Posted Sat Apr 14, 2018 10:59 AM

Can I still get hold of an Ultimate cart in the U.K.?



#3 electrotrains OFFLINE  

electrotrains

    Moonsweeper

  • 296 posts
  • Location:Scotland

Posted Sat Apr 14, 2018 2:05 PM

Can I still get hold of an Ultimate cart in the U.K.?

 

I make small batches when people ask me. I've got one "in stock" at the moment. PM me if you want it?

 

Robin



#4 electrotrains OFFLINE  

electrotrains

    Moonsweeper

  • 296 posts
  • Location:Scotland

Posted Sat Apr 14, 2018 2:11 PM

Hi Mark,

 

That looks really amazing ;-) - I thought you'd probably forgotten about this project!

 

Can't wait to give it a try later - maybe we can somehow combine the firmware at some point in the future, and have it as an option on boot? How much of the FPGA does the 65816 use?

 

Robin



#5 Tezz OFFLINE  

Tezz

    River Patroller

  • 2,378 posts
  • Location:Manchester, England

Posted Sat Apr 14, 2018 2:13 PM

I make small batches when people ask me. I've got one "in stock" at the moment. PM me if you want it?

 

Robin

Yes please, PM sent :)



#6 Stephen OFFLINE  

Stephen

    Quadrunner

  • 7,095 posts
  • A8 Gear Head
  • Location:No longer in Crakron, Ohio

Posted Sat Apr 14, 2018 2:23 PM

This is just awesome!



#7 foft OFFLINE  

foft

    Dragonstomper

  • Topic Starter
  • 728 posts
  • Location:Nyon, Switzerland

Posted Sat Apr 14, 2018 3:24 PM

That looks really amazing ;-) - I thought you'd probably forgotten about this project!

 

Can't wait to give it a try later - maybe we can somehow combine the firmware at some point in the future, and have it as an option on boot? How much of the FPGA does the 65816 use?

 

Yeah I 'finished it' back in 2016 then never got around to debugging it.

 

In terms of usage:

Total logic elements : 5,631 / 8,064 ( 70 % )
    Total combinational functions : 5,497 / 8,064 ( 68 % )
    Dedicated logic registers : 534 / 8,064 ( 7 % )
Total registers : 534
Total pins : 65 / 101 ( 64 % )
Total virtual pins : 0
Total memory bits : 0 / 387,072 ( 0 % )
Embedded Multiplier 9-bit elements : 0 / 48 ( 0 % )
Total PLLs : 1 / 1 ( 100 % )
UFM blocks : 0 / 1 ( 0 % )
ADC blocks : 0 / 1 ( 0 % )

 

Which is basically all the 65816 itself (5444/5631):

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
; Fitter Resource Utilization by Entity                                                                                                                                                                                                                                                                                                                                                                      ;
+-----------------------------------------------+-------------+---------------------------+---------------+-------------+------+------------+--------------+---------+-----------+------+--------------+--------------+-------------------+------------------+------------+----------------------------------------------------------------------------------------+--------------------------+--------------+
; Compilation Hierarchy Node                    ; Logic Cells ; Dedicated Logic Registers ; I/O Registers ; Memory Bits ; M9Ks ; UFM Blocks ; DSP Elements ; DSP 9x9 ; DSP 18x18 ; Pins ; Virtual Pins ; LUT-Only LCs ; Register-Only LCs ; LUT/Register LCs ; ADC blocks ; Full Hierarchy Name                                                                    ; Entity Name              ; Library Name ;
+-----------------------------------------------+-------------+---------------------------+---------------+-------------+------+------------+--------------+---------+-----------+------+--------------+--------------+-------------------+------------------+------------+----------------------------------------------------------------------------------------+--------------------------+--------------+
; |veronica                                     ; 5631 (4)    ; 534 (0)                   ; 0 (0)         ; 0           ; 0    ; 1          ; 0            ; 0       ; 0         ; 65   ; 0            ; 5097 (4)     ; 134 (0)           ; 400 (0)          ; 0          ; |veronica                                                                              ; veronica                 ; work         ;
;    |FT816:cpu_65816_rob|                      ; 5444 (5262) ; 373 (373)                 ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5069 (4897)  ; 32 (32)           ; 343 (332)        ; 0          ; |veronica|FT816:cpu_65816_rob                                                          ; FT816                    ; work         ;
;       |BCDAdd4:ubcda2|                        ; 42 (22)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 42 (22)      ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcda2                                           ; BCDAdd4                  ; work         ;
;          |BCDAddAdjust:u1|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcda2|BCDAddAdjust:u1                           ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u2|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcda2|BCDAddAdjust:u2                           ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u3|                    ; 6 (6)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 6 (6)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcda2|BCDAddAdjust:u3                           ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u4|                    ; 4 (4)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 4 (4)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcda2|BCDAddAdjust:u4                           ; BCDAddAdjust             ; work         ;
;       |BCDAdd4:ubcdai1|                       ; 43 (24)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 37 (18)      ; 0 (0)             ; 6 (6)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcdai1                                          ; BCDAdd4                  ; work         ;
;          |BCDAddAdjust:u1|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcdai1|BCDAddAdjust:u1                          ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u2|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcdai1|BCDAddAdjust:u2                          ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u3|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcdai1|BCDAddAdjust:u3                          ; BCDAddAdjust             ; work         ;
;          |BCDAddAdjust:u4|                    ; 4 (4)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 4 (4)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDAdd4:ubcdai1|BCDAddAdjust:u4                          ; BCDAddAdjust             ; work         ;
;       |BCDSub4:ubcds2|                        ; 52 (13)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 47 (9)       ; 0 (0)             ; 5 (4)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcds2                                           ; BCDSub4                  ; work         ;
;          |BCDSubAdjust:u1|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcds2|BCDSubAdjust:u1                           ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u2|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcds2|BCDSubAdjust:u2                           ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u3|                    ; 15 (15)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 14 (14)      ; 0 (0)             ; 1 (1)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcds2|BCDSubAdjust:u3                           ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u4|                    ; 14 (14)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 14 (14)      ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcds2|BCDSubAdjust:u4                           ; BCDSubAdjust             ; work         ;
;       |BCDSub4:ubcdsi1|                       ; 46 (24)     ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 46 (24)      ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcdsi1                                          ; BCDSub4                  ; work         ;
;          |BCDSubAdjust:u1|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcdsi1|BCDSubAdjust:u1                          ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u2|                    ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 5 (5)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcdsi1|BCDSubAdjust:u2                          ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u3|                    ; 6 (6)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 6 (6)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcdsi1|BCDSubAdjust:u3                          ; BCDSubAdjust             ; work         ;
;          |BCDSubAdjust:u4|                    ; 6 (6)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 6 (6)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|FT816:cpu_65816_rob|BCDSub4:ubcdsi1|BCDSubAdjust:u4                          ; BCDSubAdjust             ; work         ;
;    |atari_address_decoder:glue4|              ; 3 (3)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 2 (2)        ; 0 (0)             ; 1 (1)            ; 0          ; |veronica|atari_address_decoder:glue4                                                  ; atari_address_decoder    ; work         ;
;    |config_regs_6502:glue2|                   ; 7 (7)       ; 6 (6)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 4 (4)             ; 3 (3)            ; 0          ; |veronica|config_regs_6502:glue2                                                       ; config_regs_6502         ; work         ;
;    |config_regs_veronica:glue1|               ; 2 (2)       ; 2 (2)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 1 (1)             ; 1 (1)            ; 0          ; |veronica|config_regs_veronica:glue1                                                   ; config_regs_veronica     ; work         ;
;    |output_mux:glue7|                         ; 8 (8)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 0 (0)             ; 8 (8)            ; 0          ; |veronica|output_mux:glue7                                                             ; output_mux               ; work         ;
;    |output_mux:glue8|                         ; 5 (5)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 2 (2)        ; 0 (0)             ; 3 (3)            ; 0          ; |veronica|output_mux:glue8                                                             ; output_mux               ; work         ;
;    |pll_veronica:pll1|                        ; 0 (0)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|pll_veronica:pll1                                                            ; pll_veronica             ; work         ;
;       |altpll:altpll_component|               ; 0 (0)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|pll_veronica:pll1|altpll:altpll_component                                    ; altpll                   ; work         ;
;          |pll_veronica_altpll:auto_generated| ; 0 (0)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|pll_veronica:pll1|altpll:altpll_component|pll_veronica_altpll:auto_generated ; pll_veronica_altpll      ; work         ;
;    |slave_timing_6502:glue3|                  ; 143 (129)   ; 134 (120)                 ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 9 (9)        ; 91 (87)           ; 43 (33)          ; 0          ; |veronica|slave_timing_6502:glue3                                                      ; slave_timing_6502        ; work         ;
;       |memory_timing_bridge:glue3a|           ; 11 (11)     ; 11 (11)                   ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 1 (1)             ; 10 (10)          ; 0          ; |veronica|slave_timing_6502:glue3|memory_timing_bridge:glue3a                          ; memory_timing_bridge     ; work         ;
;       |synchronizer:synchronizer_phi|         ; 3 (3)       ; 3 (3)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 0 (0)        ; 3 (3)             ; 0 (0)            ; 0          ; |veronica|slave_timing_6502:glue3|synchronizer:synchronizer_phi                        ; synchronizer             ; work         ;
;    |sram_mux:glue6|                           ; 39 (39)     ; 19 (19)                   ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 7 (7)        ; 6 (6)             ; 26 (26)          ; 0          ; |veronica|sram_mux:glue6                                                               ; sram_mux                 ; work         ;
;    |veronica_address_decoder:glue5|           ; 4 (4)       ; 0 (0)                     ; 0 (0)         ; 0           ; 0    ; 0          ; 0            ; 0       ; 0         ; 0    ; 0            ; 4 (4)        ; 0 (0)             ; 0 (0)            ; 0          ; |veronica|veronica_address_decoder:glue5                                               ; veronica_address_decoder ; work         ;
+-----------------------------------------------+-------------+---------------------------+---------------+-------------+------+------------+--------------+---------+-----------+------+--------------+--------------+-------------------+------------------+------------+----------------------------------------------------------------------------------------+--------------------------+--------------+
Note: For table entries with two numbers listed, the numbers in parentheses indicate the number of resources of the given type used by the specific entity alone. The numbers listed outside of parentheses indicate the total resources of the given type used by the specific entity and all of its sub-entities in the hierarchy.



#8 foft OFFLINE  

foft

    Dragonstomper

  • Topic Starter
  • 728 posts
  • Location:Nyon, Switzerland

Posted Sat Apr 14, 2018 3:26 PM

I guess the max 10 can store two cores on flash and load another one itself somehow? The MCC216 (cyclone iii iirc) does this by storing multiple cores on the spi flash and using some of the Altera IP.


Edited by foft, Sat Apr 14, 2018 3:27 PM.


#9 Kyle22 OFFLINE  

Kyle22

    River Patroller

  • 3,445 posts
  • Call my BBS! telnet://broadway1.lorexddns.net
  • Location:McKees Rocks (Pittsburgh), PA

Posted Sat Apr 14, 2018 5:34 PM

This is so awesome. I just hope that we find out that its possible to have both cart loader and 65816 CoPro at the same time.
:)

Edit: Effing Samsung autocorrect :(
how do I turn this off?

Edited by Kyle22, Sat Apr 14, 2018 6:27 PM.


#10 xxl OFFLINE  

xxl

    Stargunner

  • 1,100 posts
  • Location:Rabka-Zdrój /Poland

Posted Sun Apr 15, 2018 1:09 AM

which cpu will be next in UCart? I hope z80 :-)

 

 

:thumbsup:  :thumbsup:  :thumbsup:



#11 atarixle OFFLINE  

atarixle

    Moonsweeper

  • 293 posts
  • Location:Germany

Posted Sun Apr 15, 2018 2:37 AM

x86_64 to virtualize Mac OS X on the VBXE and run multiple inctances of Atari800MacX

Edited by atarixle, Sun Apr 15, 2018 2:38 AM.


#12 slx OFFLINE  

slx

    Stargunner

  • 1,462 posts
  • Location:Vienna, Austria

Posted Sun Apr 15, 2018 2:16 PM

This is so awesome. I just hope that we find out that its possible to have both cart loader and 65816 CoPro at the same time.
:)
 

 

That would indeed be awesome (and might result in more Veronika programming being done). I got one but still try to wrap my head around programming on two CPUs that only communicate through a few bits. 







Also tagged with one or more of these keywords: Veronica, FPGA, 65816

0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users