program ss
💻 Bilgisayar

Makine Kodu ile Red Alert 3 Yazdık

Tamam tamam yazmadık. Abarttım ben.

Ama ASM ile yılan oyunu yaptık. 8051 serisi mikrodenetleyicilerde çalışacak bir yılan oyunu. Sırf ASM ile.

Vallahi boş işler yapmıyoruz. Ödev bu, ondan yaptık. 😀

Evet C gibi bir dil varken, bizden inatla ASM’de yazmamızı istediler, yanlış anlamadınız.

Yo yo, C’yi derste de gördük. Gösterdiler yani. Ama yine de inatla ASM’de yazmamızı istediler.

Vallahi ben anlamadım mantığını. Nedenini sordum, “Biz öyle uygun gördük.” dediler.

Cidden.

Hiçbir okurumu inandıramadım. Özlem’e sorun. İnanırsınız. Zaten takım arkadaşım da o. Kod yazdığıma falan inanmazsanız ona da inandırır.

Ödev

Her neyse… ASM ile bizden oyun istediler. Derste C görmemize rağmen hem de. Uğraşmazsak olmaz ya!

Biz de tasarladık. Net 15 saatimizi aldı. Hata ayıklarken canımız çıktı. Programı yazarken bize derste gösterilen Linux üzerinde çalışan MCU IDE isimli yazılımı kullandık. Ama program öyle yavaş ve öyle sorunluydu ki, defalarca çöktüğü gibi, mikrosaniyelik işi yapması saniyeler alıyordu. Yani görüp görülebilecek en kötü IDE’lerden biriydi.

error

En az beş altı defa çöktü. Ve biz bu IDE’de yılan yazdık!

keilDaha doğrusu yazamadık ve bir süre sonra FxDev’den yardım isteyince, bize Windows’ta çalışan ve adam gibi çalışan, orası burası çökmeyen ve yazdığımız kodu 8051’e göre gerçekzamanlı işleyebilen bir yazılım önerdi: Keil uVision.

Kodu hemencecik Windows’a taşıdık ve bu programda tasarıma devam ettik. Canımız çıka çıka, saya söve ödevi bitirdik.

Kontrol

Ödev kontrolünde hocamız bize bu ödevin bize ne kattığını sordu. Ben de açık açık söyledim kendisine: “Açıkçası üç günümüzü boşa harcamaktan başka bir şey katmadı.” Meğerse öyle değilmiş… Bu ödev bize, eğer ileride alt seviyeli işlerle meşgul bir yerde çalışırsak (mesela embedded) o zaman işlerin nasıl gittiğine dair fikrimiz olmasını sağlayacakmış.

Kimse bu ödevi vermeden önce, gelecekte ne yapacağımı sormadı ki bana! Ben gelecekte alt seviyeyle falan uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman? Bunun cevabı yok tabi. Aslında var: Finali %20 etkiliyor da ondan yapıyorum.

Neyse, böyle bir ödevi yaptık.

program ss

Teknik Bilgiler

Biraz da teknik bilgi verelim şimdi.

  • Program klasik bir yılan oyunudur.
  • Oyun 40H ile 7FH bellek bölgeleri arasında oynanmaktadır.
  • Elmalar 0FFH’tir.
  • Yılan’ın başı 01H ve devamı 02H, 03H.. diye gitmektedir.
  • Veriler Port 0’dan alınır.
  • 0.0 sol, 0.1 sağ, 0.2 yukarı, 0.3 aşağı yönlerini kontrol eder. Aynı anda iki tane girişe basılmamalıdır. Basılırsa sistem bir tanesini kabul eder, diğerini yok sayar.
  • 0.4 yılanı yavaşlatır, 0.5 hızlandırır.
  • Yılanı kontrol etmek için yön tuşuna sürekli basmanız gerekmemektedir. Hiçbir tuşa basmazsanız aynı yönde devam eder.
  • Yılan sola giderken bir anda sağa gidemez. (180 derece dönüş olmaz.)
  • Oyun tahtasında sınır yoktur. Bir taraftan çıkınca öbür taraftan girer.
  • Elmalar, T1 zamanlayıcısındaki MOD2 sayacı ile rastgele üretilir.
  • T0, MOD1 yılanın hızını ayarlamak için kullanılır.
  • Oyun yılan kendine çarpınca biter.
  • Çarpışmanın olduğu yer 0FEH ile gösterilir.
  • Skor oyunun sonunda bilumum registerlara ve aküye yazılır.
  • Skor, yenilen elma sayısıdır.
  • Elmalar GDO’lu değildir.

Bitirirken

Bu kadar incik cıncık özelliği olan bir ödevi, zaten kısıtlı ve değerli olan vaktimizde bize yaptırılmasının yanlış olduğunu düşündüğümü tekrar söylemeden geçemiyor ve oyunun ödev metinini, raporumuzu ve kaynak kodumuzu aşağıda paylaşıyorum.

Teknik birkaç ayrıntıya rapordan ulaşabilirsiniz.

Kaynak kodları (olur da anlarsanız 😀 ) istediğiniz gibi kullanabilirisiniz. Kodları indirmek istemezseniz her zamanki gibi yazının sonunda bulabilirsiniz.

Kodlar

; YILANIN BASINI KUCUKKEN EZECEKSIN YEGEN (16:1 )
MOV 63H, #001H ;YILANIN BASLANGIC KONUMU
MOV 64H, #002H ;YILANIN BASLANGIC KONUMU
MOV R2, #00H   ; YILANIN GIDECEGI YON 00H:sol, 01H:sag, 02H:ust, 03H:alt -Default olarak soldan baslatilir.-
MOV R6, #002H  ;YILANIN BASLANGIC UZUNLUGU
MOV 008H, #0100D  ;BASLANGIC HIZI

; ZAMANLAYICIYA AIT SURUYLE KOD
BASLA:
MOV R7, 008H ;Baslangic hizi R7 registerina atilir. 

ZAMANLAYICI:
MOV 16H, #0FFH
IC_ZAMANLAYICI:
MOV TMOD, #00100001B ;ZAMANLAYICI 1 MOD2'DE ZAMANLAYICI ZAMANLAYICI 0 MOD 1'DE
MOV TH0, #0FFH ;Zamanlayici 0'ın donme sayisi TH0 ve TL0 ile ayarlanir.
MOV TL0, #0FFH
MOV TH1, #63D ;Zamanlayici 1'in donme sayisi TH1 ve TL1 ile ayarlanir.
MOV TL1, #63D
SETB TR0 ; Zamanlayici 0 calismaya baslar.
SETB TR1 ; Zamanlayici 1 calismaya baslar.

; YILAN HIZINA GORE BEKLEMEK
BEKLE: JNB TF0, BEKLE 
CLR TF0 
DJNZ 16H, IC_ZAMANLAYICI

DJNZ R7, ZAMANLAYICI



; EKRANA RASTGELE ELMA KOYMA (ELMALAR FFH)
; GUNCEL ELMANIN YERI O9H ADRESINDE TUTULUR. BU ADRESTE 00 VARSA ELMA YOK DEMEKTIR.
; EGER ELMA YOKSA BIR TANE RASTGELE YARATILIR VE BELLEGE FFH OLARAK ISLENIR.

MOV A, 09H
JNZ PORT_KONTROL

  MOV A, R6
  SUBB A, #64D
  JNZ ELMA_YARAT
  LJMP BITTI

  ELMA_YARAT: ;ELMA YARAT
  MOV R0, TL1;SAYACTAKI DEGERI (YENI ELMA KOORDINATINI AL)
  MOV A,@R0 ;ELMANIN OLUSTURULMASI DUSUNULEN NOKTANIN ICI A'YA ATILIR.
            ;BU NOKTADA 00H DISINDA BIR SEY VARSA, YILANIN USTUNDE ELMA OLUSTUYORUZ DEMEKTIR.
  JNZ ELMA_YARAT
	;BU NOKTADA ARTIK ELMAYI YARATABILIRIZ
  MOV @R0, #0FFH
  MOV 09H, R0
  JMP PORT_KONTROL


; PORTTAN BILGI ALIP GIDILECEK YONE KARAR VERMEK VEYA HIZ ARTIRIP AZALTMAK
PORT_KONTROL:
MOV P0, #0FFH ;P0 giris portu olarak ayarlanir.
MOV C, P0.0 ; Yilanin sola donmesi isteniyorsa
JNB CY, SOLL 
MOV C, P0.1 ;Yilanin saga donmesi isteniyorsa
JNB CY, SAGL 
MOV C, P0.2 ;Yilanin yukari cikmasi isteniyorsa
JNB CY, USTL
MOV C, P0.3 ;Yilanin asagi inmesi isteniyorsa
JNB CY, ALTL
MOV C, P0.4 ;Yilan hizlandirilmak isteniyorsa
JNB CY, HIZLANDIR
MOV C, P0.5 ;Yilan yavaslatilmak isteniyorsa
JNB CY, YAVASLAT

; YON BELIRTILMEMISSE (YANI HIC GIRDI YOKSA, EN SON NEREYE GIDILIYORSA ORAYA GITMEYE DEVAM ETMEK)
YONBELIRTILMEMIS:
	CJNE R2, #00H, YON_SOL_DEGIL ; Bir onceki yonun ne olduguna bakilir, teker teker. Yukarida aciklanan kabullenmeler kullanilir.
	JMP SOLL
	YON_SOL_DEGIL:
	CJNE R2, #01H, YON_SAG_DA_DEGIL
	JMP SAGL
	YON_SAG_DA_DEGIL:
	CJNE R2, #02H, YON_UST_DEGIL
	JMP USTL
	YON_UST_DEGIL:
	JMP ALTL
	
HIZLANDIR:	;Yilan hizlandiriliyor...
	MOV A, 008H 
	CLR C
	SUBB A, #20D
	MOV 008H, A
	JNZ BASLA
	MOV 008H, #20D
	JMP BASLA
YAVASLAT: ;Yilan yavaslatiliyor...
	MOV A, 008H
	ADD A, #20D
	MOV 008H, A
	CLR CY
	SUBB A,#0F0H
	JNZ LBASLA
	MOV 008H, #0DCH
	LJMP BASLA
LBASLA:	LJMP BASLA
;Asagida, yilan belli bir yone giderken tam ters yon secilmisse, secilen yonun ignore edilip yilanin gittigi yonde devam etmesi saglanmistir.
;Ters yonden kastimiz, yilan sola giderken saga gitmesinin istenmesi ya da yilan yukari cikarken asagi gitmesinin istenmesidir.
;Boyle bir durumda yilan yon secimi hic yapilmamis gibi gittigi yonde devam eder.
SOLL: 	CJNE R2, #01H, SOLDAN_DEVAM_ET 
	LJMP SAG
	SOLDAN_DEVAM_ET:
	MOV R2, #00H
	LJMP SOL
SAGL: 	CJNE R2, #00H, SAGDAN_DEVAM_ET
	LJMP SOL
	SAGDAN_DEVAM_ET:
	MOV R2, #01H 
	LJMP SAG
USTL: 	CJNE R2, #03H, USTTEN_DEVAM_ET
	LJMP ALT
	USTTEN_DEVAM_ET:
	MOV R2, #02H 
	LJMP UST
ALTL:	CJNE R2, #02H, ALTTAN_DEVAM_ET
	LJMP UST
	ALTTAN_DEVAM_ET:
	MOV R2, #03H 
	LJMP ALT
SOL:
	;YILAN HAREKETLERI
	MOV R5, #001H
	
	;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
	MOV R0, #040H
	BAS_SOL_ARA:
	MOV A,@R0
	CJNE A, 005H, BAS_SOL_YOK
	
	JMP BAS_SOL_VAR
	
	BAS_SOL_YOK:
	INC R0
	JMP BAS_SOL_ARA
	
	BAS_SOL_VAR:
	;R0'IN ICERISINDE YILANIN BIYERI VAR.
	
	HAREKET_SOL:
	MOV @R0, #0FEH
	
	; KOSELERE GELMIS MI KONTROLLERI (SOL)
	; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir.
	MOV A,#40H
	CJNE A, 00H, YOK40_SOL
		MOV R0, #47H
		JMP SOL_TAMAM
	YOK40_SOL:
	MOV A,#48H
	CJNE A, 00H, YOK48_SOL
		MOV R0, #4FH
		JMP SOL_TAMAM
	YOK48_SOL:
	MOV A,#50H
	CJNE A, 00H, YOK50_SOL
		MOV R0, #57H
		JMP SOL_TAMAM
	YOK50_SOL:
	MOV A,#58H
	CJNE A, 00H, YOK58_SOL
		MOV R0, #5FH
		JMP SOL_TAMAM
	YOK58_SOL:
	MOV A,#60H
	CJNE A, 00H, YOK60_SOL
		MOV R0, #67H
		JMP SOL_TAMAM
	YOK60_SOL:
	MOV A,#68H
	CJNE A, 00H, YOK68_SOL
		MOV R0, #6FH
		JMP SOL_TAMAM
	YOK68_SOL:
	MOV A,#70H
	CJNE A, 00H, YOK70_SOL
		MOV R0, #77H
		JMP SOL_TAMAM
	YOK70_SOL:
	MOV A,#78H
	CJNE A, 00H, YOK78_SOL
		MOV R0, #7FH
		JMP SOL_TAMAM
	YOK78_SOL:
	DEC R0

	SOL_TAMAM:
	;OYUN SONU VE YILAN ELMA YEDI MI KONTROLLERI
	MOV A, @R0
	JNZ SOL_BUYU
	JMP SOL_ILERI
	SOL_BUYU: ; Yilanin buyumesi lazım. 
	CLR C
	SUBB A, #0FFH
	JNZ SOL_BITTI
	MOV 010H, #0FFH ;BUYU BAYTINI SET ET
	JMP SOL_ILERI
	SOL_BITTI: ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod...
	MOV A, @R0 
	CLR C
	SUBB A, R6
	JNZ SOL_CIDDEN_BITTI
	MOV 011H, #0FFH	;YILAN TAM UCTA BAYTINI SET SET
	JMP SOL_ILERI

	SOL_CIDDEN_BITTI:
	LJMP BITTI
	
	SOL_ILERI:
	MOV @R0, #001H

	
	;DEGISECEK BITTI
	
	MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK)
	JMP SBIZLE

SAG:
	;YILAN HAREKETLERI
	MOV R5, #001H
	
	;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
	MOV R0, #040H
	BAS_SAG_ARA:
	MOV A,@R0
	CJNE A, 005H, BAS_SAG_YOK
	
	JMP BAS_SAG_VAR
	
	BAS_SAG_YOK:
	INC R0
	JMP BAS_SAG_ARA
	
	BAS_SAG_VAR:
	;R0'IN ICERISINDE YILANIN BIYERI VAR.
	
	HAREKET_SAG:
	MOV @R0, #0FEH
	
	; KOSELERE GELMIS MI KONTROLLERI (SAG)
	; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir.
	;DEGISECEK BASLA
	MOV A,#47H
	CJNE A, 00H, YOK47_SAG
		MOV R0, #40H
		JMP SAG_TAMAM
	YOK47_SAG:
	MOV A,#4FH
	CJNE A, 00H, YOK4F_SAG
		MOV R0, #48H
		JMP SAG_TAMAM
	YOK4F_SAG:
	MOV A,#57H
	CJNE A, 00H, YOK57_SAG
		MOV R0, #50H
		JMP SAG_TAMAM
	YOK57_SAG:
	MOV A,#5FH
	CJNE A, 00H, YOK5F_SAG
		MOV R0, #58H
		JMP SAG_TAMAM
	YOK5F_SAG:
	MOV A,#67H
	CJNE A, 00H, YOK67_SAG
		MOV R0, #60H
		JMP SAG_TAMAM
	YOK67_SAG:
	MOV A,#6FH
	CJNE A, 00H, YOK6F_SAG
		MOV R0, #68H
		JMP SAG_TAMAM
	YOK6F_SAG:
	MOV A,#77H
	CJNE A, 00H, YOK77_SAG
		MOV R0, #70H
		JMP SAG_TAMAM
	YOK77_SAG:
	MOV A,#7FH
	CJNE A, 00H, YOK7F_SAG
		MOV R0, #78H
		JMP SAG_TAMAM
	YOK7F_SAG:
	INC R0
	
	SAG_TAMAM:
	;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU
	MOV A, @R0
	JNZ SAG_BUYU
	JMP SAG_ILERI
	SAG_BUYU:
	CLR C
	SUBB A, #0FFH
	JNZ SAG_BITTI
	MOV 010H, #0FFH ;BUYU BAYTINI SET ET
	JMP SAG_ILERI
	SAG_BITTI: ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod...
	MOV A, @R0 
	CLR C
	SUBB A, R6
	JNZ SAG_CIDDEN_BITTI
	MOV 011H, #0FFH	;YILNAN TAM UCTA BAYTINI SET SET
	JMP SAG_ILERI

	SAG_CIDDEN_BITTI:
	LJMP BITTI
	
	SAG_ILERI:
	MOV @R0, #001H

	
	;DEGISECEK BITTI
	
	MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK)
	JMP SBIZLE

UST:
	;YILAN HAREKETLERI
	MOV R5, #001H
	
	;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
	MOV R0, #040H
	BAS_UST_ARA:
	MOV A,@R0
	CJNE A, 005H, BAS_UST_YOK
	
	JMP BAS_UST_VAR
	
	BAS_UST_YOK:
	INC R0
	JMP BAS_UST_ARA
	
	BAS_UST_VAR:
	;R0'IN ICERISINDE YILANIN BIYERI VAR.
	
	HAREKET_UST:
	MOV @R0, #0FEH
	
	; KOSELERE GELMIS MI KONTROLLERI (UST)
	; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir.
	MOV A,#40H
	CJNE A, 00H, YOK40_UST
		MOV 78H, #001H
		JMP UST_TAMAM
	YOK40_UST:
	MOV A,#41H
	CJNE A, 00H, YOK41_UST
		MOV R0, #79H
		JMP UST_TAMAM
	YOK41_UST:
	MOV A,#42H
	CJNE A, 00H, YOK42_UST
		MOV R0, #7AH
		JMP UST_TAMAM
	YOK42_UST:
	MOV A,#43H
	CJNE A, 00H, YOK43_UST
		MOV R0, #7BH
		JMP UST_TAMAM
	YOK43_UST:
	MOV A,#44H
	CJNE A, 00H, YOK44_UST
		MOV R0, #7CH
		JMP UST_TAMAM
	YOK44_UST:
	MOV A,#45H
	CJNE A, 00H, YOK45_UST
		MOV R0, #7DH
		JMP UST_TAMAM
	YOK45_UST:
	MOV A,#46H
	CJNE A, 00H, YOK46_UST
		MOV R0, #7EH
		JMP UST_TAMAM
	YOK46_UST:
	MOV A,#47H
	CJNE A, 00H, YOK47_UST
		MOV R0, #7FH
		JMP UST_TAMAM
	YOK47_UST:
	CLR C
	MOV A,R0
	SUBB A, #8H
	MOV R0,A

	UST_TAMAM:

	;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU
	MOV A, @R0
	JNZ UST_BUYU
	JMP UST_ILERI
	UST_BUYU:
	CLR C
	SUBB A, #0FFH
	JNZ UST_BITTI ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod...
	MOV 010H, #0FFH ;BUYU BAYTINI SET ET
	JMP UST_ILERI
	UST_BITTI:
	MOV A, @R0 
	CLR C
	SUBB A, R6
	JNZ UST_CIDDEN_BITTI
	MOV 011H, #0FFH	;YILNAN TAM UCTA BAYTINI SET SET
	JMP UST_ILERI

	UST_CIDDEN_BITTI:
	LJMP BITTI
	
	UST_ILERI:
	MOV @R0, #001H
	;DEGISECEK BITTI

	
	MOV R4, #002H ; BIR SONRAKI YILANIN NOSU (SBIZLEYE PARAMATRE OLARAK KULLANDIK)
	JMP SBIZLE

ALT:
	;YILAN HAREKETLERI
	MOV R5, #001H
	
	;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
	MOV R0, #040H
	BAS_ALT_ARA:
	MOV A,@R0
	CJNE A, 005H, BAS_ALT_YOK
	
	JMP BAS_ALT_VAR
	
	BAS_ALT_YOK:
	INC R0
	JMP BAS_ALT_ARA
	
	BAS_ALT_VAR:
	;R0'IN ICERISINDE YILANIN BIYERI VAR.
	
	HAREKET_ALT:
	MOV @R0, #0FEH
	
	; KOSELERE GELMIS MI KONTROLLERI (ALT)
	; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir.
	;DEGISECEK BASLA
	MOV A,#78H
	CJNE A, 00H, YOK78_ALT
		MOV R0, #40H
		JMP ALT_TAMAM
	YOK78_ALT:
	MOV A,#79H
	CJNE A, 00H, YOK79_ALT
		MOV R0, #41H
		JMP ALT_TAMAM
	YOK79_ALT:
	MOV A,#7AH
	CJNE A, 00H, YOK7A_ALT
		MOV R0, #42H
		JMP ALT_TAMAM
	YOK7A_ALT:
	MOV A,#7BH
	CJNE A, 00H, YOK7B_ALT
		MOV R0, #43H
		JMP ALT_TAMAM
	YOK7B_ALT:
	MOV A,#7CH
	CJNE A, 00H, YOK7C_ALT
		MOV R0, #44H
		JMP ALT_TAMAM
	YOK7C_ALT:
	MOV A,#7DH
	CJNE A, 00H, YOK7D_ALT
		MOV R0, #45H
		JMP ALT_TAMAM
	YOK7D_ALT:
	MOV A,#7EH
	CJNE A, 00H, YOK7E_ALT
		MOV R0, #46H
		JMP ALT_TAMAM
	YOK7E_ALT:
	MOV A,#7FH
	CJNE A, 00H, YOK7F_ALT
		MOV R0, #47H
		JMP ALT_TAMAM
	YOK7F_ALT:
	MOV A,R0
	ADD A, #8H
	MOV R0,A
	
	ALT_TAMAM:
	;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU
	MOV A, @R0
	JNZ ALT_BUYU
	JMP ALT_ILERI
	ALT_BUYU:
	CLR C
	SUBB A, #0FFH
	JNZ ALT_BITTI ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod...
	MOV 010H, #0FFH ;BUYU BAYTINI SET ET
	JMP ALT_ILERI
	ALT_BITTI:
	MOV A, @R0 
	CLR C
	SUBB A, R6
	JNZ ALT_CIDDEN_BITTI
	MOV 011H, #0FFH	;YILNAN TAM UCTA BAYTINI SET SET
	JMP ALT_ILERI

	ALT_CIDDEN_BITTI:
	LJMP BITTI
	
	ALT_ILERI:
	MOV @R0, #001H

	
	;DEGISECEK BITTI
	
	MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK)
	JMP SBIZLE
	
SBIZLE: ;BIR SONRAKI YILANIN YERI (R4 ILE SETTIRILIR)
MOV 003H, 006H

MOV A, 11H
JNZ SON_BASA_DENK_GELMIS
JMP DONGU_BAS
SON_BASA_DENK_GELMIS:
DEC 003H

	DONGU_BAS:
DJNZ 003H, IZLE_DONGU
SJMP IZLE_BITTI
	
	IZLE_DONGU:
	;YILAN HAREKETLERI
	MOV R5, #0FEH
	
	;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
	MOV R0, #040H
	IZLE_FE_ARA:
	MOV A,@R0
	CJNE A, 005H, IZLE_FE_ARA_YOK
	
	JMP IZLE_FE_ARA_VAR
	
	IZLE_FE_ARA_YOK:
	INC R0
	JMP IZLE_FE_ARA
	
	IZLE_FE_ARA_VAR:
	;R0'DA FEhın yeri var
	MOV B,R0
	
	;YILAN HAREKETLERI
	MOV R5, 004H
	
	; YILANIN DEGISECEK PARCASININ YERINI TESPIT ET
	MOV R0, #40H
	IZLE_DEGISECEK_ARA:
	MOV A,@R0
	CJNE A, 005H, IZLE_DEGISECEK_ARA_YOK
	
	JMP IZLE_DEGISECEK_ARA_VAR
	
	IZLE_DEGISECEK_ARA_YOK:
	INC R0
	JMP IZLE_DEGISECEK_ARA
	
	IZLE_DEGISECEK_ARA_VAR:
	;R0'DA DEGISECEK ELEMANIN FE hın yeri var
	
	MOV @R0, #0FEH
	MOV R0,B
	MOV @R0, 004H
	INC R4
	JMP DONGU_BAS

IZLE_BITTI:

		 ;YILANIN SON ELEMANI ILE ILK ELEMANI CAKISMIS MI
		MOV A, 11H
		JNZ SON_BASA_DENK_GELMIS_2
		JMP SONU_HALLET
		SON_BASA_DENK_GELMIS_2:
		MOV 11H,#00H ;;SON BASA GELMIS BITINI TEMIZLE

			;YILAN HAREKETLERI
			MOV R5, #0FEH
	
			;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
			MOV R0, #040H
			IZLE_SON_ARA:
			MOV A,@R0
			CJNE A, 005H, IZLE_SON_ARA_YOK
			
			JMP IZLE_SON_ARA_VAR
			
			IZLE_SON_ARA_YOK:
			INC R0
			JMP IZLE_SON_ARA
			
			IZLE_SON_ARA_VAR:
			;R0'DA FEh'nin yeri var
				 
			MOV @R0, 006H
			JMP SBIZLE_BITTI
			
SONU_HALLET:
; YILAN HAREKET ETTIKTEN SONRA, EN SONDA KALACAK FE'YI KALDIRMAMIZ GEREKIR.
; BU KISIM BU ISLEMI YAPMAKTADIR.

MOV R5, #0FEH

;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR)
MOV R0, #040H
IZLE_FE_BITTI:
MOV A,@R0
CJNE A, 005H, IZLE_FE_BITTI_YOK

JMP IZLE_FE_BITTI_VAR

IZLE_FE_BITTI_YOK:
INC R0
JMP IZLE_FE_BITTI

IZLE_FE_BITTI_VAR:
;R0'DA FE'IN yeri var
MOV A, 010H
JNZ BUYUYECEK
MOV @R0, #00h
JMP SBIZLE_BITTI
BUYUYECEK:
  MOV 010H, #00H ;YILAN UZAYACAK MI BAYTINI SIFIRLA
  MOV 009H, #00H ;ELMANIN BELLEKTEKI ADRESINI SIFIRLA KI TEKRAR YARATILSIN
  INC R6         ;YILANIN UZUNLUGUNU ARTIR
  MOV @R0, 006H  ;BELLEK GORUNTUSUNDE YILANI UZAT
  JMP SBIZLE_BITTI
  
SBIZLE_BITTI:
LJMP BASLA

BITTI:
  DEC R6
  DEC R6
  MOV R0, 06H
  MOV R1, 06H
  MOV R2, 06H
  MOV R3, 06H
  MOV R4, 06H
  MOV R5, 06H
  MOV R6, 06H
  MOV R7, 06H
  MOV A, 06H
  MOV B, 06H
  END
👋 🚨 Yeni yazılardan haberdar olmak ister misiniz? 👇

Makine Kodu ile Red Alert 3 Yazdık 22 yorum aldı.

  1. Güzel bir ödev olmuş, lakin oyundan görüntü yok mu hiç 🙂 Hem gerekliliği konusunda Özlem’e sorsak eminim o da oyundan bir iki görüntü olması gerektiğini söyleyecektir. :))

    1. @Ömer: Teknik Bilgiler başlığının hemen üstündeki fotoğrafın sağ altındaki bellek görünütüsü programın çalışan hali. Videosunu çekmek için de uğraştım ama, akıcı olmadığından koymadım. Oyun direk RAM’de oynanıyor.

  2. >>Kimse bu ödevi vermeden önce, gelecekte ne yapacağımı sormadı ki bana! Ben gelecekte alt seviyeyle falan
    >>uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman?

    Okudugun bolumun elestirilecek bir cok yonu ve eksigi var ama bu yazida belirttiklerinin hicbiri bir arguman olamaz elestirilerin icin. Dunyadaki ciddi universitelerin Bilgisayar Bilimleri ya da Muhendisligi bolumlerinin programlarini incelemeni tavsiye ederim. Hicbirinde Web ile programla (Php, asp, java script), Windows ile programla, ya da urun tabanli “populer” programlama dersleri bulamazsin. Bulacagin seyler bilgisayar biliminin temelleri, otomata teorisi, bilgisayar bilimleri icin ileri mantik gibi dersler olacaktir. Webci olacak ve kendisine ne olacagi sorulmamis birisi olarak diyebilirsin ben bunlarin hicbirini kullanmayacagim diye. Hayatinin ileriki bolumlerinde buyuk olasilikla fizik, kimya, matematik ve biyoloji de kullanmayacaksin. O baglamda lise hayatini da kaldir cope at.
    Bu yazdiklarim seni elestirmek, polemik yaratmak ya da uzmek amacini tasimiyor. Blogunu da uzun suredir takip ediyorum. Ancak elestirel olayim derken lutfen “piyasa” denen seyin empoze ettigi argumanlari kullanma. Yasca ve genel ogrenci egilimleri nedeniyle bu hataya dusmen normal.
    Kaldiki belirttigin ders temel teorik bilgisayar bilimi dersi bile sayilmaz. Piyasa zaten temel bilgisayar bilimlerinden haberdar cozum ureten muhendis degil webci, javaci filan ariyor. Merak etme bunlarin hicbirini okulda ogrenmesen bile iyi maasli is bulur ilk 6 ay icerisinde ogrenirsin (deneyimle ve gozlemle sabittir).

  3. Öncelikle yazının oldukça ukalaca yazıldığını, bir fikir açıklamasından daha çok bir küçümseme niteliğini taşıdığını belirtmek isterim. Ancak yine de her türlü fikrin özgürce dile getirilmesinden yana olduğum için, bu yazının bir şekilde yazılmış ve yayınlanmış olması beni memnun etti. Bölümümüz öğrencilerinin bilgi sahibi olmadan düşünce sahibi olduklarını, “mühendislik” nedir sorusunu cevaplayamayacaklarını ve işin en önemlisi bizim ülkeden neden belirli bir bakış açısında mühendis çıkmadığını gösteren güzel bir yazı olmuş. Aslında gençliğin verdiği heyecan ve enerjinin kabından taşması olarakta nitelendirebileceğim bu yazı, bu yazıya cevap yazarken benim değerli vaktimi de harcamama sebep oluyor.
    Biraz ukalalık yapmak gerekiyorsa, 9 senelik, yüksek lisans sahibi ve doktorasına devam eden bir mühendisim. Bunun 4.5 senesini Beko Elektronik Ar-Ge’de çalışarak geçirdim. Araştırma geliştirme bölümünde Tübitak gözetmenlerinden duyduğumuz kadarıyla Türkiye’de özel sektörde o güne kadar yapılmış en büyük projelerden birinde ortalama 12 mühendis 18 ay çalışarak ürün ve test kodu ürettik. Ayrıca projemiz sayesinde birçok patent alındı. Patentlere ve özel sektöre karşı biriyim. Ancak bu süreç sayesinde gömülü sistemler konusunda belirli bir uzmanlık taşımaktayım. Bir üretim hattında çalışmamış, daha mühendis olmamış ve bu kadar kolay yapılabilecek bir projeyi abartan öğrencileri görmek beni üzdü. Öncelikle “Bu insan benden daha bilgili ve bir uzmanlığa sahip. Acaba ben hata yapıyor olabilir miyim?” düşüncesi yerine herşeyi ben bilirim bunlar gereksiz denilmesi büyük bir cahillik göstergesidir. Ülkenin teknoloji üretememesinin temel nedeni de budur. Ben “web”ci olacağım demek, yurt dışından bize dayatılan teknolojileri alıp onların bayiliğini yapacağım demekten öteye geçmez. Bilgisayar donanımı ve mimarisi hakkında bilgi toplamamak, öğrenmemek anatomi bilmeyen bir tıp doktoru olmakla eş değerdir.
    Bölümümüzdeki öğrenciler Java üzerinde kod geliştiriyorlar genellikle. Acaba kaç öğrenci Java sanal makinası nasıl çalışıyor, bir java sanal makinasını nasıl yazabilirim diye merak ediyor? Kaç tane öğrenci bir web server nasıl yazılır ya da bir scripting dili nasıl geliştirilir konusuna eğildi, araştırma yaptı? Hangi öğrencilerimiz bir programlama dili tasarladı ve bunun derleyicisini yazmak için uğraştı? Bir işlemci tasarlamaya meraklı ve bunun için çalışan öğrenciler var mıdır?

    “Ben gelecekte alt seviyeyle falan uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman?”: Tabiki istediğiniz alana yönelmek konusunda özgürsünüz. Ancak şunu akıldan çıkarmayın webci olmak için ya da program geliştirmek için mühendis olmaya gerek yoktur. Mesela matematik, ayrık yapılar, bilgisayar mimarisi, mantık tasarımı bunları da bilmene gerek yok.

    Bilgisayar donanımı, donanımın dili bilgisayarın kromozomları dna’sı dır. Size verilen proje kısıtlı kaynakların bulunduğu donanımsal bir ortamda, hatta işletim sistemi ve kütüphanelerin olmadığı bir ortamda program nasıl geliştirilir bunun farkına varmanız içindi. C dilinde yazdırmamamızın nedeni de budur: Bir mühendislik yapın, elinizde hiçbirşey yok hadi çözün problemi. Tüm bunlara ek olarak Linux işletim sistemini kullandırmak istedik. Bu sayede öğrenciler açık kaynak kodlu yazılımları kullanacaklar ve bu dünyaya giriş yapacaklardı. Hatta açık kaynak kod denilen şeyin ne olduğunu görsünler. Linux görmeden mezun olan öğrencilerimiz var ne yazıkki…

    Özetle, öğrencilerimizin bir bakış açısına gelebilmesi için sanırım uzun zaman geçmesi gerekiyor. Öğrencilerimiz kolaya kaçan ve not için çalışan, kendilerini geliştirmeyen, kendi beğenileri ve doğrularını mutlak doğru kabul eden bir bakış açısına sahipler. 8051 mikrodenetleyicisini bilgisayar mimarisi dersinde de göreceksiniz ne yazıkki. Ama bu sefer içsel tasarımını. Gerçi gereksiz bilgiler ama siz yine de öğrenmeye bakın. Günün birinde bir üniversitenin yüksek lisans ya da doktora mülakatında (hem de gözümüzde büyüttüğünüz hem yurt içi hem yurt dışındaki üniversiteler) size bir soru sorulursa cevap verebilin. Birden bire araştırma geliştirme bölümünde önünüze 8051 tabanlı bir sistem koyabilirler…

    Sevgiler ve sınavlarda başarılar,

    Sinan

  4. @Sinan Hocam:

    Kabul etmeliyim ki hocam, üslubum dalga geçer gibi. Bu blogu yazmaya başladığım günden beri bu böyle gitti maalesef. Ne kadar uğraşırsam uğraşayım bunu değiştirmeyi başaramadım. Çok defa olumsuz anlaşıldı, ki hak da veriyorum kesinlikle. O yüzden bu konuda rahatsızlık verdiğim için özür diliyor ve yazım sitili kişisel ya da aşağılayıcı almamamızı sizden önemle diliyorum çünkü böyle bir şey kesinlikle yok.

    Yazdıklarınızda bazı yerlere katılıyorum ama bazı yerlere de katılmamaktayım.

    Hocam mesela bu verilen proje önceki tecrübelerinizden dolayı sizin için kolaylıkla yapılabilecek ve basit bir proje olarak görünse de, ben ve ödevi yapan tandığım birçok arkadaşım ödevi tamamlayana kadar çok zorlandı ve çok ciddi vakit harcadı. Kendi kodumuz için konuşuyorum, 15 saatlik emek var üstünde. 15 net saat. Bu da az gelebilir belki ama, Nesneye Dayalı Analiz ve Tasarım ödevi, Windows Web ödevi, İşletim Sistemleri Ödevi, finallere hazırlanmak, diğer İşletim Sistemleri ödevi, staj görüşmeleri arasında gerçekten çok fazla bir saat. Ve bu vaktin büyük iki kısmı kopyala yapıştır yapmak ve MCU 8051 ide’de kodun çalışmasını seyrederek geçti (çünkü çok yavaş çalışıyordu).

    Tam olarak bu yüzden verilen ödevin çok aşırı uzun olduğunu düşünüyorum. Geçen dönem de ASM ile kod geliştirmiştik. Prosedür yazmıştık. EBOK EKOK almıştık, ve o zamanlar gıkım çıkmamıştı. Gerek algotimayı geliştirmek, gerek kodlamadaki ayrıntıları öğrenmek için önemli bir fırsattı ve gerçekten çok şey öğrendik. Bu sefer ise, ödev uzundu ve genelde yaptıklarımız birbirine çok benzediğinden pek bir şey katmadı. Serzenişim budur.

    Bunun dışında “webci” olmak kısmını biraz açarsam, sunucu istemci mimarisini kullanan sistemlerde iletişim, güvenlik veya bunları içeren sistemlerin nasıl tasarlanırsa daha etkin olabileceği, hangi tasarımların genişletilebilirlik sağlayacağı gibi konulara kafa yormak ilgimi çekiyor. Ve tasarımsal şeyler içeren bu konuları bilgisayar mühendisliği okumamış, otomata nesneye dayalı analiz, nesne ve hatta assembly ve işletim sistemi derslerini almamış olan birinin yapabileceğine inanmıyorum. Yani derdin oturup “site yazmak” değil. Ama “site yazılabilecek” bir frameworkun nasıl olması gerektiği ya da bununla ilgili tasarımlar çok ilgimi çekiyor.

    Bilgisayar mühendisliği okumayan birinin yapacağı bir yazılım iskambil kağıtlarından kule gibi olur diye düşünüyorum. Bu yüzden de “webci” yani bu konuda tasarım yapan, sistemi tasarlayan mühendislerin gerektiğini düşünüyorum.

    Hocam şurada beni yanlış anlamışsınız: Ben bu derse gereksiz demiyorum. Deseydim zaten bu bölümde işim olmazdı. Ben bu ödeve gereksiz diyorum. Geçen dönemki EBOB EKOK ödevleri gibi, ya da öğretici içeriği olan ama kopyala yapıştır faslı değil, eğitici faslı çok olan bir ödev verilebilirdi inancındayım. Çünkü yazdım, yazanları gördüm. Hatta internetten kod bulup, değiştirenleri de duydum. Herkes uzunluğundan şikayet etti.

    Bunun dışında her ne kadar ileride bir programlama dili yazmak ya da geliştirmek ve benzeri şeyler kendimi geliştireceğim şeyler olmasa da merak ettiğim ve cevaplarını teorik olarak öğrendiğim şeyler. JVM’nin nasıl çalıştığını da teorik olarak biliyorum ve eğer kendimi bu yönde geliştirmek isteseydim fazlasını da bilirdim. Ama ben bunun yerine HTTP protokolünün inceliklerini öğrendim ve yavaştan TCP’ye doğru da gitmem lazım inancındayım.

    Linux’te çalışmak konusunda haklısınız. Farklı bir sistem, hele de açık kaynak bir sistem görülmesi lazım. Ama “Simple Keypad” koyduğum anda çöken ya da simulasyonu gerçek hayattakinden 100’lerce kat yavaş yapan ve bir türlü hızlanmayan, pencereyi boyutlandırdığımda bile çöken bir programı kullanıyorsak bu konuda serzenişte bulunmalıyım. Keil mikrovision, deneme sürümü, bir defa çökmedi, MCU IDE en az 10 defa falan çöktü.

    Bu yüzden hocam, normalde ödevleri bir şeyler öğrenmek için yapsam da (geçen seneki ASM’ler ve günde 4 saat uyumama sebebiyet veren Windows da buna dahil) bu ödevi not için yaptım. Tek öğrendiğim, MCU IDE’nin genelde çöktüğü ve bir de timer ile rastgele sayı üretilmesi oldu. Diğerleri geçen dönemkinden farklı değildi. Sorun da burada.

    8051’in iç yapısını çok merak ediyorum. Çünkü farklı bir şey öğreneceğiz. Muhtemelen hayatımda bir defa bile gerekmeyecek ama farklı bir şey olunca merak edeceğim ve seve seve öğreneceğim.

    Derdim, ödevin amacına ulaşamamış olması. Daha doğrusu bunu düşünmem.

    Sınavlarla ilgili dilekleriniz için teşekkür ederim hocam.
    Daha önemlisi vaktinizi ayırıp, eleştirilerime yanıt verdiğiniz için.

    İyi günler

  5. Sayın Sinan Bey,

    Söylemleriniz bir çok öğretim üyesi, öğretmen hatta artık bu işin üstü dediğimiz profesörlerin görüşlerini yansıtmaktadır.
    Maalesef günümüz öğretim elemanları teknolojinin çok gerisinde kalmışlardır. Bu elbette sizin ya da bir başkası için geçerli olmayabilir fakat genele vurduğumuzda durum budur.

    Kendi sitem olan FxDev.org’da görebileceğiniz üzere Ege Üniversitesi Elektrik ve Elektronik Mühendisliği öğrencisiyim. Öncelikle kim mikroişlemci tasarlamak ister demişsiniz. Buna cevap vermek isterim;
    Evet, ben tasarlamak istedim ve bir mikroişlemci tasarladım. 32bit, Pentium serilerinin teknolojisiyle denkti. Benim dalım için bu gerekli bir uygulama idi ve gerekli donanımlar bölümümde mevcuttu.
    Size sormak istediğim, istediğiniz donanımsal özellikleri sağlayacak altyapıya bölüm olarak sahip misiniz?
    Acaba şu anda projede yüksek not verdiğiniz kaç tane proje gerçek hayatta çalışır durumda?
    Simülasyonda çalışan gerçek hayatta da bire bir çalışır mı? (Buna elbette bir Elektronik Mühendisi gülecektir)

    Benim gördüğüm kadarıyla, bölüm olarak bu yetilere sahip değilsiniz!

    Kimse üzerine alınmasın ama bence bölümünüz bir bilgisayar mühenisliğinden öte, bir yazılım mühendisliği ve yazılım geliştirme üzerine kurulu. Bunu bölümümüzde görüştüğüm bir çok arkadaşımdan, benim bölümümde çift ve yan dal yapan arkadaşımdan duyuyorum.

    İşte bu anlayışla kurulan bir bölümde, sadece ‘and’ ve ‘or’ kapılarını donanımsal olarak gösterip ‘işte biz size donanım gösterdik’ deyip, insanlardan bunun gibi ‘bana’ bile garip gelen proje veya projeler istenmesi uygun değil.

    Bizler de 8051 ile projeler geliştirdik, uyguladık. Fakat Umut’un bahsettiği derleyiciyi ilk gördüğümde bana çok ironik geldi. Sırf açık kaynak kodlu diye kimsenin profesyonel anlamda kullanmadığı bir derleyiciyi öğrencilerinize gösteriyorsunuz ve de buradan olumlu bir sonuç çıkmasını bekliyorsunuz.

    Bu işi sıfırdan öğretmeye hevesli bir bölümde acaba şu anda kaç kişi ekran kartı, CPU, RAM, bunların birbiri ile bağlantıları, gömülü sistemler üzerine çalışıyor?
    Bölümünüz bilgisayar donanımı açısından ‘bu klavye, bu da fare’ demekten başka öğrencilerinize neler katıyor?
    Örneğin bir öğrenci bu bölüme ben VGA monitörü bilgisayarsız, kendi tasarladığım mikrodenetleyici ya da mikroişlemci ile süreceğim, kendi yarattığım ekran kartımı test edeceğim dediğinde bölümünüz bu öğrenciye donanım ya da yardım olarak ne sağlıyor?
    Şu anki bitirme tezlerinin kaçı donanıma yönelik?

    Ya da en basitinden, neden bu tasarlattığınız projeler gerçek ortamda denenmiyor?
    Bun soruların, bilgisayar mühendisliğinde görev yapan bir öğretim üyesi tarafından cevaplanmasını canı gönülden isterim.

    Saygılarımla..

  6. Tekrardan merhabalar,

    Gençlerin bu düşüncelere sahip olması ki elbette doğrular olduğu gibi oldukça yanlışlar da vardır, üniversitelerimizin bir lise mantığına sahip olmasından ileri gelir. Öğrenciler üniversite ile liseyi bir tutuyorlar. Üniversiteye gelince farklı birşeyle karşılaşmadıkları için ki bu onların suçu değil, bazı gerçekleri görememektedirler.

    Bilgisayar mühendisliği ile elektronik mühendisliği bölümleri, kendi içlerinde örtüşen ve ayrışan bir sürü noktaya sahiptirler. Elbette bir bilgisayar mühendisi mezunu bir elektronik mühendisi kadar donanımsal bilgiye sahip olamaz. Yaptığı tasarımlar iyi bir elektronik mühendisinin gerisinde kalacaktır. Hatta kalmalıdırda. Aynı şeyi yazılım için de düşünebiliriz. Elektronik mühendisleri tabiki C ve benzeri dillerde program geliştirebilir. Ancak yazılım geliştirme başlı başına büyük bir araştırma alanıdır ve binlerce araştırma projesini içerisinde barındırır. Bir elektronik mühendisi de algoritmik analizler, yazılım sistemleri tasarımı ve benzeri konularda bilgisayar mühendisi kadar yetkin olamaz. Hatta olmamalıdırda.

    Bizim donanıma bakış açımız elbette elektronik mühendislerinin bakış açısından farklıdır. Biz gömülü sistemler ya da alt seviye sistemler denildiği zaman, işin sistem yazılımı kısımlarını düşünürüz. Donanımsal süreçler bizim için bir fikir sahibi olmamız gereken şeylerden birisidir. Ancak biz donanım üzerinde koşan sistem yazılımları ya da yazılımlar ile ilgileniyoruz. Bunun içerisinde işletim sistemi geliştirme, donanımı süren yazılımların geliştirilmesi, donanımı verimli bir şekilde kullanan alttaki donanımın yeteneklerini bilerek onu süren yazılım sistemlerinin tasarımı, geliştirilmesi ve uygulama yazılımı yer alır. Bunların hiçbiri elektronik mühendisliğinin kapsamı içerisinde yer almaz. Tabiki elektronik mühendisleri de bunlarla ilgilenebilir hatta bunları geliştirebilir.

    Şimdi ana konulara gelecek olursak, öğrencilerimiz henüz bir araştırma içerisinde girmedikleri için örneğin bir yüksek lisans ya da doktora süreci içerisinde yer almadıkları için bazı şeylerin farkında değiller. Üniversiteler teknoloji öğretim yerleri değildir, üniversite bir bilim yani bilgi üretim merkezidir. Özetle, toplumu ileriye götürecek bilgi üretiminin ve aydınlanmanın merkezi üniversitelerdir. Bu bilgiler teorik ve pratik bilgiler olabilir. Teknoloji, bilimin uygulamacı yönüdür. Size üniversite hiçbir teknoloji öğretmeyebilir. Ancak bilim nasıl yapılır bu üniversiteden her mezunun sahip olması gereken temel özelliktir.

    Öncelikle yazılım mühendisliği nedir, bilgisayar mühendisliği nedir ve tüm bunlara ek olarak bilgisayar bilimleri nedir bir tanımını yapmanızı ya da öğrenmenizi tavsiye ederim. Tüm bunlara ek olarak dünyada bilimsel olarak önde olan üniversitelerin bilgisayar mühendisliği bölümlerini ve bunların araştırma ve eğitim planlarını irdelemenizi tavsiye ederim. Sanırım bunları yaptıktan sonra bazı şeyler kafanızda daha net olacaktır. Arkadaşlar lütfen bilgi sahibi olmadan düşünce sahip olmayınız. Öncelikle araştırma!

    Bölümümüzün amacı donanım tasarlayan bilgisayar mühendisleri mezun etmek değildir. Nasıl C programlama dilini bilmek bilgisayar mühendisi olmak değilse, and or kapılarını bilmek te donanım tasarlamak ya da elektronik mühendisi olmak değildir tabiki. Bunun herkes farkındadır zaten. Gömülü sistem konusunda uzmanlaşan bilgisayar mühendisi, gömülü sistem donanımı üzerinde yazılım geliştirebilen bir mühendistir. Bölümümüzde günümüzde aktif bir araştırma alanı olan wireless sensor network konusu üzerinde araştırma yapacak gençler için 40 adet kablosuz algılayıcı düğümümüz mevcuttur. Bunun dışında bir donanımımız mevcut değildir. Ancak gömülü sistem yazılımı geliştirme konusunda araştırma yapacak öğrenciler için bu algılayıcı düğümleri kanımca yeterlidir. Hatta çalışmak isterseniz beklerim.

    Bir yazılım-donanım işbirliği sürecinde çalışmamış ve gerçekten bir üretim bandında yer almamış gençlerin kendilerinden emin bir şekilde gerçekten bilgisizce bazı şeyleri savunması bence haddinden fazla özgüvenden ileri gelmekte. Kullandığımız bir derleyici değil bir IDE’dir. IDE alt yapıda sdcc http://sdcc.sourceforge.net/ kullanmaktadır ki bu derleyici gömülü linux işletim sistemi kullanarak sistem geliştiren bir sürü gömülü sistem firması tarafından kullanılmaktadır. IDE ise oldukça basit ve bizim projelerimiz için yeterlidir. Hangi yazılımları kullanacağımıza neyi öğreteceğimize müsade edinde biz karar verelim. Bilgisayar mühendisliği öğrencisi için program kullanmak, bir IDE öğrenmek çok kolay işlerdir. Öğrencilerimiz istedikleri IDE’yi kullanmakta özgürdürler. Öğrencilere zaten hemen hemen herşey gereksiz gelmektedir. Örneğin artık bilgisayarların otomatik yaptığı integral işlemlerini öğreten matematik dersleri de ironik ve gereksiz olabilir. Simulasyon ortamlarına gelince, bu araçlar da yazılım geliştirme süreçlerinin bir ürünüdür. Gömülü yazılım geliştirme süreci nedir konusunda google’da bir sürü bilgi mevcuttur. Araştırabilirsiniz.

    Verdiğimiz projeler ve öğrettiklerimiz bir lisans öğrencisi tarafından eleştirilebilir, anlaşılmayabilir ya da eksik görülebilir. Sizler de ilerde üniversitelerde yer alırsanız yanlış gördüğünüz şeyleri düzeltmek için mücadele ediniz. Ancak önce pişmek, olgunlaşmak, çok okuyup çok araştırmak gerek.

    Buraya yazmak hem uzun hem yorucu. Bundan sonraki süreçte buraya yazamayacağım ne yazikki. Bu ve benzeri sorularınızı, düşüncelerinizi iletmek için odama gelebilirsiniz. Dediğim gibi hepinizi beklerim hatta bekliyorum.

  7. Sayin FxDev,

    >>Söylemleriniz bir çok öğretim üyesi, öğretmen hatta artık bu işin üstü dediğimiz profesörlerin görüşlerini
    >>yansıtmaktadır. Maalesef günümüz öğretim elemanları teknolojinin çok gerisinde kalmışlardır. Bu elbette sizin ya >>da bir başkası için geçerli olmayabilir fakat genele vurduğumuzda durum budur.

    Teknolojinin gerisinde kalmaktan kastiniz nedir anlamadim ama o belirttiginiz teknolojileri ureten sirket calisanlarinin genel olarak mezun oldugu universitelerin programlarini bir inceleyin lutfen. Birkacinin linki asagida:

    Hicbirinde teknoloji ya da urun tabanli bir ders yok. Php programlara, Javaci, Webci olmanin temelleri gibi. Ha dersinizki yazilim muhendisligi farkli bilgisayar muhendisligi farkli. Asagida da dunyadaki ilk yazilim muhendisligi bolumlerinden birinin programi:

    http://www.se.rit.edu/content/line-co-op-student-work-assignment-evaluation

    Ben ciddi universitelerin hicbirinde teknoloji ogretilen, urun ogretilen bir ders bulamadim.
    Akademiyle teknolojinin (teknoloji dediginiz sey aslinda piyasa, adini dogru koyalim) birbiriyle cok icli disli olmadigi dogrudur. Aslinda boyle olmasi da gerekir. Universite meslek ogretilen bir yer degildir. Bilgi uretmeyi, tartisma ortami yaratmayi amaclar. Mezunlarida aranmasi gereken seyler alanla ilgili temel bilgi becerileri edinmesi ve temel problemleri ozgun cozumler getirip getirmemesidir.
    Bolumun bir cok eksigi var bu dogru ama bence eksikler belirtilen seylerin tam aksi istikametindeki seyler. Temel teorik dersler eksik filan denilse anlasilabilir, ama getirilen yorumlarin ve elstirilerin ben dayanak noktasini anlamis degilim.
    Yazida ve cevaplarda webci olmak konusunda belirtilen seylerin hicbirisi universite egitimi icerisinde yer almaz. Daha oncede dedigim gibi bunlarin hepsi ilgili bulunacak iste ilk 6 ay icerisinde ogrenilir.

  8. @Arda: Ürün tabanlı ders dediğiniz ders bu dönem benim için “Windows ile Web Programlama”. Ve içerisinde “Windows” adı geçmesine rağmen, “Windows” ile pek alakası da olmayan ve ilgi alanıma girek sunucu istemci iletişimindeki protokolleri öğernmiş oldum. Aynı şekilde yine Windows ile alakası olmayan, bir proje geliştirme sürecini yaşadım. 5 kişilik bir ekip nasıl idare edilirmiş (ya da edilemezmiş oldu daha çok), proje geliştirme sürecinde çıkabilecek sorunlar neler olurmuş, sunum nasıl yapılırmış gibi şeyleri öğrendim. Brinici elden gereksinim analizi yaptık ve adında “Windows” geçse bile ben bu dersten sırf “piyasa” ile alakalı olmayan da onlarca şey öğrendim. Açıkçası ders programlarına açık bakmadım ama eminim bunların karşılığı olan ama adında “Windows” geçmeyen dersler başka üniversitelerde de vardır. Biz nesneye dayalı analiz ve tasarımda da güya gereksinim analizi yaptık. Ama kafadan. Şunu şöyle yapalım, bu böyle güzel olur diye. Bunu birinci elden yapmak ayrı bir tecrübeydi.

    Öte yandan bu konuyla pek alakalı olmayan giriş paragrafını geçersek, şu dil şöyledir şu dil böyledir gibi her dili ayrı ayrı göstermek (her ne kadar benim hoşuma da gitse) akademik olmadığına katılıyorum. Ama eğer yazımı okuyacak olursanız tekrardan, yazının bunla alakası olmadığını göreceksiniz.

    Yazının “mikrodenetleyiciler dersi çok gereksiz ve saçma” ile alakalı olmadığını da göreceksiniz. Sinan hocaya yazdığım yorumda da göreceksiniz. Bu yazının amacı şudur:

    1- Niye bir dönem önce zaten öğrendiğimiz şeyleri tekrarlıyoruz? Başka bir şey görsek?
    2- Niye yarısından fazlası kopyala yapıştır olan bu yüzden vakit kaybından başka bir şey olmayan bir ödev veriliyor? Bunun yerine geçen dönemki assembly ödevleri gibi öğretici ama kopyala yapıştırı olmayan daha güzel bir ödev verilmiyor?
    3- Açık kaynak olsun ya da olmasın, dünyadaki tek IDE’ymiş gibi, bize hangi tuşa basarsak basalım çöken, stabilitesi bu kadar kötü olan bir IDE tanıtılıyor? Madem o derleyici açık kaynak kodlu, kullanan adam gibi hiç mi derleyici yok? Ekran görüntüsünü görüyorsunuz, her daim “Error, error…” ve simülasyonu gerçek zamanlı yapabilme kapasitesi de yok. Bu kadar başarısız bir IDE olmasa, ben de yakınmazdım.

    Bu yazının amacı bunladır. Eğer bölümümüzde niye dile yönelik dersler var diye sorup bunu tartışacaksak, ayrı bir başlık açayım, onda tartışalım. Ama eğer konudan sapmıyorsak, benim derdim mikrodenetleyici falan görmek değil. Merak ediyorum zaten ben bunları. Ama bu verilen ödevi anlamlı kılmıyor hala.

    Benim ödevin anlamsızlığından yakınmamı, “mikrodenetleyicileri görmek saçma”ya çekmeyelim.

    alıntı:
    Ödev kontrolünde hocamız bize bu ödevin bize ne kattığını sordu. Ben de açık açık söyledim kendisine: “Açıkçası üç günümüzü boşa harcamaktan başka bir şey katmadı.” Meğerse öyle değilmiş… Bu ödev bize, eğer ileride alt seviyeli işlerle meşgul bir yerde çalışırsak (mesela embedded) o zaman işlerin nasıl gittiğine dair fikrimiz olmasını sağlayacakmış.

    Bu fikir bize geçen dönem sağlandı. Ha yok diyelim sağlanmadı, tekrar dediğim gibi kopyala yapıştırı az, öğretisi bol olan bir ödev ile sağlanabilirdi.

    Ödevin çözümüne bakın, kopyala yapıştırı görün. Bu kadar kopyala yapıştırı yapınca, ben bunu niye yapıyorum diye sormamı mazur görün.

  9. simdi beni iyi ve dikkatle dinleyin.eleştiri oklarim yaydan çıkmak üzere.ama bunlardan bir ders çıkarmaya çalışın.Eleştriyi hazmedebilin.Yoksa yazdiklarim sizin için birşey ifade etmeyecektir.

    Sayin Arastirma ve Ogretim gorevlileri :Her eleştiri durumunda ,”öğrenci hic birseyden memnun olmaz zaten ” gibi kıt bir bakış acisiyla ne bilime ne ogrencilere bir katki saglanmaz.

    “Ogrenciler eksik,ogrenciler cahil,onlar anlamiyorlar”

    .Kişisel yazmiyorum bunu sinan bey.ama diger arastirma gorevlilerinden acik yureklilikle memnunmusunuz? bir kac kisi haricinde onlar kendini biliyor uzerlerine alinmasinlar,iş bulamayip aman devlete kapagi atayim memur olayim maasimi tikir tikir alayim kafam rahat etsin dusuncesinde olan insanlar arastirma gorevlisi olarak yer ediniyor universitemizde..Lablarda öğrencilerin sordugu basit sorulara cevap veremeyen,kendi asistanliginin yaptigi dersler hakkinda bile o dersin lisans ogrencileri kadar bile bilgi sahibi olmayan kac tane arastirma gorevlisine sahibiz??

    Öğrencilerin eleştirilerinden faydalanmak sizin icin onur kirici bir hareketmidir?Bu sonsuz özgüven,ogrenciler bisey bilmez biz biliriz mantalitesi acaba dunyaya ve bilime at gozlukleri ile bakmaniza sebep olmus olabilir mi?Verilen odev kendisini tekrar eden ayni islemleri defalarca yazmaktan ibaret oluyorsa ve ogrenciler bu konu hakkindaki serzenişini dile getiriyorsa bundan neden rahatsiz oluyorsunuz?? daha yaratici ,daha ogretici odevler verelim bundan sonra diye dusunmek bu kadar zor mu?

    IDE konusunda bu kadar ogrenci sorun yasamis.Ama sizin yaklasminiz bu IDE iyidir,hangi ideyi sececegimze biz karar verelim … simdi tekrar soruyorum bu kadar ogrenci sorun yasadi gelecek donemde şu IDE yi tanitalim derslerde demek bu kadar mı zor??

    universitelerin teknolojiyle olan bağına bir Akademisyen olarak bu yaklasiminiz beni inanin cok uzdu.Bence universitelerin teknoloji olan iliskisini tekrar incelemenizi tavsiye ederim.

    ornek gosterdiginiz universitelerden birisi MIT,Silikon Vadisinin temelleri MIT sayseinde atilmistir.Teknoloji üretmek ise temel hedefidir MIT nin.adi bile üzerinde.inanin cok üzüldüm yaklasiminiza.

    ogrenciler eksik ogrenciler cahilde acaba bölüm akademisyenleri ne alemde? açık yüreklilikle bana bu bolumun tum akademisyenleri devletten aldigi parayi hakediyor diyebilirmisiniz?Vicdaniniz buna elverir mi?(herkes uzerine alinmasin,gerci boyle yazinca kimse de uzerine alinmayabilir )

    öğrencilerin feedback lerine kulak verin.Öğrenciler IBM 360 sistemlerinin gosterildigi Sistem Programlama dersini elestiriyordu.ama yine ayni mantalitedeki arastirma gorevlileri,bunun ne kadar gerekli bir ders olduguna dair sayfalarca size bilgi verebilridi.ne oldu MÜDEK bu dersin artik günümüzde uygulama alani olmadigina ve gereksiz olduguna karar vererek müfredat tan cikardi.

    8051 mimarisi bir bilgisayar muhendisi icin olmazsa olmazlardan biridir.Bir mühendis ile piyasda gezinen farkini yaratan bir cok unsurdan biridir sadece..

    ancak bu ders amacina ulaşamiyorsa,eleştiriler artiyorsa ayna dönüp bakmak gerekir.bir ogrenci kalkip bu odev size ne kalkti sorusuna hic birsey katmadi diyorsa,inanin katmamistir.sorunda ogrencide degildir.ne katip ne katmadigini akademisyenler degil ogrenciler bilir…bu cevaplardan sonra donup aynaya bakip ogrencilere daha faydali neler yaptirabilirz diye dusunmek gerekir.

    Teknolojiler universitelerden cikar.kişisel yaraticiligi ,yeni fikirleri onleyerek ben bunu sectim herkes bunu yapsin denilen bir kurumda ne uretim ne bilim ne de hic birsey ortaya cikmaz.

    Amacim burda herseyi bildiklerini sanan ancak ne yazikki cok az bilgi birikimne sahip olan arastirma gorevlilerinin donup aynaya bi bakmalarini ogrencilere ve bagli bulunduklari kuruma nasil daha fazla fayda saglayabileceklerini dusunmelerini saglamaktir..Yapici olmasini umduugum bu eleştirilere kulaklarini tikayanlar bulunduklari yollarinda ilerlemeye devam edebilirler,zaten umutsuz birer vakaya donusmek üzereler….

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir