⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initcode.inc

📁 MMURTL(tm) Computer Operating System Ver x0.8, source code.
💻 INC
📖 第 1 页 / 共 3 页
字号:
;=============================================================================
; InitIDT
; First, inits the IDT with 256 entries to a generic
; handler that does nothing (except IRETD) when called.
; Second, adds each of the basic IDT entries for included
; software and hardware interrupt handlers.
; ISRs loaded with device drivers must use SetIRQVector.
;
; IN	: Nothing
; Out	: Nothing
; Used	: ALL registers and flags
;
InitIDT:
		MOV ECX, 255			;Last IDT Entry
InitID01:
		PUSH ECX
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate
		POP ECX
		LOOP InitID01

		;Now we add each of the known interrupts

		MOV ECX, 0				;Divide By Zero
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntDivBy0
		CALL FAR PTR _AddIDTGate

		MOV ECX, 1				;Single Step
		MOV EAX, 08F00h			;DPL 3, Trap gate
		MOV EBX, OSCodeSel		;
		MOV ESI, Offset IntDbgSS
		CALL FAR PTR _AddIDTGate

		;Trying 8E00 (Int gate vice trap gate which leave Ints disabled)

		MOV ECX, 3				;Breakpoint
		MOV EAX, 08E00h			;DPL 3, Trap Gate (for Debugger) WAS 8F00
		MOV EBX, OSCodeSel		;This will be filled in with TSS of Dbgr later
		MOV ESI, OFFSET IntDebug
		CALL FAR PTR _AddIDTGate

		MOV ECX, 4				;Overflow
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntOverFlow
		CALL FAR PTR _AddIDTGate

		MOV ECX, 6				;Invalid OPcode
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntOpCode
		CALL FAR PTR _AddIDTGate

		MOV ECX, 8				;Double Exception
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntDblExc
		CALL FAR PTR _AddIDTGate

		MOV ECX, 0Ah			;Invalid TSS
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntInvTSS
		CALL FAR PTR _AddIDTGate

		MOV ECX, 0Bh			;Seg Not Present
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntNoSeg
		CALL FAR PTR _AddIDTGate

		MOV ECX, 0Ch			;Int Stack Overflow
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntStkOvr
		CALL FAR PTR _AddIDTGate

		MOV ECX, 0Dh			;GP fault
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntGP
		CALL FAR PTR _AddIDTGate

		MOV ECX, 0Eh			;Int Page Fault
		MOV EAX, 08F00h			;DPL 3, TRAP GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntPgFlt
		CALL FAR PTR _AddIDTGate

		MOV ECX, 20h			;Int TIMER				IRQ0
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntTimer
		CALL FAR PTR _AddIDTGate

		MOV ECX, 21h			;Int KEYBOARD			IRQ1
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntKeyBrd
		CALL FAR PTR _AddIDTGate

		MOV ECX, 22h			;Int PICU 2 (from PICU) IRQ2
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntPICU2
		CALL FAR PTR _AddIDTGate

		MOV ECX, 23h			;Int COMM1				IRQ3
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 24h			;Int COMM2				IRQ4
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 25h			;Int LPT2 				IRQ5
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 26h			;Int Floppy				IRQ6
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ	;FDD will set this himself
		CALL FAR PTR _AddIDTGate

		MOV ECX, 27h			;Int ..........			IRQ7
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 28h			;Int ..........			IRQ8
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 29h			;Int ..........			IRQ9
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Ah			;Int ..........			IRQ10
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Bh			;Int ..........			IRQ11
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Ch			;Int ..........			IRQ12
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Dh			;Int ..........			IRQ13
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Eh			;Int ..........			IRQ14
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		MOV ECX, 2Fh			;Int ..........			IRQ15
		MOV EAX, 08E00h			;DPL 3, INTERRUPT GATE
		MOV EBX, OSCodeSel		;
		MOV ESI, OFFSET IntQ
		CALL FAR PTR _AddIDTGate

		RETN

;=============================================================================
; InitOSPublics adds all OS primitives to the array of call gates. This can't
; before initcallgates, but MUST be called before the first far call to any
; OS primitive thorugh a call gate!!!
; IF YOU ADD AN OS PUBLIC MAKE SURE IT GETS PUT HERE!!!!!
;
; IN   : Nothing
; Out  : Nothing
; Used : ALL registers and flags
;
InitOSPublics  PROC NEAR

		MOV EAX, 0EC02h		;WaitMsg -- 2 DWord Params, DPL 3
		MOV ECX, 40h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _WaitMsg
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC03h		;SendMsg -- 3 DWord Params, DPL 3
		MOV ECX, 48h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _SendMsg
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C03h		;ISendMsg -- 3 DWord params, DPL 0
		MOV ECX, 50h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _ISendMsg
		CALL FAR PTR _AddCallGate

;		MOV EAX, 08C03h		;Reserved (was FSendMsg -- 3 DWord params, DPL 1)
;		MOV ECX, 58h
;		MOV DX, OSCodeSel
;		MOV ESI, OFFSET _FSend
;		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC0Ch		;Request --  12 nDWord params
		MOV ECX, 60h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Request
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;Respond -- 2 nDWord params
		MOV ECX, 68h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Respond
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;Check -- 2 DWord Params, DPL 3
		MOV ECX, 70h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _CheckMsg
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC07h		;NewTask -- 7 DWord param, DPL 3
		MOV ECX, 78h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _NewTask
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;AllocExch -- 1 DWord param, DPL 3
		MOV ECX, 80h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _AllocExch
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;DeAllocExch -- 1 DWord param, DPL 3
		MOV ECX, 88h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _DeAllocExch
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;Sleep -- 1 DWord param, DPL 3
		MOV ECX, 90h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Sleep
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;Alarm -- 2 DWord params, DPL 3
		MOV ECX, 98h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Alarm
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;AllocOSPage -- 2 DWord params, DPL 3
		MOV ECX, 0A0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _AllocOSPage
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;AllocPage -- 2 DWord params, DPL 3
		MOV ECX, 0A8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _AllocPage
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;RegisterSvc -- 2 DWord params, DPL 3
		MOV ECX, 0B0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _RegisterSvc
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C05h		;DMASetUp -- 5 DWord Params  DPL 0
		MOV ECX, 0B8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _DMASetUp
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;ReadKBD -- 2 DWord Param  DPL 3
		MOV ECX, 0C0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _ReadKBD
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C00h		;AddCallGate -- 0 DWord Params  DPL 0
		MOV ECX, 0C8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _AddCallGate
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C00h		;AddIDTGate -- 0 DWord Params  DPL 0
		MOV ECX, 0D0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _AddIDTGate
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C01h		;EndOfIRQ -- 1 DWord Params  DPL 0
		MOV ECX, 0D8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _EndOfIRQ
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C01h		;MaskIRQ -- 1 DWord Params  DPL 0
		MOV ECX, 0E0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _MaskIRQ
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C01h		;UnMaskIRQ -- 1 DWord Params  DPL 0
		MOV ECX, 0E8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _UnMaskIRQ
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C02h		;SetIRQVector -- 2 DWord Params  DPL 0
		MOV ECX, 0F0h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _SetIRQVector
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C02h		;GetIRQVector -- 2 DWord Params  DPL 0
		MOV ECX, 0F8h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _GetIRQVector
		CALL FAR PTR _AddCallGate

		MOV EAX, 08C04h		;InitDevDr -- 4 DWord Params  DPL 0
		MOV ECX, 100h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _InitDevDr
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC03h		;DeviceInit -- 3 DWord Params  DPL 3
		MOV ECX, 108h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _DeviceInit
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC05h		;DeviceOp -- 5 DWord Params  DPL 3
		MOV ECX, 110h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _DeviceOp
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC04h		;DeviceStat -- 4 DWord Params  DPL 3
		MOV ECX, 118h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _DeviceStat
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC00h		;Beep -- 0 DWord Params  DPL 3
		MOV ECX, 120h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Beep
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC02h		;Tone -- 2 DWord Params  DPL 3
		MOV ECX, 128h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _Tone
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;KillAlarm -- 1 DWord Params  DPL 3
		MOV ECX, 130h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _KillAlarm
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;MicroDelay -- 1 DWord Params  DPL 3
		MOV ECX, 138h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _MicroDelay
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC05h		;SpawnTask -- 5 DWord param, DPL 3
		MOV ECX, 140h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _SpawnTask
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;GetCMOSTime -- 1 DWord param, DPL 3
		MOV ECX, 148h
		MOV DX, OSCodeSel
		MOV ESI, OFFSET _GetCMOSTime
		CALL FAR PTR _AddCallGate

		MOV EAX, 0EC01h		;GetTimerTick -- 1 DWord param, DPL 3
		MOV ECX, 150h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -