LTCD_070816.ISO
This commit is contained in:
1 parent
d14bbc24f9
commit
0e9364ff4c
506 files changed
+157705
-41812
No files matched your search
@@ -0,0 +1,838 @@
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ_VECTORS::
|
||||
DU4 IRQ00,IRQ01,IRQ02,IRQ03;
|
||||
DU4 IRQ04,IRQ05,IRQ06,IRQ07;
|
||||
DU4 IRQ08,IRQ09,IRQ0A,IRQ0B;
|
||||
DU4 IRQ0C,IRQ0D,IRQ0E,IRQ0F;
|
||||
|
||||
DU4 IRQ10,IRQ11,IRQ12,IRQ13;
|
||||
DU4 IRQ14,IRQ15,IRQ16,IRQ17;
|
||||
DU4 IRQ18,IRQ19,IRQ1A,IRQ1B;
|
||||
DU4 IRQ1C,IRQ1D,IRQ1E,IRQ1F;
|
||||
|
||||
DU4 IRQ20,IRQ21,IRQ22,IRQ23;
|
||||
DU4 IRQ24,IRQ25,IRQ26,IRQ27;
|
||||
DU4 IRQ28,IRQ29,IRQ2A,IRQ2B;
|
||||
DU4 IRQ2C,IRQ2D,IRQ2E,IRQ2F;
|
||||
|
||||
DU4 IRQ30,IRQ31,IRQ32,IRQ33;
|
||||
DU4 IRQ34,IRQ35,IRQ36,IRQ37;
|
||||
DU4 IRQ38,IRQ39,IRQ3A,IRQ3B;
|
||||
DU4 IRQ3C,IRQ3D,IRQ3E,IRQ3F;
|
||||
|
||||
DU4 IRQ40,IRQ41,IRQ42,IRQ43;
|
||||
DU4 IRQ44,IRQ45,IRQ46,IRQ47;
|
||||
DU4 IRQ48,IRQ49,IRQ4A,IRQ4B;
|
||||
DU4 IRQ4C,IRQ4D,IRQ4E,IRQ4F;
|
||||
|
||||
DU4 IRQ50,IRQ51,IRQ52,IRQ53;
|
||||
|
||||
////***************** INTERRUPT ROUTINES ***************
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ00:: PUSH RDX
|
||||
XOR EDX,EDX
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ01: PUSH RDX
|
||||
MOV RDX,1
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ02: //Halt
|
||||
XOR ESI,ESI
|
||||
CALL HALT_CPU
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ03: PUSH RDX
|
||||
MOV RDX,3
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ04: PUSH RDX
|
||||
MOV RDX,4
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ05: PUSH RDX
|
||||
MOV RDX,5
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ06: PUSH RDX
|
||||
MOV RDX,6
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ07: PUSH RDX
|
||||
MOV RDX,7
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ08: PUSH RDX
|
||||
MOV RDX,8
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ09: PUSH RDX
|
||||
MOV RDX,9
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0A: PUSH RDX
|
||||
MOV RDX,0x0A
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0B: PUSH RDX
|
||||
MOV RDX,0x0B
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0C: PUSH RDX
|
||||
MOV RDX,0x0C
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0D: PUSH RDX
|
||||
MOV RDX,0x0D
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0E: PUSH RDX
|
||||
MOV RDX,0x0E
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ0F: PUSH RDX
|
||||
MOV RDX,0x0F
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ10: PUSH RDX
|
||||
MOV RDX,0x10
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ11: PUSH RDX
|
||||
MOV RDX,0x11
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ12: PUSH RDX
|
||||
MOV RDX,0x12
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ13: PUSH RDX
|
||||
MOV RDX,0x13
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ14: PUSH RDX
|
||||
MOV RDX,0x14
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ15: PUSH RDX
|
||||
MOV RDX,0x15
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ16: PUSH RDX
|
||||
MOV RDX,0x16
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ17: PUSH RDX
|
||||
MOV RDX,0x17
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ18: PUSH RDX
|
||||
MOV RDX,0x18
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ19: PUSH RDX
|
||||
MOV RDX,0x19
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1A: PUSH RDX
|
||||
MOV RDX,0x1A
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1B: PUSH RDX
|
||||
MOV RDX,0x1B
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1C: PUSH RDX
|
||||
MOV RDX,0x1C
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1D: PUSH RDX
|
||||
MOV RDX,0x1D
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1E: PUSH RDX
|
||||
MOV RDX,0x1E
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ1F: PUSH RDX
|
||||
MOV RDX,0x1F
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ20: CLD
|
||||
PUSH RAX
|
||||
PUSH_C_REGS
|
||||
MOV RBP,RSP
|
||||
MOV RBX,U8 SC_RIP+8[RBP]
|
||||
XOR EAX,EAX
|
||||
MOV RDX,GS:CPU_ABSOLUTE_ADDRESS[RAX]
|
||||
MOV RAX,FS:TSS_ABSOLUTE_ADDRESS[RAX]
|
||||
BT U8 TSS_TASK_FLAGS[RAX],TSSf_IDLE
|
||||
JC @@1a
|
||||
CMP RBX,U4 IDLE_START
|
||||
JB @@1
|
||||
CMP RBX,U4 IDLE_END
|
||||
JA @@1
|
||||
@@1a: INC U8 CPU_IDLE_POINT_HITS[RDX]
|
||||
@@1: MOV RAX,U8 CPU_NUM[RDX]
|
||||
OR RAX,RAX
|
||||
JZ @@3
|
||||
XOR EAX,EAX
|
||||
MOV EAX,U4 MP_EOI
|
||||
MOV U4 [RAX],0
|
||||
JMP @@5
|
||||
|
||||
@@3: MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ00*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@2
|
||||
PUSH RBX
|
||||
CALL RAX
|
||||
ADD RSP,8
|
||||
@@2: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
|
||||
@@5: POP_C_REGS
|
||||
XOR EAX,EAX
|
||||
MOV RAX,FS:TSS_ABSOLUTE_ADDRESS[RAX]
|
||||
BT U8 TSS_TASK_FLAGS[RAX],TSSf_PREEMPT
|
||||
JC @@5A
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
@@5A: POP RAX
|
||||
CLI
|
||||
CALL SAVE_CONTEXT //PREEMPTIVE
|
||||
|
||||
XOR ESI,ESI
|
||||
MOV RSI,FS:TSS_ABSOLUTE_ADDRESS[RSI]
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 [RBP]
|
||||
MOV U8 TSS_RIP[RSI],RAX
|
||||
MOV RAX,U8 16[RBP]
|
||||
MOV U8 TSS_RFLAGS[RSI],RAX
|
||||
MOV RAX,U8 24[RBP]
|
||||
MOV U8 TSS_RSP[RSI],RAX
|
||||
JMP U4 SIN_PART1
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ21: CLD
|
||||
PUSH_C_REGS
|
||||
CALL KBD_IRQ_HANDLER
|
||||
MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ22: PUSH RDX
|
||||
MOV RDX,0x22
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ23: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ03*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@231
|
||||
CALL RAX
|
||||
@@231: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ24: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ04*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@241
|
||||
CALL RAX
|
||||
@@241: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ25: PUSH RDX
|
||||
MOV RDX,0x25
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ26: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ06*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@261
|
||||
CALL RAX
|
||||
@@261: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ27: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ07*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@271
|
||||
CALL RAX
|
||||
@@271: MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ28: PUSH RDX
|
||||
MOV RDX,0x28
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ29: PUSH RDX
|
||||
MOV RDX,0x29
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2A: PUSH RDX
|
||||
MOV RDX,0x2A
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2B: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ0B*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@2B1
|
||||
CALL RAX
|
||||
@@2B1: MOV AL,0x20
|
||||
OUT 0xA0,AL
|
||||
MOV AL,0x20
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2C: PUSH RAX //keyboard
|
||||
MOV AL,0x20
|
||||
OUT 0xA0,AL
|
||||
MOV AL,0x20 //ACKNOWLEDGE INTERRUPT
|
||||
OUT 0x20,AL
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2D: PUSH RDX
|
||||
MOV RDX,0x2D
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2E: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ0E*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@2E1
|
||||
CALL RAX
|
||||
@@2E1: MOV AL,0x20
|
||||
OUT 0xA0,AL
|
||||
MOV AL,0x20
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ2F: CLD
|
||||
PUSH_C_REGS
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_IRQ0F*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@2F1
|
||||
CALL RAX
|
||||
@@2F1: MOV AL,0x20
|
||||
OUT 0xA0,AL
|
||||
MOV AL,0x20
|
||||
OUT 0x20,AL
|
||||
POP_C_REGS
|
||||
IRET
|
||||
|
||||
|
||||
/*************************************/
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ30: PUSH RDX
|
||||
MOV RDX,0x30
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ31: PUSH RDX
|
||||
MOV RDX,0x31
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ32: PUSH RDX
|
||||
MOV RDX,0x32
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ33: PUSH RDX
|
||||
MOV RDX,0x33
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
|
||||
COUT_PUT_DOUBLE:
|
||||
PUSH_C_REGS
|
||||
PUSH U8 8[RBP]
|
||||
CALL CP_PUT_FLOAT
|
||||
ADD RSP,8
|
||||
POP_C_REGS
|
||||
COUT_RETURN:
|
||||
RET
|
||||
COUT_PUT_STR:
|
||||
PUSH RSI
|
||||
MOV RSI,RAX
|
||||
CALL PUT_STR
|
||||
POP RSI
|
||||
RET
|
||||
|
||||
COUT_JMP_TABLE:
|
||||
DU8 COUT_RETURN;
|
||||
DU8 COUT_RETURN;
|
||||
DU8 PUT_HEX_U1;
|
||||
DU8 PUT_HEX_U1;
|
||||
DU8 PUT_HEX_U2;
|
||||
DU8 PUT_HEX_U2;
|
||||
DU8 PUT_HEX_U4;
|
||||
DU8 PUT_HEX_U4;
|
||||
DU8 PUT_HEX_U8;
|
||||
DU8 PUT_HEX_U8;
|
||||
DU8 COUT_PUT_DOUBLE;
|
||||
DU8 COUT_RETURN;
|
||||
|
||||
//pointer types
|
||||
DU8 COUT_RETURN;
|
||||
DU8 COUT_RETURN;
|
||||
DU8 COUT_PUT_STR;
|
||||
|
||||
COUT_JOIN::
|
||||
OR RBX,RBX
|
||||
JZ @@100
|
||||
@@20: MOV RDX,U8 [RBP]
|
||||
MOV RAX,U8 8[RBP]
|
||||
CALL U8 COUT_JMP_TABLE[RDX*8]
|
||||
SUB RBP,16
|
||||
DEC RBX
|
||||
JNZ @@20
|
||||
@@100: RET
|
||||
|
||||
//I_COUT
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ34:: PUSH RBP
|
||||
MOV RBP,RSP
|
||||
BT U8 24[RBP],9
|
||||
JNC @@I34
|
||||
STI
|
||||
@@I34:
|
||||
MOV RBP,U8 32[RBP]
|
||||
MOV RBX,RAX //GET PARAM CNT
|
||||
ADD RBX,RBX
|
||||
LEA RBP,-16[RBP+RBX*8]
|
||||
MOV RBX,RAX //GET PARAM CNT
|
||||
CALL COUT_JOIN
|
||||
POP RBP
|
||||
IRET
|
||||
|
||||
|
||||
//I_COUTLN
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ35:: PUSH RBP
|
||||
MOV RBP,RSP
|
||||
BT U8 24[RBP],9
|
||||
JNC @@I35
|
||||
STI
|
||||
@@I35:
|
||||
MOV RBP,U8 32[RBP]
|
||||
MOV RBX,RAX //GET PARAM CNT
|
||||
ADD RBX,RBX
|
||||
LEA RBP,-16[RBP+RBX*8]
|
||||
MOV RBX,RAX //GET PARAM CNT
|
||||
CALL COUT_JOIN
|
||||
CALL CRLF
|
||||
POP RBP
|
||||
IRET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ36: PUSH RDX
|
||||
MOV RDX,0x36
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ37: PUSH RDX
|
||||
MOV RDX,0x37
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ38: PUSH RDX
|
||||
MOV RDX,0x38
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ39: PUSH RDX
|
||||
MOV RDX,0x39
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3A: PUSH RDX
|
||||
MOV RDX,0x3A
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3B: PUSH RDX
|
||||
MOV RDX,0x3B
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3C: PUSH RDX
|
||||
MOV RDX,0x3C
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3D: PUSH RDX
|
||||
MOV RDX,0x3D
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3E: PUSH RDX
|
||||
MOV RDX,0x3E
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ3F: PUSH RDX
|
||||
MOV RDX,0x3F
|
||||
JMP U4 IRQFAULT
|
||||
|
||||
//************************************ SOFTWARE INT'S ******************************
|
||||
ALIGN 8,OC_NOP
|
||||
IRQ40: //UNARY_MINUS
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FCHS
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ41: //INC
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FLD1
|
||||
FADDP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ42: //DEC
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD1
|
||||
FLD U8 [RBX]
|
||||
FSUBRP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ43: //POWER
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
PUSH 0
|
||||
MOV RBX,RSP
|
||||
FSTCW U4 [RBX]
|
||||
FWAIT
|
||||
MOV AX,U2 [RBX]
|
||||
MOV U2 2[RBX],AX
|
||||
OR AX,0x0C00
|
||||
MOV U2 [RBX],AX
|
||||
FLDCW U4 [RBX]
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 16[RBX]
|
||||
FYL2X // y*log2(x)
|
||||
FST U8 16[RBX]
|
||||
FRNDINT
|
||||
FLD U8 16[RBX]
|
||||
FSUBRP
|
||||
F2XM1
|
||||
FLD1
|
||||
FADDP
|
||||
FSTP U8 8[RBX]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FLD U8 16[RBX]
|
||||
FLD U8 8[RBX]
|
||||
FSCALE // ST0<<ST1
|
||||
FSTP U8 16[RBX]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FLDCW U4 2[RBX]
|
||||
FWAIT
|
||||
ADD RSP,16
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ44: //MUL
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 [RBX]
|
||||
FMULP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
IRET
|
||||
|
||||
IRQ45: //DIV
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 [RBX]
|
||||
FDIVP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
IRET
|
||||
|
||||
IRQ46: //MOD
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FLD U8 8[RBX]
|
||||
@@DMOD: FPREM
|
||||
FSTSW
|
||||
FWAIT
|
||||
TEST AX,0x400
|
||||
JNZ @@DMOD
|
||||
FSTP U8 [RBX]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
IRET
|
||||
|
||||
IRQ47: //ADD
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FLD U8 8[RBX]
|
||||
FADDP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
IRET
|
||||
|
||||
IRQ48: //SUB
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 [RBX]
|
||||
FSUBP
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
IRET
|
||||
|
||||
IRQ49: //LESS
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FLD U8 8[RBX]
|
||||
FCOMIP
|
||||
FWAIT
|
||||
MOV RAX,0
|
||||
ADC RAX,0
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
ADD RSP,16
|
||||
IRET
|
||||
|
||||
IRQ4A: //GREATER
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 [RBX]
|
||||
FCOMIP
|
||||
FWAIT
|
||||
MOV RAX,0
|
||||
ADC RAX,0
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
ADD RSP,16
|
||||
IRET
|
||||
|
||||
IRQ4B: //LESS_EQUAL
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 8[RBX]
|
||||
FLD U8 [RBX]
|
||||
FCOMIP
|
||||
FWAIT
|
||||
MOV RAX,1
|
||||
SBB RAX,0
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
ADD RSP,16
|
||||
IRET
|
||||
|
||||
IRQ4C: //GREATER_EQUAL
|
||||
PUSH RDX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FLD U8 8[RBX]
|
||||
FCOMIP
|
||||
FWAIT
|
||||
MOV RAX,1
|
||||
SBB RAX,0
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
ADD RSP,16
|
||||
IRET
|
||||
|
||||
IRQ4D: //TO_INT_RAX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FISTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ4E: //TO_DOUBLE_RAX
|
||||
PUSH RAX
|
||||
MOV RBX,RSP
|
||||
FILD U8 [RBX]
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RAX
|
||||
IRET
|
||||
|
||||
IRQ4F: //TO_INT_RDX
|
||||
PUSH RDX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FISTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RDX
|
||||
IRET
|
||||
|
||||
IRQ50: //TO_DOUBLE_RDX
|
||||
PUSH RDX
|
||||
MOV RBX,RSP
|
||||
FILD U8 [RBX]
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RDX
|
||||
IRET
|
||||
|
||||
IRQ51: //TO_INT_RCX
|
||||
PUSH RCX
|
||||
MOV RBX,RSP
|
||||
FLD U8 [RBX]
|
||||
FISTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RCX
|
||||
IRET
|
||||
|
||||
IRQ52: //TO_DOUBLE_RCX
|
||||
PUSH RCX
|
||||
MOV RBX,RSP
|
||||
FILD U8 [RBX]
|
||||
FSTP U8 [RBX]
|
||||
FWAIT
|
||||
POP RCX
|
||||
IRET
|
||||
|
||||
IRQ53: PUSH RDX
|
||||
MOV RDX,0x53
|
||||
JMP U1 IRQFAULT
|
||||
|
||||
//************************************ SOFTWARE INT'S ******************************
|
||||
|
||||
IRQFAULT::
|
||||
PUSH RAX
|
||||
XOR EAX,EAX
|
||||
MOV RAX,FS:TSS_ABSOLUTE_ADDRESS[RAX]
|
||||
MOV U4 TSS_FAULT_NUM[RAX],EDX
|
||||
POP RAX
|
||||
POP RDX
|
||||
CALL SAVE_CONTEXT
|
||||
XOR ESI,ESI
|
||||
MOV RSI,FS:TSS_ABSOLUTE_ADDRESS[RSI]
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 [RBP]
|
||||
MOV U8 TSS_RIP[RSI],RAX
|
||||
MOV RAX,U8 16[RBP]
|
||||
MOV U8 TSS_RFLAGS[RSI],RAX
|
||||
MOV RAX,U8 24[RBP]
|
||||
MOV U8 TSS_RSP[RSI],RAX
|
||||
MOV RSP,RAX
|
||||
MOV RAX,TSS_RAX[RSI]
|
||||
MOV RBP,TSS_RBP[RSI]
|
||||
MOV RSI,TSS_RSI[RSI]
|
||||
CALL CP_FAULT2
|
||||
JMP U4 CONT_SWAP2
|
||||
Reference in new issue
Block a user