Hello, Guest the thread was called2.5k times and contains 26 replays

last post from Fröhn at the

bit

  • 1)

    Code
    1. s_Lock lda#$4d ; Code von EOR Abs oder EOR Zp, je nachdem
    2. sta *
    3. rts
    4. Woanders im Code:
    5. test jsr s_lock
    6. bne .free
    7. ; War wohl nix, irgendwas machen und später versuchen
    8. brk:nop
    9. beq test


    Der erste, der reinwill, bekommt das $4d zurück, der nächste $00, egal, an welcher Stelle die Routine auch unterbrochen wird. Weisste jetzt was ein Scroller is? ;)


    2) Zeig mal.

  • Also was selbstmodifizierenden Code angeht: Auf dem 6502 (etc) ist das kein Problem, oft kann man dadurch sogar Code deutlich beschleunigen. Allerdings würd ich mich da doch auf das Ändern von Adressen bzw Immediate-Werten beschränken. Die Opcodes zu ändern ist doch noch ne Stufe gruseliger.

  • Quote


    Zeig mal


    test:
    sei
    lda flag
    beq ok
    cli
    ;rumidlen
    jmp test


    ok:
    lda #1
    sta flag
    cli
    ;was tun
    sei
    lda #0
    sta flag
    cli
    rts


    so in etwa, deutlich ineffizienter, klar. noch viel ineffizienter wenns auch mit nmi gehen soll. aber durchaus möglich. so in der art funktioniert das auch in jedem richtigen OS, denn wie wir ja wissen kann man auf modernen cpus mit selbstmodifikation nicht viel erreichen :)

  • Quote

    Original von sauhundwenns auch mit nmi gehen soll. aber durchaus möglich.


    Genau bei den anderen Unterbrechungen wirds spannend :)

    Quote

    so in der art funktioniert das auch in jedem richtigen OS, denn wie wir ja wissen kann man auf modernen cpus mit selbstmodifikation nicht viel erreichen :)


    Ich dachte, da hätten die Prozessoren extra Kommandos für? ?(

  • Moderne CPUs haben keine Probleme mehr mit der Selbstmodifikation... Problematisch war es nur, als die ersten CPUs auf einmal Cache hatten. Da liefen dann einige Programme nicht mehr... Aber heutzutage bemerken die CPUs Änderungen am Code, sofern diese auch von der CPU bewirkt werden.

  • Quote


    Genau bei den anderen Unterbrechungen wirds spannend


    ne, nur bischen gaga zu handlen, weil du im nmi handler UND in der routine ansich gegenseitig doppelt verriegeln musst. da kommt dann haufenweise unnützer code bei raus und man wird im ende in der tat sowas wie du da hattest benutzen wollen :) aber wie gesagt, auf keinen fall unmöglich :)


    Quote


    Aber heutzutage bemerken die CPUs Änderungen am Code, sofern diese auch von der CPU bewirkt werden.


    welche cpus sollen das sein? zumindest arm,super-h,power-pc und mips haben alle getrennte cachelines für daten und code, da kannst du selbstmodifikation *komplett* vergessen, ausser du baust dauern cache flushes ein (womit der code wieder so langsam werden dürfte das du dir die selbstmodifikation sparen kannst). das man da extra was einbaut damit selbstmodifikation möglich ist halte ich selbst bei x86 für ein gerücht, ganz im gegenteil - man geht ja eher dazu über den code bereich gegen manipulation zu schützen und dann ne exception zu werfen.

  • Natürlich gibt es getrennte Daten- und Instruction-Caches, aber schreibzugriffe der CPU sorgen eben auch für das Invalidieren von Instruction-Cache-Zeilen, sofern diese betroffen sind. Zumindest bei heutigen x86 CPUs ist dies so.