Eigenen Interrupt



  • nö ist es auch net...
    das kommt direct NACH dem bootloader...

    MFG

    LordHoto



  • Wie dem auch sei, ich hoffe du hast die Kernaussage meines letzten Posts verstanden und konntest deinen Code dementsprechend aendern.
    Funktioniert es denn jetzt?



  • bin grad auf ner Lan und hab kein Bochs drauf...

    MFG

    LordHoto



  • also cs ist immernoch wie im bootsector 🙂
    und wenn ds null ist gibts auch keinen unterschied 😞

    MFG

    LordHoto



  • so das hier ist der richtige code!

    [BITS 16]
    group DGROUP _TEXT _DATA _BSS _STACK
    extern _main
    ; ****************************CODE-Segment*********************************
    segment _TEXT class=CODE
    ..start:
    main:
    mov ax, cs
    mov ds, ax
    mov es, ax
    cli
    mov ss, ax
    mov sp, StackEnd
    mov bx, 00h
    mov es, bx
    mov word [es:84h], INT21h
    mov [es:86h], cs
    sti
    call _main

    .hang: jmp .hang

    ;------------------------------= Int 21h =----------------------------------------------
    inter:
    cmp ah, 00h
    je printv
    cmp ah, 01h
    je printf
    IRET
    printv:
    mov si, OpenOsVersion
    call message
    IRET
    printf:
    call message
    IRET
    ;------------------------------= Int 21h =----------------------------------------------

    message:
    lodsb
    cmp al, 00h
    jz putstrd
    mov ah,0Eh
    int 10h
    jmp message
    putstrd: ret

    ; ****************************DATA-Segment*********************************
    segment _DATA class=DATA
    ;------------------------------= Int 21h =----------------------------------------------
    OpenOsVersion db "OpenOs Build 00.00.01",13,10,0
    ;----------------------------------------------------------------------------------------

    ; ****************************BSS-Segment**********************************
    segment _BSS class=BSS

    ; ****************************STACK-Segment********************************
    segment _STACK class=STACK
    resw 512
    StackEnd:



  • so jetzt funzt alles nun will ich eine Funktion einbauen mit der ich von einem ausgeführten Programm wieder in meine Commandline zurück springe ich hab das jetzt so gemacht :
    _return_:
    mov si, toos
    call message
    pop ax
    pop ax
    jmp _commandline

    mir hat man gesagt um den rücksprungspunkt zu löschen soll ich 2 mal 'poppen'
    aber dabei hängt er sich immer auf. Weiß einer wo der Fehler ist?

    MFG

    LordHoto



  • Keiner eine ahnung?

    MFG

    LordHoto



  • Das wichtigste fehlt IMHO, naemlich wie dieses Stueck code da aufgerufen wird.

    Ansonsten kann ich mir nur denken, dass ein FAR-Call zu diesem code ausgefuehrt wird und der Ruecksprung im falschen Segment landet.



  • wie meinst du das?
    Ich will das von einem Belibigen Punkt im Speicher aufrufen...
    ach und das da und dahin wo er springt ist im gleichen Segment...

    MFG

    LordHoto



  • im gleichen segment in dem der Int initialisiert wird....


Anmelden zum Antworten