Eline sağlık
@hades, güzel bir donanım inceleme ve benim gibi donanımcı olmayanlara Bilal'e anlatır gibi anlatma olmuş.
Öncelikle;
out (123456789),a
ld hl,(655361)
gibi şeylerin derlenmesi garip değil. Uyarı veriyor olabilir derleyici ama derlemesinde bir gariplik yok. Alt 8 bit, alt 16 bit'i alıyordur. Bu genellikle derleyici direktiflerinde sorun yaşanmasın diye böyle bırakılabiliyor. Bazı derleyiciler hata, diğerleri uyarı üretiyor. Hiç uyarı üretmeyenleri de vardır tabii. O derleyiciyi geliştiren kişinin kontrolünde olan bir şey sonuçta.
Özellikle şu tür durumlar için var bu. Mesela iki kere tekrar edecek 256 byte'lık tablo yaptık diyelim, basit örnek olması açısından anlamsız biçimde 0-255 arası değerleri üretelim. Pseudo kod olarak yazıyorum.
for i, 512 {
db i
}
bu iki kez 0-255, 0-255 üretebilsin diye overflow'u hiçe saymış (i & 0xff) gibi bir şey yazmana gerek kalmasın diye böyle bırakmışlardır, yani "it's not a bug, it's a feature" olayı.
Pasmo'nun dokümanlarına baktım, dediğim şey var.
https://pasmo.speccy.org/pasmodoc.htmlDB
Define Byte. The argument is a comma separated list of string literals or numeric expressions. The string literals are inserted in the object code, and the result of the numeric expression is inserted as a single byte, truncating it if needed.
Nümerik değerler tek byte olarak kabul edilir ve gerekirse kırpılır demişler. Bu opcode parametreleri için de geçerli belli ki.
Ben SjASMPlus'da daha beterlerini yaşıyorum. Bırak overflow'u adamlar fake opcode desteği eklemişler, geçen bahsetmiştim hatırlarsan. Olmayan opcodeları da derliyor. Z80'e hakim olan kişiler açısından sorun olmasa gerek ancak opcode parametrelerini yeni ezberlemeye başladığım için her defasında dokümantasyona bakmak zorunda kaldım ilk başlarda.
REU konusuna geri dönecek olursak, ZX Spectrum için böyle bir şey yapabileceğinden eminim. Mutlaka açık kapı bırakmışlardır, en basitinden daha sonra kendileri RAM expansion satmak için ticari açıdan onu düşünmüş olacaklarını zannediyorum. Yani bence günümüzde teknik detayları çözdükten sonra çok kolay yapar, ucuza da üretirsin. Biliyorsun, 80 başlarında RAM inanılmaz pahalı bir şey. O yüzden cihazlar üretildikten bir süre geçip, o seviyedeki RAM fiyatları ucuzlayınca RAM expansionlar yaygınlaşmış ancak zaten o sırada 16 bit dönemi de başlamış olduğu için çoğu platformda pek satamamışlar. ZX Spectrum'u bilemiyorum tabii. Ama Atari 800 serisinde RAM expansion çok yaygınmış, çoğu kişide varmış. Commodore 64'de bizler 64k ile yetinmeyi bilmişiz.
Tabii ZX Spectrum 128k modeli hali hazırda varken 48k'ya RAM expansion yapmak ne derece gereklidir, henüz ZX Spectrum dünyasına yeni yeni aşina olan birisi olarak çok fazla kestiremiyorum.
Bir diğer kafamdaki soru da şu oldu. Senin yapacağın RAM expansion double buffer yapmamızı kolay biçimde sağlayabilecek mi? Mevcut RAM adreslerini ($4000, $5800 vb) bir hardware registerıyla switch edip expansion memory'e direct access edebilecek miyiz? Mümkün müdür bu, ne dersin?