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ımKendini değiştiren (self modifying) BASIC
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: Kendini değiştiren (self modifying) BASIC  (Okunma Sayısı 240 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 3.793


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« : Ekim 28, 2018, 05:07:35 ÖÖ »

Mega65 projesininin blog sayfasında kendini değiştiren Basic kodları ile ilgili bir yazıya rastlayınca kendim de denemek istedim. Çok anlamlı bir iş yapmamakla birlikte aşağıdaki gibi program ortaya çıktı. Kenarda bulunsun.

Püf noktası program içinde hatalı sentaksta bir kod yazmaya dayanıyor. BASIC hafızasında  bu hatalı koda ait tokenları arayarak değişecek kod tespit ediliyor ve olaylar gelişiyor. Örnek kod aşağıda.   

Kod:
10 gosub 9000 : rem gosub adresini bul
20 print "{clear}{white}"
30 print "kendini degistiren basic"
40 ln=1000 : gosub 9100 : rem adresi guncelle
50 gosub,12345
60 goto 50

999 rem ******************* subrutinler
1000 print "bu subrutin sadece bir kez calisir"
1010 ln=2000 : gosub 9100
1020 return

2000 print "bu subrutin de oyle"
2010 ln=3000 : gosub 9100

3000 poke ja,44 : rem virgulu tekrar koy
3010 end
 
8999 rem
9000 rem *********** gosub adresini bul
9010 for ja=2048 to 40959
9020 if peek(ja-1)<>141 or peek(ja)<>44 then next
9030 return
9100 rem ****** gosub adresini degistir
9110 ln$=str$(ln)
9120 for i=0 to 5: poke ja+i,32 : next
9130 for i=1 to len(ln$): poke(ja+i),asc(right$(left$(ln$,i),1)) : next
9140 return

Mevzu bahis blog yazısı.
http://c65gs.blogspot.com/2018/04/gosub-variable-in-c64-basic.html

* smodify.prg (0.57 KB - Yükleme: 8 kez.)
Logged

Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: