home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / cpu / protex / prot3.asm < prev    next >
Assembly Source File  |  1989-07-29  |  6KB  |  144 lines

  1.                             PAGE  ,132
  2.                             Title Protected Mode Programming for the PC-AT
  3.                             subttl Version 3.0 ( or 1.3 )
  4.                             .286P
  5.  
  6. ; DATA STRUCTURE DEFINITIONS
  7.  
  8. DESCRIP     STRUC             ; Standard Descriptor
  9.   limit           Dw    ?     ; Limit of Segment
  10.   phys_addr_lo    Dw    ?     ; Physical 24bit address (LO WORD)
  11.   phys_addr_hi    Db    ?     ; Physical 24bit address (HI BYTE)
  12.   access          Db    ?     ; Access Rights Byte
  13.                   Dw    0     ; Reserved 0 for compatability between 286-386
  14. DESCRIP     ENDS
  15.  
  16. TSS_BLOCK   STRUC             ; Task State Segment Descriptor
  17.   back_link       Dw    ?     ; Link To Previous active TSS
  18.   rSP0            Dw    ?     ; Level 0 Stack
  19.   rSS0            Dw    ?     ;
  20.   rSP1            Dw    ?     ; Level 1 Stack
  21.   rSS1            Dw    ?     ;
  22.   rSP2            Dw    ?     ; Level 2 Stack
  23.   rSS2            Dw    ?     ;
  24.   rIP             Dw    ?     ; Instruction Pointer
  25.   FLAGS           Dw    ?     ;
  26.   rAX             Dw    ?     ;
  27.   rCX             Dw    ?     ;
  28.   rDX             Dw    ?     ;
  29.   rBX             Dw    ?     ;
  30.   rSP             Dw    ?     ;
  31.   rBP             Dw    ?     ;
  32.   rSI             Dw    ?     ;
  33.   rDI             Dw    ?     ;
  34.   rES             Dw    ?     ;
  35.   rCS             Dw    ?     ;
  36.   rSS             Dw    ?     ; Active Stack Seg Sel
  37.   rDS             Dw    ?     ;
  38.   task_LDT        Dw    ?     ; LDT Selector
  39. TSS_BLOCK   ENDS
  40.  
  41.  
  42. TSS         EQU   1           ; Gate Types
  43. LDT         EQU   2
  44. TSS_BUSY    EQU   3
  45. CALL_GATE   EQU   4
  46. TASK_GATE   EQU   5
  47. INT_GATE    EQU   6
  48. TRAP_GATE   EQU   7
  49. RDONLY      EQU   0           ; Segment Types
  50. RD_WR       EQU   1           ; Read/Write
  51. RD_WR_XD    EQU   3           ; Read/Write Expand Down
  52. EXONLY      EQU   4           ; Exec Only
  53. EX_RD       EQU   5           ; Execute/Readable
  54. EXONLY_CF   EQU   6           ; Execute Only -- Conforming
  55. EX_RD_CF    EQU   7           ; Exec/Readable -- Conforming
  56. TSS_LIMIT   EQU   43          ; Just a num
  57.  
  58.  
  59. MSEG        MACRO     name, type, priv, combine   ;; Start a MEM Segment
  60. name        SEGMENT   PARA  combine               ;; Directive
  61. zero = $                                          ;; For ALIGN
  62. &name&_start = $                                  ;; Origin
  63. &name&_ar = 90h OR (priv SHL 5) OR (type SHL 1)   ;; Access rights Byte
  64.             ENDM
  65.  
  66. SSEG        MACRO     name, type, priv            ;; Start a SYS Segment
  67. name        SEGMENT   PARA                        ;; Directive
  68. zero = $                                          ;; For ALIGN
  69. &name&_start = $                                  ;; Origin
  70. &name&_ar = 80h OR (priv SHL 5) OR type           ;; Access rights Byte
  71.  
  72. ENDSEG      MACRO     name                        ;; Terminate a segment
  73. &name&_limit = $ - &name&_start - 1               ;; Create VAR for Seg Limit
  74. name        ENDS                                  ;; End it
  75.             ENDM
  76.  
  77. ; Descriptor Building Macros
  78.  
  79. DSCRP       MACRO     export,name                 ;; Build descript for a seg
  80.             IFDIF     <export>,<>                 ;; Check for export name
  81. export      LABEL     WORD
  82.             ENDIF
  83.             Dw        &name&_limit                ;; Segment Limit
  84.             Dw        name                        ;; 16 bit seg address
  85.             Db        0                           ;; Hi address
  86.             Db        &name&_ar                   ;; Access rights
  87.             Dw        0                           ;; Reserved
  88.             ENDM
  89.  
  90.  
  91. GATE        MACRO     export,offset,select,ex,type,priv   ;; Build descr.
  92.             IFDIF     export,<>                   ;; Check export name
  93. export      LABEL     WORD                        ;;
  94.             ENDIF
  95.             Dw        offset                      ;; Offset
  96.             Dw        Select                      ;; Segment Selector
  97.             Db        wc                          ;; Word Count
  98.             Db        80h OR (priv SHL 5) + type  ;; Access rights
  99.             Dw        0                           ;; Reserved
  100.             ENDM
  101.  
  102.  
  103. ; Selector creating macros for Task segments
  104. GDT_SEL     MACRO     sel,priv                    ;;
  105.             Dw        sel + priv                  ;; Assume sel=index*8
  106.             ENDM
  107.  
  108. LDT_SEL     MACRO     sel,priv
  109.             Dw        sel + 4 + priv              ;; Like GDT but TI bit set
  110.             ENDM
  111.  
  112. ; Utility macros
  113. CALL_EX     MACRO     sel,rpl                     ;; Call Exported Item
  114.             Db        9Ah                         ;; FAR CALL
  115.             Dw        0                           ;; No Offset
  116.             Dw        sel + rpl                   ;; Selector with required pr
  117.             ENDM
  118.  
  119.             PAGE
  120. ; This Segment contains the Global Descriptor Table
  121.             MSEG      GDT,RD_WR,0
  122.  
  123. ; Required by INT 15h
  124. DESCRIP     <0,0,0,0>                       ; GDT(0) -- Always Blank
  125. DSCRP       int15_gdt_dat,GDT               ; Data -> GDT
  126. DSCRP       int15_idt_dat,IDT               ; DATA -> IDT
  127. DSCRP       ,DSC                            ; Data -> Ds
  128. DSCRP       ,DSC                            ; Data -> Es
  129. DSCRP       ,DSC                            ; Stack -> SS
  130. DESCRIP     <0,0,0,0>                       ; CODE -> BIOS (int 15 res.)
  131. DSCRP       setup_tss,INIT_TSS              ; TSS initial stack
  132. ; mini BIOS
  133. DSCRP       bio_dat,MBDAT                   ; DATA -> Mini BIOS
  134. DSCRP       bios_seg,BIOS                   ; CODE -> Mini BIOS
  135. DSCRP       disp_mono,MONO_RAM              ; DATA -> Monochrome Display
  136. DSCRP       disp_color,COLOR_RAM            ; DATA -> Color Display
  137. ; Fault Handlers
  138. DSCRP       task_df,FTASK8                  ; TSS -> Double Fault
  139. xtra8       DESCRIP <ftask8_limit,FTASK8,0,92h> ; Writable Data Alias for TSS
  140. DSCRP       task_tf,FTASK10                 ; TSS -> Task Fault
  141.  
  142.  
  143.  
  144.