Gönderen Konu: Speccy'de NMI rutini denemesi..  (Okunma sayısı 14275 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Speccy'de NMI rutini denemesi..
« : 03 Mart 2014, 22:34:58 »
Z80 için NMI servis rutini adresi $66'dır. Spectrum Rom listesini inceleyince rutinde ,$5CB0 adresinde bulunan NMI vector adresindeki değer okunuyor ve duruma göre bu vektörde tutulan adrese sıçranıyor.
Bu adrese kendi nmi rutinimin başlangıç adresini yazıyorum. Rutinimin sonunda JP $70 ile Rom'a geri dönüyorum.
Sonuç : Kod çalışmıyor.
Ref sana iş düşüyor. wos taki Speccy code guruları ne cevap verecek.

Kod: [Seç]
;---------------------------------------------------
; NMI CODE EXAMPLE
; 03-03-2104
;---------------------------------------------------

org $8000

di
ld hl,nmiadr
ld ($5cb0),hl
ei
halt

x ; jr x
ret

nmiadr ld hl,$4000
inc (hl)
jp $70

end $8000

Çevrimdışı witchdoktor

  • RAAT
  • Normalleşmiş Retroman
  • *
  • İleti: 757
Ynt: Speccy'de NMI rutini denemesi..
« Yanıtla #1 : 03 Mart 2014, 23:05:02 »
Klasik bir 'çalışmayan kod' :)

Konuyla alakasızım ama teorik olarak kurgulanan birçok kodun pratikte çalışmadığının sıradan bir örneği...

bkz. zamanında yaptığım bir sürü kod denemeleri

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Speccy'de NMI rutini denemesi..
« Yanıtla #2 : 04 Mart 2014, 07:37:58 »
Kahvaltı yaparken cevabı buldum. NMI hw kaynaklı olduğu için benim kod çalışmıyor. Exp.slotta nmi girişini "0" yaparsam rutin çalışacaktır. Yoksa yamuluyor muyum?

Çevrimdışı witchdoktor

  • RAAT
  • Normalleşmiş Retroman
  • *
  • İleti: 757
Ynt: Speccy'de NMI rutini denemesi..
« Yanıtla #3 : 04 Mart 2014, 09:40:13 »
Kahvaltı yaparken cevabı buldum. NMI hw kaynaklı olduğu için benim kod çalışmıyor. Exp.slotta nmi girişini "0" yaparsam rutin çalışacaktır. Yoksa yamuluyor muyum?

C64'deki RESTORE tuşunda olduğu gibi bir NMI kaynağı mı gerekiyor yani?

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Speccy'de NMI rutini denemesi..
« Yanıtla #4 : 04 Mart 2014, 09:44:52 »
Evet. Aynen öyle. Bazı şemalarda Nmi hattına bağlı bir anahtar var.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2866
  • Advanced User Simulator
    • ae unutmadan
Ynt: Speccy'de NMI rutini denemesi..
« Yanıtla #5 : 05 Mart 2014, 23:19:59 »
bir de şimdi aklıma geldi. Eğer testleri gerçek bir spectrumda yapıyorsan hiç çalışmayabilir. Z80'lerin NMI hattı olan M1 hattında sinclair'in üretildiği yıllarda bir üretim sorunu olmuş. Birçok z80 özellikle amstrad üretimi gri +2'lerde NMI çalışmayabiliyor. Henüz başıma gelmedi ama ne olur ne olmaz diye elimde yedek yeni üretim z80 bulunduruyorum.

Bu arada ben anlamamışım galiba, şimdi mesajını tekrar okuyunca jeton düştü. Bir emülatörde NMI tetiklemek için menülerde seçenekler oluyor. Ordan NMI tetiklediğinde rutinin çalışacaktır. Yoksa default IM1'de takılır CPU. Elbette NMI sadece bir donanım tarafından tetiklenebilir.

misal:


Yoksa şimdi mi yanlış anladım? anlamadım valla. :)

Bu arada bilmeyenler için, NMI, non maskable interrupt demek. Diğer interrupt modları yazılım kontrollüdür IM modları değiştirebilirsiniz, fakat NMI her durumda hazır beklemektedir, z80 üzerindeki bir pinden tetiklenir ve işlemci işi gücü bırakır, sadece o anda olduğu ProgramCounter'ı stack'e yazar ve #0066'ya (Dec 102) zıplar. Tabii orda zx spectrum ROM'u var ve değiştiremiyoruz, bu sebepten o adreste bir NMI yordamı bulunuyor. Elbette birçok donanım (multiface, interface1, opus discovery vs.) rom'u gölgeleyerek o bölgeleri değiştirir.