Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trGenel KategoriProjeKissCart64 - Çoklu C64 Kartuşu
Sayfa: 1 ... 3 4 [5] 6 7 ... 21   Aşağı git
Yazdır
Gönderen Konu: KissCart64 - Çoklu C64 Kartuşu  (Okunma Sayısı 189309 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #60 : Ağustos 04, 2015, 17:48:37 ÖS »

Plus versiyonu için taslak şema hazır =)

Eagle şeması




>i_r_on    Senin NOR fikrin, $DFxx register'ına yazma isteğini yakalamaya cuk diye uydu, sağolasın. NOR gate olarak 7402 kullandım, IO2 ve RW sinyallerini girişlere verdim, çıkışı 74273 latch'in clock'una verdim. Biraz önce belirttiğim gibi c64'ün power-on anında 74273 latch'i sıfırlamak için 74273'ün CLR bacağını doğrudan RESET hattına bağladım. 74273'ün data girişlerine data bus bağlı, $DFxx register'ına yazıldığı an data bus'taki değeri çıkışlarına mandallıyor. 74273'ün data çıkışları, eproma ve EXROM'a bağlı. Q1-Q6 ile eprom'un bank seçimi (A13-A18) yapılıyor. Q7 ile EXROM kontrol ediliyor. ROML sinyali, eprom'un OE ve CE girişlerine bağlı. İşlemci, $8000-$9FFF aralığını okumak istediğinde ROML sinyali, OE ve CE'yi sıfırlayarak epromu aktif hale geliyor. Eprom da seçimi yapılmış olan bank'daki (A13-A18) ilgili adresin (A0-A12) değerini data bus'a veriyor.

$DFxx kontrol yazmacının tanımı şu şekilde:
bits
0-5  bank numarası
6     EXROM hattı
7     kullanılmıyor


Bu kartuş şu şekilde çalışacak:
* c64 ilk açıldığında, sıfırlanmış latch üzerinden EXROM hattı sıfıra çekildiği için kartuş 8K standart modda çalışacak. Yine latch üzerinden eprom'un bank0'ı seçildiği için $8000-$9FFF aralığında bank0 görünecek.
* Eprom üzerindeki bank0'da, CBM80 metoduyla otomatik çalışacak olan oyun seçim menüsü kodu bulunacak.
* Oyun seçim menüsünde seçim yapıldıktan sonra, bank switching ve transfer işlemi yapacak olan kod, örneğin $033C'de çalışmaya başlayacak ve seçilen oyun ve türüne göre bank seçimi ve transfer işlemini yaparak oyunu çalıştıracak.
* Reset butonuna basınca tekrar oyun menüsü ekrana gelecek.

Yapılacaklar:
* Expansion port'a takılı bir breakout kullanarak, breadboard üzerinde devreyi denemek gerekli.
* Oyun seçim menüsü kodunu yapıp, eprom'da bank0'a yazmak gerekli. Diğer banklara birkaç tane 8K kartuş imajı yazarak pratik bir deneme yapılabilir.
* 7402'nin sadece bir kapısı kullanımda. NOR kapısını, diode-resistor logic kullanarak oluşturup 7402'yi iptal etmek lazım.
* İleride $DFxx yazmacını gizleme ihtiyacı çıkacak (prg oyunların depacker'ları, oyunu ram'e açarken $DF00-$DFFF aralığındaki ram'e de yazacağı için sorun çıkacak). Bu yüzden yazmaçta kullanımda olmayan bit7'yi yazmacı gizlemek için kullanmak gerekecek, tabi devreye de ekleme yapılacak =)
Logged
ibo1973
Uzman
*****
Mesaj Sayısı: 2.472


Üyelik Bilgileri
« Yanıtla #61 : Ağustos 04, 2015, 20:09:50 ÖS »

fikir olarak  söylüyorum  üzerine sd kartı okutabiliceğiniz bir mcu + bu mcu ya bağlı eprom olsa

çalışma seklide şu olsa
sd kartın içine atılan oyunları yaptığınız yazılım açılışta listelese kişinin bu listeden seçtiği oyunu mcu üzerinden eproma programlansa ve bu çalışşa ve resete basınca mcuya  epromu sildirse hemde c64 ü resetliyip oyun menusüne dönse daha iyi ve çok daha basit olmazmı ? maliyet olarak 10 tl fazladan mcu ya verilir belki ama 10 numara 5 yıldız bir kartuş olur
« Son Düzenleme: Ağustos 04, 2015, 20:19:00 ÖS Gönderen: ibo1973 » Logged
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #62 : Ağustos 04, 2015, 21:05:13 ÖS »

Şu an bu kartuşu kiss konseptine uygun ve old school tarzında yapmaya çalışıyoruz. Bir mcu ve sd arabirimi kullanarak güzel şeyler çıkacağı doğru, ama şu an için yapmaya çalıştığımız şey farklı. Şu anki bilgime göre sd kart üzerinden oyun yükleyebilecek bir kartuş yapacak olsam, mcu'ların başına henüz geçmişliğim olmadığı için, eprom + cf arabirimi kullanırım (sd to cf dönüştürücüler var piyasada). c64 için cf arabirimi yaptım ben, cf kartı memory modda çalıştırıp LBA adreslemeyle birkaç sektörlere prg'leri yazıp ardından okutarak oyun yüklemişliğim var. En son asm olarak FAT32 library yazmaya başlamıştım, yarıda kaldı. Devamını getiririm o projenin, ama biraz vakit alıcı olduğu için şu an için uğraşmıyorum.
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #63 : Ağustos 04, 2015, 23:54:54 ÖS »

Bir logic ic üzerinden reset hattı sürülecekse, open collector output'lu bir ic (7401, 7406, 7409 vs) kullanmak gerekiyor.

Yalnız FC3'te de ve dün açtığım Multi ICE 3'te de (muhtemelen, genelde alttaki bacaklar input oluyor PAL/GAL'lerde) bu sinyal input olarak kullanılmış ve ikisi de bu yola başvurmuş. Biraz daha düşün derim.

Bu arada maşallah projeyi bitirmişin bile Hangi arada açıyosunuz programı, hangi arada çiziyosunuz arkadaş

Malzeme tedariki ve montaj anlamında bence yine 7402 kullan eğer GAL'e girmeyeceksen. Tabii pcb tasarımı anlamında dara düşmeyeceksen ki sıkıntı olacağını sanmıyorum çift yüzlü pcb kullanımı olduğu için.

Vay maşallah, sd kartlı sram'li ve mikrolu çözüme de ben gireyim bari sid player'ı bitirince


* 20150804_234310.jpg (102.23 KB, 1024x576 - Görüntüleme: 1368 kez.)
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #64 : Ağustos 05, 2015, 00:27:29 ÖÖ »

Yalnız FC3'te de ve dün açtığım Multi ICE 3'te de (muhtemelen, genelde alttaki bacaklar input oluyor PAL/GAL'lerde) bu sinyal input olarak kullanılmış ve ikisi de bu yola başvurmuş. Biraz daha düşün derim.
FC3'de RESET hattını 7409 open collector AND ile sürmüşler, bunu da c128'de kartuşu çıkarmadan 128 moduna geçebilmek için yapmışlar diye söyledim ya, özellikle input olarak almadan 74174/74273 latch'i manual buton'la sıfırlamışlar. skoe, 74174/74273 latch'in sıfırlanmasını şöyle açıklıyor:
quote:
When the FC3 is powered up or when the reset button of the FC3 is pressed, all
bits in $DFFF are reset to 0.

Hani ben c64 ilk açıldığında ne olur bu 74273'ün hali, çıkışları 0 olur mu, olur bence diye düşünüyordum, o konu.

Bu arada maşallah projeyi bitirmişin bile
Yok daha yapılacaklar listesi var =) Bu arada bundan sonrası için coop yapılması lazım, tek başıma ilerletecek olursam eğlenceli olmaz =)

Malzeme tedariki ve montaj anlamında bence yine 7402 kullan eğer GAL'e girmeyeceksen.
Yapılacaklar listesinde 3. sırada 7402'yi kaldırmak var, kiss yapıyoruz orada =)

Vay maşallah, sd kartlı sram'li ve mikrolu çözüme de ben gireyim bari sid player'ı bitirince
Simon kışkırtıyor bizi =)
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #65 : Ağustos 05, 2015, 00:51:33 ÖÖ »

FC3'de RESET hattını 7409 open collector AND ile sürmüşler, bunu da c128'de kartuşu çıkarmadan 128 moduna geçebilmek için yapmışlar diye söyledim ya, özellikle input olarak almadan 74174/74273 latch'i manual buton'la sıfırlamışlar.

Ok, ben aynı yeri okuduğumda bunun bir yan etki olduğunu zannetmiştim.

Alıntı
If the reset line is activated from computer side, the register $DFFF is not
reset. Bacause of this behaviour it is possible to enter the C128 mode of the
C128 without unplugging the cartridge.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #66 : Ağustos 05, 2015, 01:14:09 ÖÖ »

Bir de şimdi aklıma geldi, FC3'de latch ile EXROM'u sürerken araya anotu EXROM'a olacak şekilde 1N4148/BAT85 diyot koymuşlar. EXROM/GAME hatları kartuş takılmadığı zaman da 1 olduğu için (hatlara pull-up direnç bağlı demek ki) EXROM'u 1 yapmak yerine serbest bırakmışlar, sadece 0 olacağı zaman sıfıra çekmişler. Ama skoe'nin EasyFlash'ine baktım, o diyot kullanmamış. Bence de diyota pek gerek yok orada, kiss yaparak o şekilde bırakıyoruz demek ki =)
Logged
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.704


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #67 : Ağustos 05, 2015, 01:18:59 ÖÖ »

Süpersiniz aynen devam.

Bu arada ben de Tiny13'e sığmayan Arduino kodunu saf AVR C'ye çevirdim. 1024 byte flash'a sığmayan kod Arduino-1.6.5r2'de 482 byte, Arduino 1.0.6'da 428 byte, Atmel Studio 6.2'de 366 byte oldu.

Kod:
/*
 * BankSwitcher.c
 *
 * Author:  Özay Turay a.k.a Simon/CGTr ([url]http://www.commodore.gen.tr[/url])
 */


#ifndef F_CPU
  #define F_CPU  9600000UL  // Use 9.6MHz Internal Oscillator
#endif

#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>
#include <avr/eeprom.h>

#define T13_PORT  PORTB  // Register for Button Output
#define T13_PIN   PINB   // Register for Button Input
#define T13_DDR   DDRB   // Data Direction Register

#define ADDR_13   PB0    // Address Pin 13 of the EPROM
#define ADDR_14   PB1    // Address Pin 14 of the EPROM
#define ADDR_15   PB2    // Address Pin 15 of the EPROM
#define BANK_BTN  PB3    // Bank Switcher Button Pin
#define HOST_RST  PB4    // Host Device Reset Pin

#define DEBOUNCE  25     // Time to wait while "de-bouncing" button
#define REPEATER  250    // Time to wait after a button press

#define set_output(port, pin) (port |= (1<<pin))
#define clear_output(port, pin) (port &= ~(1<<pin))
#define toggle_output(port, pin) (port ^= (1<<pin))

uint8_t currentbank;  // Initialize Current Bank Global Variable

int button_is_pressed()
{
if (bit_is_clear(T13_PIN, BANK_BTN))
{
_delay_ms(DEBOUNCE);
if (bit_is_clear(T13_PIN, BANK_BTN)) return 1;
}
return 0;
}

int button_is_released()
{
if (bit_is_set(T13_PIN, BANK_BTN))
{
_delay_ms(DEBOUNCE);
if (bit_is_set(T13_PIN, BANK_BTN)) return 1;
}
return 0;
}

int main(void)
{
T13_DDR |= (1<<HOST_RST);  // Configure Host Device Reset Pin as OUTPUT
clear_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin LOW so that it doesn't startup while we are preparing

T13_DDR |= (1<<ADDR_13);  // Configure Address Pin 13 of the EPROM as OUTPUT
T13_DDR |= (1<<ADDR_14);  // Configure Address Pin 14 of the EPROM as OUTPUT
T13_DDR |= (1<<ADDR_15);  // Configure Address Pin 15 of the EPROM as OUTPUT

T13_PORT |= (1<<BANK_BTN);  // Configure Bank Switcher Button Pin as INPUT_PULLUP

currentbank = eeprom_read_byte((uint8_t*)0);  // Read value from EPROM
if (currentbank == 0xFF) currentbank = 0;     // In case of no value make it 0

if (bit_is_set(currentbank, 0)) set_output(T13_PORT, ADDR_13); else clear_output(T13_PORT, ADDR_13);  // Set Address Pin 13 of the EPROM using Current Bank Bit 0
if (bit_is_set(currentbank, 1)) set_output(T13_PORT, ADDR_14); else clear_output(T13_PORT, ADDR_14);  // Set Address Pin 14 of the EPROM using Current Bank Bit 1
if (bit_is_set(currentbank, 2)) set_output(T13_PORT, ADDR_15); else clear_output(T13_PORT, ADDR_15);  // Set Address Pin 15 of the EPROM using Current Bank Bit 2

_delay_ms(REPEATER);  // Wait some time to finish Host Device Reset operation
set_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin HIGH so that it starts up as preparing is done

while (1)
{
if (button_is_pressed())
{
clear_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin LOW so that it resets while we switch banks

currentbank++;  // Select next bank
if (currentbank > 7) currentbank = 0;  // In case of overflow make it 0
eeprom_write_byte((uint8_t*)0, currentbank);  // Write new value to EPROM

if (bit_is_set(currentbank, 0)) set_output(T13_PORT, ADDR_13); else clear_output(T13_PORT, ADDR_13);  // Set Address Pin 13 of the EPROM using Current Bank Bit 0
if (bit_is_set(currentbank, 1)) set_output(T13_PORT, ADDR_14); else clear_output(T13_PORT, ADDR_14);  // Set Address Pin 14 of the EPROM using Current Bank Bit 1
if (bit_is_set(currentbank, 2)) set_output(T13_PORT, ADDR_15); else clear_output(T13_PORT, ADDR_15);  // Set Address Pin 15 of the EPROM using Current Bank Bit 2

_delay_ms(REPEATER);  // Wait some time as a key repeat delay
}
if (button_is_released())
{
set_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin HIGH so that it starts up as switching banks is done
}
}
}
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #68 : Ağustos 05, 2015, 01:27:09 ÖÖ »

Suyunu çıkartmışsın kodun =) Simon, aklıma gelen şöyle bir durum var: c64 açıkken ve oyun çalışıyorken manuel olarak bank değiştirdiğinde oyun garanti crash eder. Seçimi yapılan bank'daki oyun çalışmaz yani. Ardından reset yapılması gerekli.
Logged
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.704


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #69 : Ağustos 05, 2015, 08:49:24 ÖÖ »

Yapıyor zaten.

Kod:
if (button_is_pressed())
{
  clear_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin LOW so that it resets while we switch banks

.
.
.
.
.

if (button_is_released())
{
  set_output(T13_PORT, HOST_RST);  // Pull Host Device Reset Pin HIGH so that it starts up as switching banks is done

.
.
.
}

Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #70 : Ağustos 05, 2015, 10:26:21 ÖÖ »

Sorun yok o zaman =) Pcb'yi bastırmadan önce devreyi c64 üzerinde deneyeceksin değil mi?
Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.774


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #71 : Ağustos 05, 2015, 15:41:59 ÖS »

Bu arada ben de Tiny13'e sığmayan Arduino kodunu saf AVR C'ye çevirdim. 1024 byte flash'a sığmayan kod Arduino-1.6.5r2'de 482 byte, Arduino 1.0.6'da 428 byte, Atmel Studio 6.2'de 366 byte oldu.

İşte gerçek scene ruhu. Son halini de ASM ile yazarsın artık.
Logged

Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.704


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #72 : Ağustos 05, 2015, 18:49:18 ÖS »

Sorun yok o zaman =) Pcb'yi bastırmadan önce devreyi c64 üzerinde deneyeceksin değil mi?

Denemeyi düşünüyorum ama önce kenar konnektörü için breakout veya kenar konnektörünü de içeren breadboard benzeri bir prototip PCB'si tasarlayıp bastırmam gerekecek sanırım.

İşte gerçek scene ruhu. Son halini de ASM ile yazarsın artık.

Eyvallah kardeşim, ATtiny13 bu tarz ufak işler için gerçekten biçilmiş kaftan. DIP ve SMD versiyonları mevcut. Ben SMD versiyonunu kullandım.

Bu arada unutmadan resimlerini paylaşayım, BankSwitcher (bir nevi dijital dip switch) prototipi için ilk SMD (SOP8 paket) entegremi breakout boarduna başarı ile lehimledim.






* BankSwitcher01.jpg (92.52 KB, 640x480 - Görüntüleme: 1246 kez.)

* BankSwitcher02.jpg (94.42 KB, 640x480 - Görüntüleme: 1064 kez.)

* BankSwitcher03.jpg (87.34 KB, 640x480 - Görüntüleme: 1179 kez.)

* BankSwitcher04.jpg (115.52 KB, 640x480 - Görüntüleme: 1202 kez.)
« Son Düzenleme: Ağustos 05, 2015, 18:54:51 ÖS Gönderen: Simon (Özay Turay) » Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
ibo1973
Uzman
*****
Mesaj Sayısı: 2.472


Üyelik Bilgileri
« Yanıtla #73 : Ağustos 05, 2015, 19:57:53 ÖS »

dahili osilatör kulanman güzel olmuş çoğu kişi sanırım güvenmediği için olsa gerek dahili osilatör kulanmayı tercih etmiyor.

Gerçi hasas işlerde tercih edilmemesi belkide daha iyidir.
Kod:
#ifndef F_CPU
  #define F_CPU  9600000UL  // Use 9.6MHz Internal Oscillator
#endif
Logged
Levent
Deneyimli
*****
Mesaj Sayısı: 520


4'294'967'296


Üyelik Bilgileri
« Yanıtla #74 : Ağustos 05, 2015, 20:41:19 ÖS »

Ledler yanıyor ledler yanıyoooor  Kahkaha
Logged

█ Commodore 64C + MPS1230 █ Commodore 128D █ 2x Naked Amiga500 █ Apple eMac-700 █ WinXp PC █ Win11 PC █
Sayfa: 1 ... 3 4 [5] 6 7 ... 21   Yukarı git
Yazdır
Gitmek istediğiniz yer: