Gönderen Konu: BASIC+Assembly Hello world  (Okunma sayısı 619 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ssg

  • RAAT
  • Retromanik
  • *
  • İleti: 18
BASIC+Assembly Hello world
« : 23 Mayıs 2022, 00:43:01 »
Bu Pazar @Skate'le bir ara konuştuğumuz dual mode hello world application'ını Amstrad CPC için yazdım. :) Kodları:

https://github.com/ssg/yello

Releases'ta downloadble DSK'sı da var.

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 164
Ynt: BASIC+Assembly Hello world
« Yanıtla #1 : 23 Mayıs 2022, 22:16:12 »
Başka mecrada yorum yapmıştım ama o da zaten çok kısa bir yorum olmuştu. Burada biraz daha hakkını vereyim. :)

Eline sağlık @ssg, bu tür şeyleri hep çok sevmişimdir. İncelemedim ama belli ki "Hello World" string'ini basic ve asm ortak kullanıyor. Basic listing içindeki string'i kullanman çok cici bir detay olmuş.

Belki biliyorsundur, C64'de basic listingi epey manipüle edebiliyoruz. Back space karakterleri ile silip yerine başka şeyler yazabiliyoruz. Bakıyorsun kod başka, çalıştırıyorsun alakasız şeyler yapıyor. CPC'de o tür şeyler yok sanırım değil mi?

Yıllar önce commodore.gen.tr forumunda bir örneğini göndermiştim, PNG olarak buraya da atıyorum. Bahsettiğim böyle şeyler.

Çevrimdışı ssg

  • RAAT
  • Retromanik
  • *
  • İleti: 18
Ynt: BASIC+Assembly Hello world
« Yanıtla #2 : 24 Mayıs 2022, 22:31:41 »
Eline sağlık @ssg, bu tür şeyleri hep çok sevmişimdir. İncelemedim ama belli ki "Hello World" string'ini basic ve asm ortak kullanıyor. Basic listing içindeki string'i kullanman çok cici bir detay olmuş.

Hehe evet, o yüzden PRINT'in sonundaki tırnak eksik, sıfır kontrolü başka bir karakter kontrolünden bir byte daha kısa diye :) Ayrıca binary ve BASIC entry point'leri aynı kabul ettiğimden BASIC kodunun machine code karşılığı saçma sapan opcode'lar da çalışıyor arada, tesadüfen ortalığı yamultmuyorlar. Mesela yaparken world'ün "w"sini büyük yapınca JR instruction'ına dönüşüp sapıtıyordu kod o yüzden "w" küçük harf :)

Alıntı
Belki biliyorsundur, C64'de basic listingi epey manipüle edebiliyoruz. Back space karakterleri ile silip yerine başka şeyler yazabiliyoruz. Bakıyorsun kod başka, çalıştırıyorsun alakasız şeyler yapıyor. CPC'de o tür şeyler yok sanırım değil mi?

Yıllar önce commodore.gen.tr forumunda bir örneğini göndermiştim, PNG olarak buraya da atıyorum. Bahsettiğim böyle şeyler.

Bu çok ilginçmiş C64'te olduğunu bilmiyordum. CPC'de böyle şeyler kısmen var. Birincisi BASIC kodundaki line length bilgisiyle oynayıp bir satırı olduğundan daha uzun göstererek geri kalan satırları atlatabiliyorsun. List ederken görünmüyorlar ama çalıştırdığında çalışıyorlar. @matahari de yanlış hatırlamıyorsam BASIC loader'larını böyle protect ediyordu. (BASIC'in kendi protection'ını aşmak çok kolaydı çünkü). Bir de benim bulduğum (hatırlarsanız önceki bölümde ssg kaynak eksikliğinden dünyadaki her tür kombinasyonu deneyen bir manyaktı) ve daha önce kimsenin bulmadığı belli REM karakterleriyle kodun geri kalanını list edilemez hale getiren bir teknik var: https://www.cpcwiki.eu/forum/programming/a-novel-way-to-protect-basic-programs-on-cpc464/msg191262/#msg191262

Tekniğin demosu da burada: https://www.youtube.com/watch?v=k3G7wFxylDg