DL!

עמוד

התגובות שלי בפורום

מוצגות 15 תגובות – 31 עד 45 (מתוך 73 סה״כ)
  • מאת
    תגובות
  • בתגובה ל: הצילו!2 #78550
    DL!
    משתתף

    עוד נקודה למחשבה:

    ב-8086 פקודת
    JMP
    היא רלטיבית. ז"א, ה"קידוד" שלה בשפת מכונה אומר משהו בסגנון "קפוץ 314 בתים אחורה", ולא "קפוץ לכתובת 0".

    לכן, הבתים
    E9 FD FE
    שאתם משתמשים בהם, יקפצו לכתובת 0 רק אם המעבד מריץ אותם מהכתובת 0x100.

    בתגובה ל: הצילו!2 #78551
    DL!
    משתתף

    הקוד שלכם אינו קוד חוקי באסמבלי 16 ביט (שבו משתמשים בתחרות), כיוון שאין אפשרות לכתוב לזיכרון יותר מ-16 ביט באופקוד בודד.

    לכן השורה
    mov [0], 0e9fdfeh
    אינה חוקית.

    זה משהו שהקומפיילר / אסמבלר שלכם היה אמור לצעוק עליו.

    בתגובה ל: הצילו!!!! #78553
    DL!
    משתתף

    הבעיה שלכם היא שהמנוע לא זיהה את השורדים שלכם כשייכים לאותו צוות, ולכן הזיכרון הצוותי שלהם מצביע על מקומות שונים.

    הסיבה היא שקבצי השורדים שלכם מכילים סיומת קובץ
    cgx
    זאת היתה סיומת הקובץ הישנה, של הגירסה הקודמת של המנוע (מלפני שנה).

    המנוע החדש לא זקוק לסיומת קובץ כדי לזהות את השורדים. הוא פשוט טוען את כל מה שנמצא בספריה
    survivors

    בקיצור, תשנו את השורדים שלכם ל
    DF1, DF2
    (ללא סיומת קובץ!)
    והכל אמור לעבוד.

    בתגובה ל: הצילו!!!! #78556
    DL!
    משתתף

    קודם כל, תרגעו :)

    תוכלו לפרט מה בדיוק לא עובד לכם ?
    האם השורד "מת", או קורה משהו אחר ?

    המנוע זיהה את שני השורדים שלכם כשייכים לאותו צוות ?
    (הם מופיעים באותה עמודה ברישום התוצאות ?)

    בתגובה ל: !!!תזכורת חשובה!!! #78557
    DL!
    משתתף

    ענינו כבר על השאלה הזו בעבר:
    http://codeguru.co.il/CS/forums/109/ShowPost.aspx

    בכל מקרה, בשלב זה אנחנו לא מתחייבים לגבי נוכחות זומבים בתחרות, ואנחנו שומרים את האפשרות לזרוק לכם זומבי ביום התחרות (אולי אפילו את זה שפורסם), כדי להפוך את המשחק למעניין יותר.

    בתגובה ל: !!!תזכורת חשובה!!! #78561
    DL!
    משתתף

    יש להגיש את השורדים בדיוק כפי שהמנוע מריץ אותם, ז"א את הקוד המקומפל.

    אנחנו לא יודעים באיזה אסמבלר השתמשתם, ובטח לא מתכננים לקמפל את הקוד בשבילכם.
    גם בבוקר התחרות, הצוותים יקבלו אך ורק את הקוד המקומפל של הצוותים האחרים.

    בתגובה ל: האצת זמן #78567
    DL!
    משתתף

    Following are the relevant code snippets from the engine:

    /** Maximum possible Warrior speed. */
    private final int MAX_SPEED = 16; // when Energy = 0xFFFF

    /**
     * Returns the warrior's current speed, using the following formula:
     * Speed := Min(MAX_SPEED, 1+Log2(Energy))
     *
     * This formula forces the warrior to put more and more effort in order to
     * increase its speed, i.e. non-linear effort.
     * 
     * @param energy The warrior's Energy value.
     * @return the warrior's current speed,
     */
    private int calculateWarriorSpeed(int energy) {
       if (energy == 0) {
          return 0;
       } else {
          return Math.min(MAX_SPEED, 1 + (int)(Math.log(energy) / Math.log(2)));
       }
    }

    /**
     * Determines whether or not a given warrior deserves an extra opcode,
     * by calculating the warrior's current speed (using its current Energy
     * value), and comparing it against a random value.
     *
     * We use a random-based algorithm (as opposed to a deterministic one) for
     * the following reasons:
     *  a) simple implementation – there is no need to keep record of past
     *     decisions as our algorithm is stateless.
     *  b) we want the warrior's speed to vary between x1.0 to x2.0, and this
     *     solves the issue of determining what to do if the current speed is x1.7 :)
     *
     * @param warrior The warrior.
     * @return true if the warrior deserves an extra opcode, otherwise
     * returns false.
     */
    private boolean shouldRunExtraOpcode(Warrior warrior) {
       int energy = Unsigned.unsignedShort(warrior.getEnergy());
       int speed = calculateWarriorSpeed(energy);
      
       return (rand.nextInt(MAX_SPEED) < speed);
    }

    בתגובה ל: שאלה #78570
    DL!
    משתתף

    התשובה מופיעה באתר:
    http://www.codeguru.co.il/Xtreme/tech3.htm

    בתגובה ל: האצת זמן #78571
    DL!
    משתתף

    המקסימום שאתה יכול לשאוף אליו הוא לקבל אופקוד אחד נוסף בכל סיבוב, ז"א במקרה הטוב ביותר תקבל זמן מעבד כפול מהרגיל.
    תקרא שוב את הקטע באתר שמסביר את נושא האצת הזמן…

    בתגובה ל: אלה לגבי הסגמנט #78572
    DL!
    משתתף

    המימוש הנוכחי משתמש בסגמנט
    0x1000
    אבל אין שום התחייבות שזה ישאר כך בעתיד (הקרוב או הרחוק).

    בתגובה ל: שאלה #78573
    DL!
    משתתף

    The IP register (IP = "Instruction Pointer") always points to the next opcode that the CPU is going to run.

    It's not necessarily incremented by 1 every round. For example, running a 3-byte opcode (e.g. "MOV AX, 00000h") causes IP to be incremented by 3. Also, IP can be set to any arbitrary value using the JMP or CALL opcodes.

    בתגובה ל: שאלה חשובה!! #78578
    DL!
    משתתף

    לצערי, גם במקרה זה התשובה היא שלילית.

    בתגובה ל: question #78579
    DL!
    משתתף

    No, they were already valid on the 8086.
    A good way to find out is to see what the windows "debug.exe" supports (it only supports 8086 opcodes).

    בתגובה ל: question #78586
    DL!
    משתתף

    Following are all 8086 features that aren't supported by the engine:

    1. segment prefixes: ES:, DS:, SS:, CS:
    2. ASCII conversion: DAA, DAS, AAA, AAS, AAM, AAD
    3. bit shifting: ROL, ROR, RCL, RCR, SHL, SHR, SAR
    4. signed multiplication: IMUL, IDIV
    בתגובה ל: שאלה חשובה!! #78587
    DL!
    משתתף

    התשובה היא שלילית.

מוצגות 15 תגובות – 31 עד 45 (מתוך 73 סה״כ)