Commodore sayı 23, sayfa 56
Sayfanın metni

Sayfa 56

“B-E kanal araç track

Makina dili programlar belli adreslerde çalıştığı için, programın hangi buffer'a doldurulacağı da önemli. 0-3 arası buffer'lar 1541'in içinde $300- $7FF (768-2047) adresleri arasını kaplarlar ve 256'şar byte uzunluktadırlar. Örneğin 2 numaralı olan $500- $5FF arasını kaplar. Eğer disketinizde 19/02 blokunda bu adres aralığında çalışacak bir makina dili program varsa, aşağıdaki program onu yükleyip çalıştıracaktır (isterseniz gerçekten denemeyin...):

10 OPEN 1,8,15 20 OPEN 3,8,2,* 42” 30 INPUT #1,A 40 IF THEN PRINT “BUFFER DOLU!”': GOTO 60 50 PRİNT # 1,“B-E 2 0 19 02” 60 CLOSE 3 70 CLOSE |

MEMORY-READ (M-R) Bu bellek okuma komutu ile, 1541? in ROM ve RAM'indeki bilgileri okuyabilirsiniz. Formatı:

“M-R CHRS(LO) CHRS$(HI)”

Örneğin 1541'in RAM'inin 762 ve 764 numaralı adreslerinde o an içeride bulunan disketin kaç boş blokunun olduğu yeralır. İsterseniz onu okuyalım:

10 OPEN 1,8,15,*1” 20 A— 762 30 HI—INT(A/256) 40 LO— A-256*HI 50 PRİNT.#1,“M-R”; CHRS(LO);CHRS$(HI) 60 1,A$ 70 Al - ASC(A$ 4 CHR$(0)) 80 A—764 90 HI—-INT(A/256) 100 LO — A-256*HI 110'PRİNT #1,“M-R”; 120 GET # 1,B$ 130 A2 — ASC(B$ 4 CHR$(0)) 140 PRİNT Al -256*A2 150 CLOSE 1

Artık programın incelenmesini size bırakıyorum. Bu komuta bir parametre daha ekleyerek kaç byte okumak istediğinizi de belirtebilirsiniz. Onu da aşağıdaki örnek ile görelim. Bir disket initialize edilince, disketin adı $780'den itibaren 1541'in belleğine yazılır. $790'ü LO/HI olarak ayırırsak 144/7 elde ederiz.

10 OPEN 20 PRİNT CHRS$(7);CHRS(16) 30 INPUT #1,A$ 40 CLOSE | 50 PRINT A$

Görüldüğü gibi, okunacak byte miktarı gönderilince, GET ## yerine INPUT & kullanabiliyoruz.

MEMORY-WRITE (M-W)

Bu komutla da, 1541'in RAM'indeki bazı bilgileri değiştirme imkânı vardır. Genel formatı:

“M-W CHRS$(HI) CHRS(datal) CHRS(data2)....”

LO ve HI ile M-R'de olduğu gibi RAM'daki adresi belirtiyoruz. Adet parametresi, arkadan kaç byte yazılacağını belirliyor. En fazla 34 olabiomut kanalı en fazla 40 arakter kabul eder. Bunun ilk altısı komutumuzun altı karakteri tarafından kullanılır.

lir. Bunun nedeni komut kanalının en fazla 40 karakter kabul etmesi ve bunun ilk altısının komutumuzun ilk altı karakteri tarafından kaplanması. Bir örnek görelim. Disketin araç numarası (yani 8) 119/120 adreslerinde saklanmaktadır. 119'da 120'de de 84 64 — 72 vardır. Bunu değiştirerek, 1541'e başka bir araç numarası ile hitap edebiliriz. Örneğin bunu 8 yapalim:

10 OPEN 1,8,15 20 PRİNT #1,“M-W”; 19);CHR$(0); CHRS(2);CHR$( 32); CHR$(9 4 64) 30 CLOSE | 40 OPEN 1,9,15 50 PRİNT # 1,“1” 60 CLOSE 1

Artık her türlü işlemde 8 yerine 9 kullanmanız gerekecek. Tabii, 1541'i kapatıp açarsanız tekrar eski haline döner.

MEMORY-EXECUTE (M-E)

Bu komutla da, 1541'in RAM'inde veya ROM'unda olan bir programı çalıştırabilirsiniz. Formatı:

“M-E CHRS$(LO) CHRS(HI)”

Örneğin, 1541'in işletim sisteminde $EFC9 adresinde 72 numaralı DISK FULL mesajını gönderen rutin vardır. Bunu çalıştıralım:

10 OPEN 1,8,15 20 PRİNT CHR$(201)CHRS(239) 30 INPUT #1,A,A$,B,C 40 PRINT A,A$,B,C 50 CLOSE |

İstediğimiz mesajın oluştuğunu göreceksiniz.

USER (U)

Bu komut, kullanıcının belli adreslere yerleştirdiği bir programı otomatik olarak başlatmasını sağlar. Formatı:

Buradaki X yerine A-J arası bir harf veya 1-9 arası bir rakam veya “U” gelebilir. Her defasında da başlatılacak programın başlangıç adresi aşağıdaki tablodaki gibi olur:

A VEYA U1 - $CD5F B VEYA U2 - $DC97 C VEYA U3 - $0500 D VEYA U4 - $0503 E VEYA U5 - $0506 F VEYA U6 - $0509 G VEYA U7 - $050C H VEYA U8 - $050F I VEYA U9 - $FF01 J VEYA U: - $EAA0

U1/U2 (veya UA/UB) komutlarını biliyoruz. Diğerlerinden bizim için ilginç olan UJ. Çünkü bu, 1541'i açılış durumuna getirecek RESET'i yapıyor.

10 OPEN 1,8,15 20 PRİNT #& i,“UJ” 30 FOR Il TO 1000 40 NEXT | 50 INPUT #$ 1,A,A$,B,C 60 PRINT A,A$,B,C 70 CLOSE |

30-40 arasında reset işleminin bitmesini bekliyoruz. Sonra da hata kanalını okuyoruz. Gelen mesajın 73, CBM DOS V2.6 1541,00,00 olması gerekiyor. Hoşçakalın...

Klavyeyle gezinmek için ← ve → tuşları.