windows-nt/Source/XPSP1/NT/base/boot/startrom/i386/su.inc
2020-09-26 16:20:57 +08:00

572 lines
13 KiB
PHP

;++
;
; Module name
;
; su.inc
;
; Author
;
; Thomas Parslow (tomp) Mar-1-90
;
; Description
;
; Include file for SU.ASM.
;
;
;--
.386
PAGE_SIZE equ 1000h
MACHINE_TYPE_ISA equ 0
MACHINE_TYPE_EISA equ 1
MACHINE_TYPE_MCA equ 2
;
; Define the segment:offset address pair of the location to
; load detection module.
; N.B. This definition *MUST* be the same as the ones defined
; in ..\constant.h
;
DETECTION_ADDRESS_SEG equ 1000h
DETECTION_ADDRESS_OFFSET equ 0
;
; Structure definitions and equates for INT 15 function E820
;
E820Frame struc
ErrorFlag dd ?
Key dd ?
DescSize dd ?
BaseAddrLow dd ?
BaseAddrHigh dd ?
SizeLow dd ?
SizeHigh dd ?
MemoryType dd ?
E820Frame ends
MemoryDescriptorFramePointer struc
E820FramePointer dd ?
MemoryDescriptorFramePointer ends
;
IFDEF NEC_98
IDT_ENTRIES equ 100h
BIOS_KEYBOARD_INTERRUPT equ 18h
BIOS_DISK_INTERRUPT equ 1bh
else ;NEC_98
BIOS_DISK_INTERRUPT equ 13h
BIOS_READ_SECTOR equ 2
IDT_ENTRIES equ 100h
BIOS_KEYBOARD_INTERRUPT equ 16h
endif ;NEC_98
EXPORT_STACK equ 07ffeh
RE_ENABLING equ 1
LOADER_STACK equ 061ffch
CR0_ET equ 10h
;
; Trap Number macro save eax on the stack and then pushes the
; number of the trap that's in progress.
;
TRAP_NUMBER macro num,addr
IF num EQ 9
push eax ; push place holder for error code
ENDIF
IF num LE 7
push eax ; push place holder for error code
ENDIF
push eax ; save eax on stack first
mov eax,num
push eax
jmp addr
endm
;;
;
; GetSector Stack Frame Structure
;
; Stack frame definition for GetSector call from OS loader
; to 16bit routines.
;
;;
GetSectorFrame struc
FunctionNumber dd ?
DriveNumber dd ?
HeadNumber dd ?
TrackNumber dd ?
SectorNumber dd ?
NumberOfSectors dd ?
BufferPointer dd ?
GetSectorFrame ends
;;
;
; GetEddsSector Stack Frame Structure
;
; Stack frame definition for GetEddsSector call from OS loader
; to 16bit routines.
;
;;
GetEddsSectorFrame struc
DriveNum dd ?
LBNLow dd ?
LBNHigh dd ?
NumberOfBlocks dd ?
BufPointer dd ?
FunctionNum dd ?
GetEddsSectorFrame ends
RebootFrame struc
BootType dd ?
RebootFrame ends
;
; ABIOS services Stack Frame Structure
;
; Stack frame definition for ABIOS services call from OS loader
; to 16 bit routine.
;
AbiosServicesFrame struc
AbiosFunction dd ?
CommonDataArea dd ?
InitTable dd ?
RamExtension dd ?
AbiosRoutine dd ?
LogicalId dd ?
NumberLids dd ?
AbiosServicesFrame ends
;
; Hardware detection frame structure
;
; Stack frame definition for DetectHardware call from OS loader
; to 16 bit routine.
;
DetectionFrame struc
HeapStart dd ?
HeapSize dd ?
ConfigTree dd ?
HeapUsed dd ?
LoadOptions dd ?
OptionsLength dd ?
DetectionFrame ends
;
; HardwareCursor Stack Frame Structure
;
; Stack frame definition for HardwareCursor call from OS loader
; to 16 bit routine.
;
HardwareCursorFrame struc
XCoord dd ?
YCoord dd ?
HardwareCursorFrame ends
;
; GetDateTime Stack Frame Structure
;
; Stack frame definition for GetDateTime call from OS loader
; to 16 bit routine.
;
GetDateTimeFrame struc
DateDword dd ?
TimeDword dd ?
GetDateTimeFrame ends
;
; ComPort Stack Frame Structure
;
; Stack frame definition for ComPort call from OS loader
; to 16 bit routine.
;
ComPortFrame struc
ComPortPort dd ?
ComPortFunction dd ?
ComPortArg dd ?
ComPortFrame ends
;
; IsMcaMachine Stack Frame Structure
;
; Stack frame definition for IsMcaMachine call from OS loader
; to 16 bit routine.
;
IsMcaMachineFrame struc
Dummy dd ?
IsMcaMachineFrame ends
;;
;
; GetElToritoStatus Stack Frame Structure
;
; Stack frame definition for GetElToritoStatus call from OS loader
; to 16bit routines.
;
;;
GetElToritoStatusFrame struc
SpecPacketPointer dd ?
ETDriveNum dd ?
GetElToritoStatusFrame ends
;;
;
; GetExtendedInt13Params Stack Frame Structure
;
; Stack frame definition for GetExtendedInt13Params call from OS loader
; to 16bit routines.
;
;;
GetExtendedInt13ParamsFrame struc
ParamPacketPointer dd ?
Int13UnitNumber dd ? ; really only a byte >= 0x80
GetExtendedInt13ParamsFrame ends
;;
;
; NetPcRomServices Stack Frame Structure
;
; Stack frame definition for NetPcRomServices call from OS loader
; to 16bit routines.
;
;;
NetPcRomServicesFrame struc
NetPcRomFunctionNumber dd ?
NetPcRomCommandPacketPointer dd ?
NetPcRomServicesFrame ends
;;
;
; BiosRedirectService Stack Frame Structure
;
; Stack frame definition for BiosRedirectService call from OS loader
; to 16bit routines.
;
;;
BiosRedirectServiceFrame struc
Command dd ?
BiosRedirectServiceFrame ends
;;
;
; Memory Descriptor Structure.
;
; Passed to OS loader as part of the boot context record
;
;;
MemoryDescriptor struc
BlockBase dd ?
BlockSize dd ?
MemoryDescriptor ends
;;
;
; File System Context Record Structure
;
;;
FsContextRecord struc
BootDrive db ?
FsContextRecord ends
;;
;
; IDT Descriptor Structure
;
;;
TrapDesc struc
IDT_offset dw ?
IDT_selector dw ?
IDT_attribute dw ?
IDT_reserved dw ?
TrapDesc ends
;;
;
; GDT Descriptor Structure ;;
;
;;
GDTDesc struc
GDT_limit dw 0
GDT_base1 dw 0
GDT_base2 db 0
GDT_access db 0
GDT_limacc db 0
GDT_base3 db 0
GDTDesc ends
;;
;
; GDT Selector Definitions
;
;;
NULL_Selector equ 0h
KeCodeSelector equ 8h
KeDataSelector equ 10h
UsCodeSelector equ 18h
UsDataSelector equ 20h
TSS_Selector equ 28h
PCR_Selector equ 30h
TEP_Selector equ 38h
BDA_Selector equ 40h
KeLdtSelector equ 48h
DblFltTskSelector equ 50h
SuCodeSelector equ 58h
SuDataSelector equ 60h
VideoSelector equ 68h
GDT_AliasSelector equ 70h
DbCodeSelector equ 78h
DbDataSelector equ 80h
DebugUseSelector equ 88h
MdlSelector equ 90h
;;
;
; Exception Frame Structure
; Note, this absolutely must match the corresponding structure
; defined in "types.h"
;
;;
ExceptionFrame struc
Ftr dw 0
Fdr6 dd 0
Fcr0 dd 0
Fcr2 dd 0
Fcr3 dd 0
Fss dw 0
Fgs dw 0
Ffs dw 0
Fes dw 0
Fds dw 0
Fedi dd 0
Fesi dd 0
Febp dd 0
Fesp dd 0
Febx dd 0
Fedx dd 0
Fecx dd 0
TrapNum dd 0
Feax dd 0
Error dd 0
Feip dd 0
Fcs dd 0
Feflags dd 0
ExceptionFrame ends
FUNCTION_ERROR equ -1
;;
;
; Register Frame Structure
;
; For bios int calls
;
;;
reg_frame struc
intnum dw ?
sfg dw ?
sax dw ?
sbx dw ?
scx dw ?
sdx dw ?
ssi dw ?
ses dw ?
reg_frame ends
IFDEF NEC_98
gdpRegistors struc
rAL db 0FFh
FLG db ?
rBX dw ?
rCX dw ?
rDX dw ?
gdpRegistors ends
PartitionDescriptor struc
BootableFlag db ?
PartitionType db ?
Reserved00 dw ?
IPLSector db ?
IPLTrack db ?
IPLCylinder dw ?
StartingSector db ?
StartingTrack db ?
StartingCylinder dw ?
EndingSector db ?
EndingTrack db ?
EndingCylinder dw ?
PartitionName db 16 dup(?) ; ASCII strings
PartitionDescriptor ends
BIOS_FLAG equ 500h ; byte in ROM work segment
BIOS_FLAG1 equ 480h ; byte in ROM work segment
BIOS_FLAG4 equ 484h ; byte in ROM work segment
BIOS_FLAG5 equ 458h ; byte in ROM work segment
BIOS_FLAG6 equ 45Ah ; byte in ROM work segment
AT_SWITCH equ 457h ; byte in ROM work segment
DAUA equ 584h ; byte in ROM work segment
DISK_EQUIP equ 55Ch ; byte in ROM work segment
DISK_EQUIPS_SCSI equ 482h ; byte in ROM work segment
EXPMMSIZ equ 401h ; byte in ROM work segment
EXPMMSZ2 equ 594h ; word in ROM work segment
DISK_RESULT equ 564h ; word in ROM work segment
H_EQUIPS equ 47Dh ; byte in ROM work segment
H_DISK_EQUIPS equ 47Eh ; word in ROM work segment
EQUIPS_47Ch equ 47Ch ; byte in ROM work segment
IC0 equ 10000000b
IC1 equ 01000000b
DAFloppy equ 00010000b ; floppy bit in DA
DASCSI equ 00100000b ; SCSI bit in DA
DASASI equ 00000000b ; SASI bit in DA
DEVICEFORMAT equ 0FFFFh
TRACKFORMAT equ 00000h
MEMBANK08 equ 91h ; bank 08
MEMBANK0A equ 93h ; bank 0A
ROLLOVER_COUNT equ 45011 ; 1/18.2 * 2457.6KHz /3
TIMER_VECTOR equ (8*4)
TIMER1_DATA_PORT0 equ 71h ; Timer1, channel 0 data port
TIMER1_CONTROL_PORT0 equ 77h ; Timer1, channel 0 control port
TIMER1_INTSHAREREG equ 879h ; PC-H98 TIMER INT SHARE REGISTER
COMMAND_8254_COUNTER0 equ 00h ; Select count 0
COMMAND_8254_RW_16BIT equ 30h ; Read/Write LSB firt then MSB
COMMAND_8254_MODE2 equ 4 ; Use mode 2
UR_DAT equ 030h ; data port
UR_LCR equ UR_DAT+2 ; line control registers
UR_LSR equ UR_DAT+2 ; line status register
UR_IEN equ UR_DAT+5 ; Interrupt enable
UR_TIMERSET equ 75h ; 8253 counter set
UR_TIMERMODE equ 77h ; 8253 counter mode
UR_MODE equ 01001110B ; stop 1, disable p, 8 bpc, 1 stop, x16
UR_COMMAND equ 00110111B ; RTS, err reset, RXE, DTR, TXEN
UR_RESET equ 01000000B ; internal reset command
RD_RDY equ 02h ; recieve data ready
TX_RDY equ 01h ; transmitter empty if 1
endif ;NEC_98
;;
;; Processor Flags
;;
PROT_MODE equ 000000001 ; Enable protect mode operation
ENABLE_PAGING equ 80000000h ; Enable paging hardware
PD_PHYSICAL_ADDRESS equ 99000h
TSS_SIZE equ 80h
OVERRIDE equ 66h
;
; Operand and Address size overrides
;
OPSIZE macro
db 66h
endm
ADSIZE macro
db 67h
endm
;
; External Procedures for SUDATA.ASM
;
IFDEF SU_CODEMODULE
extrn _SuMain:near
extrn _ScreenStart:near
extrn _vp:near
extrn _putx:near
extrn _TrapHandler:near
extrn _GDTregister:fword
extrn _IDTregister:fword
extrn _IDTregisterZero:fword
extrn saveDS:word
extrn SuStack:word
extrn _edata:word
extrn _FileStart:dword
ENDIF
;
; External Procedures for SUDATA.ASM
;
IFDEF SU_DATAMODULE
extrn Trap0:far
extrn Trap1:far
extrn Trap2:far
extrn Trap3:far
extrn Trap4:far
extrn Trap5:far
extrn Trap6:far
extrn Trap7:far
extrn Trap8:far
extrn Trap9:far
extrn TrapA:far
extrn TrapB:far
extrn TrapC:far
extrn TrapD:far
extrn TrapE:far
extrn TrapF:far
extrn _edata:near
ENDIF
;
; Segment declarations for "Small Model" 16 bit Su Module.
;
_TEXT segment para use16 public 'CODE'
_TEXT ends
_DATA segment para use16 public 'DATA'
_DATA ends
CONST segment para use16 public 'CONST'
CONST ends
_BSS segment para use16 public 'BSS'
_BSS ends
DGROUP group const, _BSS, _DATA
;;; END OF FILE ;;;