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)
Sayfa: [1] 2   Aşağı git
Yazdır
Gönderen Konu: Bir basic sorusu  (Okunma Sayısı 12993 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« : Ocak 02, 2019, 01:18:13 ÖÖ »

Aşağıdaki program ne yapar?

1 t=828:p=56320:for x = 0 to 7:for addr = t to t+63
2 y = peek(p) and 16 : if y>0 goto 2
3 bit = peek(p) and 1 : poke addr,  (peek(addr) and 255-2^x) or (bit * 2^x)
4 next : next : sys t
Logged

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

twitter | blog
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.733


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #1 : Ocak 02, 2019, 08:25:38 ÖÖ »

Bu toplantıda bahsettiğin program değil mi? Joystickten girilen 64 baytlık kodu 828 adresinden başlayarak belleğe alıp çalıştırıyor. 512 bit tek tek girilmesi lazım. Datayı elle mi giriyorsun, yoksa ardunio'dan falan mi girilecek?
« Son Düzenleme: Ocak 02, 2019, 12:17:54 ÖS Gönderen: wizofwor » Logged

blackturk
Uzman
*****
Mesaj Sayısı: 1.251



Üyelik Bilgileri
« Yanıtla #2 : Ocak 02, 2019, 11:53:29 ÖÖ »

Joy port üzerinden bit bit data alınıp,belleke yerleştiktikten sonra çalıştırdığını görüyoruz. wiz of wor 'un  dediği gibi.
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
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #3 : Ocak 02, 2019, 12:20:58 ÖS »

Bravo, doğru tahmin 

Toplantıda bahsetmedim sanıyorum. Öncesi de var gerçi muhtemelen forumda
bahsetmişimdir anca olay tamamen toplantıda bana pas edilen kontorland marka çakma famicom gamepad'ler üstünden şekillendi. Önce dedim bunları C64'e uyarlayayım bir işe yarasınlar. O noktada da cerrahi müdahaleden ziyade arabirim tadında bir şey yapayım dedim arduino ile.

Olay zaten basit, aşağıdaki linkte koduna kadar var,

https://www.allaboutcircuits.com/projects/nes-controller-interface-with-an-arduino-uno/

Bunu mini proje şeklinde forumda ayrı bir başlıkta açıklayacağım.

Bunu yapınca sıra esas emelime geldi, tahmin ettiğiniz gibi o basic program joystick'ten gelen sinyallere göre hafızaya program yükleyip çalıştırıyor. Sadece ateş tuşuna kısaca basıldığında 1, Yukarı tuşu ile beraber ateş tuşuna basıldığında da 0 bit'ini en anlamsız bitten en anlamlı bit'e doğru tüm transfer edilecek byte'lara diziyor.

Bu 64 byte'lık kısım önyükleyici gibi bir şey olacak, 64 byte'lık assembly kodu çalıştığında daha büyük bir alana daha hızlı (fire yine senkronizasyon için kullanılıp 4 yön tuşu data transferi için kullanılacak) veri transferi yapacak. Kod sığmazsa (sığacağını düşünüyorum) bir stage daha ekleyebilirim, 64 byte'lık olan 256 byte yükler o da esas payload'ı yükler gibi... Tabii burada amaç basic'te olabildiğince az data yükleyip hızı arttırmak.

Esas niyetim de aslında basic ve/veya kernal'i exploit etmek. İlk mesajımdaki basic programın çok çok daha azını yazıp kullanıcının yükleme yapabilmesi. Aklımda bir iki fikir var, birincisi klavye buffer'ını kullanarak diğeri de bir bellek alanı düzenli bir şekilde spam ederek nihayetinde belirli bir byte dizisine ulaşmak şeklinde (ikisi de henüz fikir düzeyinde)  İkincisi Z80 boot etmek için kullanılan sistematiğe benzer bir şey olacak. (http://www.z80.info/jmz8boot.htm)
Logged

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

twitter | blog
Cengiz Demir
Uzman
*****
Mesaj Sayısı: 3.699



Üyelik Bilgileri
« Yanıtla #4 : Ocak 02, 2019, 14:19:00 ÖS »

@i_r_on.
Tüm yazdıklarını okudum, anlamadım. Ama okumak hoşuma gitti Kahkaha

Her ne yapıyorsan kolay gelsin
Logged

Skate
Uzman
*****
Mesaj Sayısı: 1.477


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #5 : Ocak 02, 2019, 14:20:29 ÖS »

Soru:

- Neden basic?

Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #6 : Ocak 02, 2019, 14:34:13 ÖS »

Soru:

- Neden basic?



Bu bir nevi chain loader gibi bir şey olacak, basic sadece ilk yükleyiciyi yükleyecek, o belki diğer yükleyiciyi falan gibi..

Kafamda düşündüm, DATA statement'ları ile falan assembly'i basic'e gömsem yine aşağı yukarı aynı sayıda girdi gereksinimi olur dedim. Tabii pratiğe döküldüğünde daha az olabilir, denemedim. İlk mesajdaki basic kodu da muhtemelen daha çok optimize edilir.

Ama benim derdim daha çok exploit etme yönünde... daha kısa bir statement yazdırayım kullanıcıya, arkada olaylar gelişsin şeklinde. dediğim gibi düşünce seviyesinde ancak kafamda ilerleyebileceğim bir kaç baz nokta var.

Tabii olay fantazi tamamen, son kullanıcıya esprisi olan bir ürün falan çıkmayacak muhtemelen buradan.
Logged

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

twitter | blog
Oğuzhan
Uzman
*****
Mesaj Sayısı: 4.354


There's no place like 127.0.0.1


Üyelik Bilgileri
« Yanıtla #7 : Ocak 02, 2019, 14:49:26 ÖS »

son kullanıcıya esprisi olan bir ürün falan çıkmayacak muhtemelen buradan.

1 adet lehimli 1 adet lehimsiz alabilir miyim.

Pardon ya alışkanlık oldu
Logged

Amiga 500/500+/1200
Commodore 64
Atari 1040STe/Falcon 030/Jaguar/2600
Roland MT-32 Rev.A&B/SC-88/SB-55/MT300s
Sony PS 1-2-3-4-5/PSP/PVM 20"/9"
Sega SMS1-2/MD2/Saturn/Dreamcast/GG
Nintendo NES/SNES/DMG/GB Color/GBA SP
Skate
Uzman
*****
Mesaj Sayısı: 1.477


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #8 : Ocak 02, 2019, 15:20:42 ÖS »

Neden basic dememin nedeni şu.

Kod:
0 a=53265:d=128:v=53280
1 wait a,d:pokev,9:pokev,8:pokev,7:pokev,5:pokev,4:pokev,3:goto 1

Tek karakterlik parametreleri olan bir poke komutu CPU'nun yaklaşık %14.5'unu yiyor. Kahkaha Assembly karşılığı ise %0.03 yani on binde üç yiyor. Arada 500 kat falan hız farkı var. Projenin amacını ben de tam anlayamadım ama işin içinde "veri transferi" lafı geçiyorsa basic o konuya helper tool olarak bile yaklaşmamalı. Basic'in tek görevi bir adet SYS ile sınırlı kalmalı.


* basic_speed.png (2.89 KB, 384x272 - Görüntüleme: 1033 kez.)
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #9 : Ocak 02, 2019, 16:25:28 ÖS »

Burada amacım aslında bu üçkağıdı çevirebilmek için kullanıcının girdiği karakter miktarını mümkün olan en kısa hale getirmek.

Basic'teki zaman açısından oluşan overhead'e tabii bakmak lazım... Şimdiye kadar hiç performans ölçümü yapmadım ancak çok yavaşmış yahu... integer değişken kullanırsak bir miktar hızlanır. Örnek kodumu yazarken de çok önemsemedim, hatta testini vice'ta numpad'i joystick olarak kullanıp 3 byte göndererek yaptığım için tam tersi bir handikapım oldu, kod hızlı olunca tek basışta iki bit transferi söz konusu olduğu için yavaş çalışıyor olması tercih sebebi oldu.

Akşam assembly'de yazayım bakayım, belleğe basic ile girildiğinde daha kısa çıkıyor mu.
Logged

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

twitter | blog
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.733


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #10 : Ocak 02, 2019, 16:38:45 ÖS »

Program elle girilecekse BASIC'in yavaşlığının bir önemi yok. Hızlandırmak için 4 yönü de kullanabilirsin. Yönler ilgili biti açar, ateş'le bir sonraki nibble'a geçersin.

ilk nibble: yukarı 0, aşağı 1, sol 2,  sağ 3, ateş ok.
ikinci nibble: yukarı 4, aşağı 5, sol 6,  sağ 7, ateş ok.

gibi.
Logged

i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #11 : Ocak 02, 2019, 16:54:37 ÖS »

Program elle girilecekse BASIC'in yavaşlığının bir önemi yok. Hızlandırmak için 4 yönü de kullanabilirsin. Yönler ilgili biti açar, ateş'le bir sonraki nibble'a geçersin.

ilk nibble: yukarı 0, aşağı 1, sol 2,  sağ 3, ateş ok.
ikinci nibble: yukarı 4, aşağı 5, sol 6,  sağ 7, ateş ok.

gibi.

Elle girilirse MDE'ye bile alternatif olmaz 
NES joystick adaptörü üzerindeki arduino pro mini yapacak aktarımı.

Bu arada vice'ın klavyeden joystick emülasyonu sıkıntılı. Hem yukarı hem de aşağı tuşuna aynı anda basmayı algılamıyor meret.
Logged

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

twitter | blog
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.118


Üyelik Bilgileri WWW
« Yanıtla #12 : Ocak 02, 2019, 17:47:29 ÖS »

Aslında josytick port 1'de ilgili bitleri yukarı çekince, kernal klavye taraması yaparken shift-run/stop basılıymış gibi okuma yapabiliyor. Eğer o sırada datasette portuna bağlı bir Arduino ile ilgili kodun .wav dosyası çalınırsa istenen boot işlemi gerçekleştirilebilir.
Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
Cengiz Demir
Uzman
*****
Mesaj Sayısı: 3.699



Üyelik Bilgileri
« Yanıtla #13 : Ocak 02, 2019, 17:54:30 ÖS »

@i_r_on

Ben de; configdeki South west, South east vb. gibi ara yönleri niye koymuşlar ?
Zaten iki tuşa aynı anda basınca olmuyor mu diyordum.. Demek ki bazı durumlarda gerekliymiş Kahkaha

Ek: Pardon yukarı ve aşağı demişsin. Ben ya yanlış okudum, ya da yanlış algıladım yazdıklarını... Kahkaha

« Son Düzenleme: Ocak 02, 2019, 17:56:20 ÖS Gönderen: cdemir » Logged

i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #14 : Ocak 02, 2019, 18:03:17 ÖS »

Aslında josytick port 1'de ilgili bitleri yukarı çekince, kernal klavye taraması yaparken shift-run/stop basılıymış gibi okuma yapabiliyor. Eğer o sırada datasette portuna bağlı bir Arduino ile ilgili kodun .wav dosyası çalınırsa istenen boot işlemi gerçekleştirilebilir.

Kaset portundan proper yükleme yapabilen cihazlar var (tapecart, tapuino vesaire)
Benim amacım sadece joy portu kullanmak ama yükleme için kullanıcıya minimum kod yazdırmak.
Logged

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

twitter | blog
Sayfa: [1] 2   Yukarı git
Yazdır
Gitmek istediğiniz yer: