Jump to content
Sign in to follow this  
rdhays82604

8-bit custom ic's

Recommended Posts

I was wondering if there has been work done on implementing the functions of ANTIC, GTIA, POKEY and other custom ATARI 8-bit integrated circuits on programmable devices?

Share this post


Link to post
Share on other sites

The VBXE add-on (thread elsewhere) supposedly takes over (at least) the graphics generating functionality of GTIA.

 

A Flashback 3 (if it were 800/XL/5200 based) would need such hardware to take over all the custom chip functions.

 

PIA isn't much of an issue - it's just a simple 16 bit I/O device with a few extra lines to allow for control and interrupt passing.

Share this post


Link to post
Share on other sites

Pokey is partly done in VHDL for FPGAs by FPGA Arcade. They make emulations of arcades work in FPGA and needed the sound portion of the pokey for the linked asteroids.

 

snippet of VDHL code

use work.pkg_asteroids.all;

entity ASTEROIDS_POKEY is
 port (
 ADDR      : in  std_logic_vector(3 downto 0);
 DIN       : in  std_logic_vector(7 downto 0);
 DOUT      : out std_logic_vector(7 downto 0);
 DOUT_OE_L : out std_logic;
 RW_L      : in  std_logic;
 CS        : in  std_logic; -- used as enable
 CS_L      : in  std_logic;
 --
 AUDIO_OUT : out std_logic_vector(7 downto 0);
 --
 PIN       : in  std_logic_vector(7 downto 0);
 ENA       : in  std_logic;
 CLK       : in  std_logic  -- note 6 Mhz
 );
end;

architecture RTL of ASTEROIDS_POKEY is
 type  array_8x8   is array (0 to 7) of std_logic_vector(7 downto 0);
 type  array_4x8   is array (1 to 4) of std_logic_vector(7 downto 0);
 type  array_4x4   is array (1 to 4) of std_logic_vector(3 downto 0);
 type  array_4x9   is array (1 to 4) of std_logic_vector(8 downto 0);
 type  array_2x17  is array (1 to 2) of std_logic_vector(16 downto 0);
 type  bool_4      is array (1 to 4) of boolean;

 signal we                   : std_logic;
 signal oe                   : std_logic;
 --
 signal ena_64k_15k          : std_logic;
 signal cnt_64k              : std_logic_vector(4 downto 0) := (others => '0');
 signal ena_64k              : std_logic;
 signal cnt_15k              : std_logic_vector(6 downto 0) := (others => '0');
 signal ena_15k              : std_logic;
 --
 signal poly4                : std_logic_vector(3 downto 0) := (others => '0');
 signal poly5                : std_logic_vector(4 downto 0) := (others => '0');
 signal poly9                : std_logic_vector(8 downto 0) := (others => '0');
 signal poly17               : std_logic_vector(16 downto 0) := (others => '0');
 signal poly_17_9            : std_logic;

 -- registers
 signal audf                 : array_4x8 := (x"00",x"00",x"00",x"00");
 signal audc                 : array_4x8 := (x"00",x"00",x"00",x"00");
 signal audctl               : std_logic_vector(7 downto 0) := "00000000";
 signal stimer               : std_logic_vector(7 downto 0);
 signal skres                : std_logic_vector(7 downto 0);
 signal potgo                : std_logic;
 signal serout               : std_logic_vector(7 downto 0);
 signal irqen                : std_logic_vector(7 downto 0);
 signal skctls               : std_logic_vector(7 downto 0);
 signal reset                : std_logic;
 --

Share this post


Link to post
Share on other sites

It's been done for the Amiga:

 

http://home.hetnet.nl/~weeren001/minimig.html

 

It took Dennis well over 2 years to get Minimig to its current state, and it's been well-received in the Amiga community (set aside several hours and search for "minimig" on amiga.org).

 

I'm not an FPGA wonk, but I would think that if the tech info is available, in writing or in the person of those who know such things, it could be done for A8 as well. Maybe. :)

 

I do see a few potential challenges, though. On A8, much good stuff gets done by direct memory access (peeks and pokes to magic locations), whereas the Amiga is library-based and ends up going through the Kickstart ROM (which Dennis doesn't attempt to emulate). I have no clue whether that can be done in an FPGA. Also, are 6502-compatible processors still being made?

 

Anyway, it sure would be great to be able to homebrew "new" A8 systems!

-Ed-

Share this post


Link to post
Share on other sites
I do see a few potential challenges, though. On A8, much good stuff gets done by direct memory access (peeks and pokes to magic locations), whereas the Amiga is library-based and ends up going through the Kickstart ROM (which Dennis doesn't attempt to emulate). I have no clue whether that can be done in an FPGA. Also, are 6502-compatible processors still being made?

 

If you use the FPGA to implement the hardware of a system, then doing things like PEEKs and POKEs shouldn't be a problem if the design is compatible and runs ML code already.

 

It isn't really emulation, but rather an implementation of the same logic on a different (reconfigurable) device. You can think of it like a sculpture where you chip away everything that isn't your final shape. So an FPGA can be thought of as a vast array of interconnected electronic components, and you turn off everything that isn't an Antic or Pokey or whatever. Modern devices are actually look-up-table based, which makes implementing RAM or ROM much easier.

Share this post


Link to post
Share on other sites
If you use the FPGA to implement the hardware of a system, then doing things like PEEKs and POKEs shouldn't be a problem if the design is compatible and runs ML code already.

 

It isn't really emulation, but rather an implementation of the same logic on a different (reconfigurable) device. You can think of it like a sculpture where you chip away everything that isn't your final shape. So an FPGA can be thought of as a vast array of interconnected electronic components, and you turn off everything that isn't an Antic or Pokey or whatever. Modern devices are actually look-up-table based, which makes implementing RAM or ROM much easier.

Thanks; that helps me understand the FPGA thing a bit more. Also, a little bit of Googling answered my question about 6502 availability:

 

http://www.6502.org/

 

I guess it seems doable. Maybe someday I'll have a Minimig and Minitari side by side on my desk. :D

Share this post


Link to post
Share on other sites

It would be cool to have someone make a new version of the Antic, GTIA, and Pokey and have it backward compatible with the old chip. With Antic, maybe provide switches for doubling, quadrupling, or more the memory per line for higher res and more colors. Antic has a maximum of 40 bytes/line, going to 80 (80 column text mode), 160, or an even 256 bytes would be a great improvement. Add a switch to do this. Then the GTIA 16 hue/luma modes would be more useful. Maybe have a full 256 color more. GTIA, more PMGs and sprites. Pokey, - do duel pokey and quad pokey on one chip. Add waveforms. These chips use the first 16 bytes (32 for GTIA) of a 256 byte page, and there is room there. I think this is something Atari should have considered back in the 80's.

 

I know Video Board XE would be a great replacement for the GTIA chip also. Like I say, would be great to add functions to Antic as well.

Share this post


Link to post
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.

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...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...