Interrupt-Vector?
-
Der Code war schon fast richtig:
IDEAL model tiny P386 macro NewLine mov al, 13 mov ah, 0Eh mov bx, 7 int 10h mov al, 10 mov ah, 0Eh mov bx, 7 int 10h endm NewLine codeseg org 0h @@Entry: jmp @@SkipData StartMsg db "Kernel geladen!", 0 @@SkipData: assume cs:@code, ds:@code, es:@code mov ax, cs mov ds, ax mov es, ax mov si, offset StartMsg call Print NewLine mov ax, 0 mov ds, ax mov ax, cs mov es, ax mov ax, [word ptr 24h] mov [es:OldInt9], ax mov ax, [word ptr 26h] mov [es:OldInt9+2], ax cli mov [word ptr 24h], offset Int9Handler mov [word ptr 26h], 1000h sti @@hang: jmp @@hang ; Erwartet die Adresse des auszugebenden nullterminierten Puffers in DS:SI proc Print far @@PrintLoop: lodsb cmp al, 0 je @@PrintEnde mov ah, 0Eh mov bx, 7 int 10h jmp @@PrintLoop @@PrintEnde: retf endp Print TasteGedrueckt db "Taste gedrueckt!", 0 proc Int9Handler far pusha push ds ; Den Original-Handler des BIOS aufrufen pushf db 09Ah ; far call OldInt9 dw ?, ? mov ax, cs mov ds, ax mov si, offset TasteGedrueckt call Print pop ds popa iret endp Int9Handler end @@Entry
-
hey,will auch
komisch auf die idee cs auszugeben bin ich auch mal gekommen ,allerdings gings bei mir um org 100h
wenn ich sowas lese kriege ich immer lustig auch wieder was zu machen und werde aktiv,ich hab s recht schnell hinbekommen aber es funzt nur einmal danach is sense!?.model tiny .code org 0100h START: jmp go go: mov ax,7b00h xor dx,dx mov bx,16 div bx push ax pop ds cli; mov ax,9000 mov ss,ax mov sp,00h sti; cld; call print cli xor ax,ax push ax pop es mov ax,4 mov bx,9 mul bx push ax pop di mov ax,offset key; add ax,7b00h stosw xor ax,ax stosw sti hang: jmp hang message db "Hello this is bigOS v0.002 and cs is: ",0 print: mov si, offset message xor di,di; read: lodsb mov ah,0eh or al,al jz ende int 10h jmp read; ende: push cs pop ax call intout; ret intout: ;parameter in ax!!!!!!! or ax,ax jz was_zero mov cx,5 mov bx,10000 loop________1: xor dx,dx div bx mov ah,0eh or al,al add al,48 int 10h mov ax,bx push dx xor dx,dx mov bx,10 div bx mov bx,ax pop ax loop loop________1 ret was_zero: zero_________2: mov ah,0eh add al,48 int 10h ret; key: mov al,'.' mov bl,33 mov ah,0eh int 10h; iret org 2feh db 0aah,055h END START
-
@ cd9000 das dein system ohne den orginal tastaturhandler nur ein zeichen auswertet und dann einfriert liegt daran, dass du auch die tastaturpuffer weieder freischalten must, und die interuptsperre wieder aufheben musst. ( letzteres weis ich nicht genau. was ein hwint alles macht. ersteres sind glaubich 2 bis 3 out befehle um den tastaturbaustein wieder entsprechend vorzubereiten.(müsste heut abend mal nachschauen, hab mal so nen tastaturhandler selber geschrieben))
gruss termite