• 0
الطالب39

هل ممكن إنجاز هذا المشروع CHIP-8 بالبايثون

سؤال

السلام عليكم

 

أعلم أن الأمر ليس بالهين ويتطلب خبره في إستخدام الواجهه الرسوميه

 

ولكن ما أريده من وراء هذا المشروع هو التعلم البايثون إستخدام الواجهة الرسومي وكذلك وبرمجه الرسوم المتحركه لا أدري ماذا تسمى هذه التقنيه وكذلك برمجه الـمحاكيات

 

الـ Chip-8 لا تحتوي إلا على 35 أمر فقط

 

معلومات على Chip-8

 

http://en.wikipedia.org/wiki/CHIP-8#Opcode_table

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

اقرأ هذه الوثيقة، فيها معلومات أفضل.

 

 

يلزمك ذاكرة 4095 بايت، يمكنك استخدام bytearray لمحاكاتها.

16 مسجل.

عداد يمثل مكان التعليمة الحالية.

حلقة تكرار تمثل المعالج.

 

حلقة التكرار تمثل المعالج، تجلب التعليمة التالية، تحاول التعرف عليها (يلزمك أن تعرف كيف تقطع البايتات)، ثم ينفذ التعليمة.

 

هذا تطبيق سريع على 7 أوامر، آخر أمرين فقط ستنفذ (أستخدم بايثون 3):

#!python# -*- coding: utf-8 -*-# 4095 bytes memorymemory = bytearray(4095)# 16 registers, v0 to vfregisters = [0, 0, 0, 0, 0, 0, 0, 0,             0, 0, 0, 0, 0, 0, 0, 0]# simple program:## \x01\x23 | sys  0x123# \x00\xe0 | cls# \x00\xee | ret# \x11\x23 | jp   0x123# \x21\x23 | call 0x123# \x38\x02 | se   v8, 0x02# \x00\xfd | exit#program = bytearray(b'\x01\x23\x00\xe0\x00\xee\x11\x23\x21\x23\x38\x02\x00\xfd')          # ...# load it at address 0x200memory[512:512+len(program)] = program# memory dump# open('mem.dump', 'wb').write(memory)# program counter for next instructioncounter = 512while True:    byte1 = memory[counter]    # decode, 0NNN - sys NNN    #         00e0 - cls    #         00ee - ret    #         00fd - exit    if byte1 >> 4 == 0:        # cls or ret?        byte2 = memory[counter + 1]        if byte1 & 0xf == 0 and byte2 >> 4 == 0xe:            if byte2 & 0xf == 0:                print('cls')            elif byte2 & 0xf == 0xe:                print('ret')        # exit?        elif byte2 == 0xfd:            print('exit')            break        else:            # must be sys            address = ((byte1 & 0xf) << 8) | byte2            print('sys 0x{:03x}'.format(address))        counter += 2    # decode 1NNN - jp NNN    elif byte1 >> 4 == 0x1:        byte2 = memory[counter + 1]        address = ((byte1 & 0xf) << 8) | byte2        print('jp 0x{:03x}'.format(address))        counter += 2    # decode 2NNN - call NNN    elif byte1 >> 4 == 0x2:        byte2 = memory[counter + 1]        address = ((byte1 & 0xf) << 8) | byte2        print('call 0x{:03x}'.format(address))        counter += 2    # decode 3XNN - se vX, NN    elif byte1 >> 4 == 0x3:        reg = byte1 & 0xf        byte2 = memory[counter + 1]        if registers[reg] == byte2:            counter += 2        counter += 2        print('se v{}, 0x{:02x}'.format(reg, byte2))    else:        print("bad instruction")        break

الكود مجرد مثال يمكنك تحسينه.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خير ولكن المشكل في كيفيه رسم البيكسل وتحريكه

ماذا نستخدم في عرض البيكسل ؟

 

أرجو أن يكون الكود عباره عن شرح وأن يكون على شكل درس إن أمكن جزاك الله خير

تم تعديل بواسطه الطالب39
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

chip8 لايوجد فيها إلا تعليمة رسم واحدة، يمكنك انشاء نافذة باستخدام أي مكتبة رسومية، ورسم مستطيع أسود يمثل الشاشة ولرسم البكسلات تنقط، هذا الجزء الرسومي الذي تحتاجه.

 

مثلاً باستخدام مكتبة tkinter في بايثون:

#!pythonfrom tkinter import *class Chip8Frame(Frame):    def draw_pixel(self, x, y, scale):        self.canvas.create_rectangle(x, y, x + scale, y + scale, fill='white')    def initialize(self):        size = 320        self.pack()        self.canvas = Canvas(root, bg='black', height=size, width=size)        self.canvas.pack()        x = 0        for y in range(0, size, 10):            self.draw_pixel(x, y, 10)            self.draw_pixel(size - x, y, 10)            x += 10    def __init__(self, root):        Frame.__init__(self, root)        root.title('Example')        root.resizable(width=FALSE, height=FALSE)        self.initialize()root = Tk()Chip8Frame(root).mainloop()

post-231926-0-68270200-1395706323.png

تم تعديل بواسطه Mr.B
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك أخي على المساعده سأحاول دراسه مكتبه tkinter

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .