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.trCommodoreCommodore YazılımC64'te Basic Bilenler İş Başına...
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: C64'te Basic Bilenler İş Başına...  (Okunma Sayısı 8078 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
hades
Üye
****
Mesaj Sayısı: 394



Üyelik Bilgileri
« : Nisan 23, 2012, 22:30:35 ÖS »

Haydi beyler...
Beyin hücrelerini çalıştırmaya ne dersiniz?

C64 kullanan Z80 sistemi için bir programa ihtiyacım olacak.
C64 üzerinde Z80 komutlarını derleyecek ve hafızada 49152'den itibaren tutacak bir basic programı gerekiyor.
Mesela ben NOP komutunu yazdığımda yanına bunun opcode'unu yazacak ve o anki hafızaya bu opcode yerleştirilecek.

Uzun bir program olacağını zannetmem ama yinede uğraştırabilir. Bol bol input, read, data ve poke komutu olacak gibi gözüküyor.
« Son Düzenleme: Nisan 23, 2012, 22:42:57 ÖS Gönderen: hades » Logged
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #1 : Nisan 23, 2012, 23:07:34 ÖS »

Hades selam, cross assembler kullansan olur mu, pasmo ya da zxspin kullanarak kodunu yaz ve pc hard diskine kaydet, sonra 64'de uiec, sd2iec, c64tpc vs kullanarak kodu 49152'ye yükle.
Logged
hades
Üye
****
Mesaj Sayısı: 394



Üyelik Bilgileri
« Yanıtla #2 : Nisan 23, 2012, 23:41:52 ÖS »

Selam Metallic
Aslında işin ayrıntısı şöyle. Daha önceden -benim bahsettiğim program ile yazılmış ve derlenmiş- Z80 kodu c64'te 49152'den itibaren hazır olacak. (Bu arada C64 60K RAM + 4K IO moduna getirilmiş olacak)
Projemin son şekline göre bir PIC üzerinden Z80'i /BUSREQ girişi üzerinden disable ederek, Z80 sistem Ramına 0000h adresinden itibaren kısa bir loader yüklenecek.
PIC ile C64'ün /DMA girişi üzerinden 6510 disable edilecek. Son olarak Z80 serbest bırakılarak sistem ramina yüklenen loader çalışcak. Loader ise Z80 sistemine IO olarak bağlanan C64 ramindeki 49152'den başlayan programı, Z80 sistem ramine yine 49152'den itibaren yükleyerek, bizim C64 üzerinde derlediğimiz programı çalıştıracak.
 
BOOTLOADER

0000h - DI
0001h - LD DE,4096  ;maksimum program uzunluğu
0004h - LD BC,49152 ;kaynak ve hedef adres
0007h - IN A,(C)
0009h - LD (BC),A
000Ah - INC BC
000Bh - DEC DE
000Ch - LD A,D
000Dh - OR E
000Eh - JR NZ,0007h
0010h - JMP C000h

Projeye göre PIC ile max. 4K'lık bir programı Z80 Ramına aktarmak mümkün.
İlk kodları C64 üzerinde yazmak daha mantıklı. Yoksa her seferinde PIC'i programla devreye tak çalıştır zor olacak.
İlk kodlar klavye okuma, ekrana karakter basma, load-save rutinleri olmak zorunda. Hatta basit bir line assembler olursa bunu Pic'e yazıp sistemi her açışta hazır olur. Böylece C64 üzerinde Z80 kodlarını derlemeye gerek kalmaz.
Logged
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #3 : Nisan 24, 2012, 09:29:43 ÖÖ »

Hades yapmak istediğini anlayabilmek için yazdıklarını birkaç kez okumak gerekiyor eheh. Bakalım anlayabilmiş miyim, yapmayı düşündüğün z80 sistemi için gerekli olan işletim sistemini geliştirebilmek için kodu her seferinde rom'a flash'e pic'e yazmaya çalışmak yerine 64'ün ram'ini kullanacaksın değil mi, süper fikir. Tamam OS kodunu 64'de 49152'de bulundurarak z80 sistemine aktarıp çalıştır ama kodu 64'de yazmaya çalışmak yerine pc'yi kullanman iyi olur. Sen spin'cisin zaten, OS kodunu spin assembler'da yaz ve obje kodu olarak kaydet. Sonra 64'de örneğin c64tpc'yi kullanarak pc'deki koda erişip direkt olarak 49152'ye yükle.

64'den pc'ye direkt olarak erişim için bir yol daha var benim kullandığım ama biraz uğraştırır. Network kartlı bir dos pc hazırlıyorsun ve üzerinde 64hdd ve ms network client'ı çalıştırıyorsun. Bir switch üzerinden windows pc'de paylaşıma açılmış bir klasöre map'liyorsun. 64'ü xe1541 kablusuyla dos pc'ye bağlayıp onun üzerinden windows pc'ye ulaşıyorsun. Bu şekilde atıl durumdaki eski bir pc de değerlendirilmiş oluyor.
Logged
blackturk
Uzman
*****
Mesaj Sayısı: 1.283



Üyelik Bilgileri
« Yanıtla #4 : Nisan 24, 2012, 18:32:21 ÖS »

Hades selam ben blackturk (serkan) bu akşam evde kucuk bır deneme yapayım burdan yazarım
Logged

A1200 | APOLLO 1240 32 MB | CNET PCMCIA | SYSINFO SPEED TEST 30 MIPS
SM1,SEGA MEGA CD,SM2,SMS II,Sega Saturn Mod ve AR 4MB,PSX Mod ve Mpeg ,PSX2 ,SNES ,ATARI 800XL,SPECTRUM 128K +2,YAMAHA CX5M MSX,ATARI 520 STFM,1040 STF,C64,C128,1541 II,1571,RAM 1764 ,A500,A500+,A600,A590,IDE68k,2X1084S,1084P
hades
Üye
****
Mesaj Sayısı: 394



Üyelik Bilgileri
« Yanıtla #5 : Nisan 24, 2012, 20:02:00 ÖS »

Ufak bir düzeltme yapayım. Kullacağım Pic'in port sayısı nedeniyle Pic'ten aktarılacak program en fazla 2K olabilir.

Kodları Pc'de Vice ile yazıp .d64 imajına kaydettikten sonra bunu SD kart ile gerçek C64'e yüklersem işim daha kolay olur. Ama hem PC ile C64 farklı odalarda, hem de herşeyi gerçek makina ile yapmak istiyorum. Zaten elimde sadece Retro Replay ve MMC64 var.

Devrede 8bit ide, rtc ve sd/mmc interface olacak ama bunların rutinleri en sona kalacak.

Klavye tarama, karakter basma, load-save rutinlerini C64'ten convert edeceğim. load-save için 1541 kullanılacak. Temel işletim sistemi bittiğinde fazla komut olmayacak. Hatta bu komutlar kartuşlardaki gibi F tuşlarına yüklenmiş olacak.

Serkan, bekliyorum denemelerini.   
Logged
Atacan
Deneyimli
*****
Mesaj Sayısı: 1.241


Msx


Üyelik Bilgileri WWW
« Yanıtla #6 : Nisan 24, 2012, 23:08:56 ÖS »

Ben en son Zıplayan top yapmıştım sene 86'mıydı neydi
Logged

Saygılar....


'80 Doğumlu İzmir'li
blackturk
Uzman
*****
Mesaj Sayısı: 1.283



Üyelik Bilgileri
« Yanıtla #7 : Nisan 24, 2012, 23:11:32 ÖS »

basic code kısa yazdım.deneme amaclı mem adres içeriği birde assembly code mem poke'luyoruz gibi... mi ? acaba basic listesi aşağıda.

1 REM Z80 OPCODE DENEME
5 PRINTCHR$(147):OPCODE$=CHR$(32):ABASE$="10000"
10 MEM=49152:DIM OPC(255):INDEX=0
11 I=0
15 MADRS$=MID$(STR$(VAL(ABASE$)+INDEX),3,4):OPCODE$="NOP"
20 PRINTMADRS$;":";"000";
25 INPUT".";OPCODE$
40 READ OCLS$
50 FOR J=1 TO LEN(OPCODE$)
60 IF MID$(OCLS$,J,1)=MID$(OPCODE$,J,1)THEN GOTO 75
70 GOTO 82
75 NEXT J
80 IF LEN(OPCODE$)=J-1 THEN 85
82 I=I+1:IF I<2 THEN 40
85 RESTORE:POKEMEM,I
90 INDEX=INDEX+1:MEM=MEM+INDEX
100 IF INDEX<2 THEN 11
105 PRINTCHR$(147)
110 PRINT"0000:   ADRES DEGERI ";PEEK(49152)
120 PRINT"0001:   ADRES DEGERI ";PEEK(49153)
1000 DATA NOP,JMP,RET
« Son Düzenleme: Nisan 24, 2012, 23:57:41 ÖS Gönderen: blackturk » Logged

A1200 | APOLLO 1240 32 MB | CNET PCMCIA | SYSINFO SPEED TEST 30 MIPS
SM1,SEGA MEGA CD,SM2,SMS II,Sega Saturn Mod ve AR 4MB,PSX Mod ve Mpeg ,PSX2 ,SNES ,ATARI 800XL,SPECTRUM 128K +2,YAMAHA CX5M MSX,ATARI 520 STFM,1040 STF,C64,C128,1541 II,1571,RAM 1764 ,A500,A500+,A600,A590,IDE68k,2X1084S,1084P
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: