cknave / c64-pico-ram-interface

Let your Raspberry Pi Pico pretend to be a Commodore 64 ROM cartridge
BSD 3-Clause "New" or "Revised" License
212 stars 15 forks source link

Need BOM #5

Open detlefgrohs opened 1 year ago

detlefgrohs commented 1 year ago

I am really interested in this project and have just ordered a set of boards so that I can build 1 for myself. I would have preferred to order the boards populated but I can order the parts separately and solder the surface mount components. A BOM would help with ordering the boards. Also I was having a hard time finding the actual components on the JLCPCB site so I decided to just get the boards and then order the parts later if I didn't have the resistors and capacitors already.

I was also wanting to reach out and see what I can do to contribute to this project. I have recently gotten back into retro computing and have obtained both an actual C64 and C128 that I have been doing some assembly development on. I had the idea earlier to see about using a Raspberry Pi to interface to a C64 and started to do some research into what existing projects there were and ran across your use of the Pico. I have done some development with the Pico and it is a brilliant solution to the interface that I am thinking about.

Also, I saw the 2 Pico solution that would allow for more capabilities, and I am interested in that also. I also saw another project where a Raspberry Pi was used to generate HDMI directly from a cartridge port.

cknave commented 1 year ago

Would something like this work? picocart.csv

KiCad has a lot of BOM output generators, this one is from bom_csv_grouped_by_value.py. If that looks useful, I'll add it to the repo.

I'll be interested to see if it works on the C128. Are they PAL or NTSC machines? As far as I know, this has only been tested on NTSC (though I can't imagine PAL would cause a problem).

detlefgrohs commented 1 year ago

The BOM is a start I will see if I can get exact part numbers and specifications. I think I was trying to find the exact parts @ JLCPCB so they could pre-populate the board. I am new to ordering the boards prepopulated so wanted I make sure I got everything exactly right. If you are thinking of moving forward with the 2 Pico solution, I would be interested in helping with the development of that and I can help by paying for and ordering the boards and testing the boards. This solution would allow for some great solutions with the available add-ons to the Pico that are available: LCD display, HDMI output etc... I could see a lot of different ideas going out of this. I am also involved with the Foenix system and have a Mega65 on order so 6502, 4510 and the 65816 processors so I am improving my assembly skills.

I will let you know when I get the blank boards and start populating them...

The C128 is NTSC (rasterOverscan = $06) and the C64 is PAL (rasterOverscan is $37). I found some assembly that would determine the machine type through code by getting the rasterOverscan. I made this into a routine so I could the timing so that I could use the jiffyTimer to time executions:

FUNCTION GetRasterOverflow() : byte; BEGIN ASM SEI System_GetRasterOverflow_WaitBMI:
LDA $D011 BMI System_GetRasterOverflow_WaitBMI

System_GetRasterOverflow_WaitBPL:
LDA $D011 BPL System_GetRasterOverflow_WaitBPL

System_GetRasterOverflow_WaitNoBPL: LDA $D012 BIT $D011 BPL System_GetRasterOverflow_WaitDone STA System_rasterOverflow BMI System_GetRasterOverflow_WaitNoBPL

System_GetRasterOverflow_WaitDone:
CLI END;

RETURNVALUE(rasterOverflow);

END;

cknave commented 1 year ago

For the ICs, the exact model doesn't matter so much. I used TI SN74LV244APWRG3, SN74LV244APWRG4, SN74LV244ATPWR; as well as Nexperia 74LV244APWJ when I was prototyping these.

I do plan on spending some time on the 2 pico idea at some point soon. I have a new design I'll put in a new repo once I can do some testing.