home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / pao / ms_dos / swatch / src / vsync.asm < prev    next >
Assembly Source File  |  1980-01-02  |  5KB  |  197 lines

  1. ;==============================================================================
  2. ;    << MASM V5.1 >>  for  FM TOWNS
  3. ;==============================================================================
  4.     page        60,132
  5.     name        VSYNC
  6.     title        VSYNC
  7. ;==============================================================================
  8. ;    VSYNC割り込み
  9. ;
  10. ;    CREATE : 1990.08.17
  11. ;    FINISH : 1990.08.20  V0.50
  12. ;
  13. ;    MSC 用 関数(スモールモデル)
  14. ;    -- インターバルタイマの使用 --
  15. ;    VSYNC_init(void) ;
  16. ;    VSYNC_release(void) ;
  17. ;
  18. ;    < HISTORY >
  19. ;    1990.08.17 : CREATE
  20. ;
  21. ;    All Rights Reserved, Copyright (C) Y.Hirata 1990.
  22. ;
  23. ;    Programed by Y.Hirata ( NIFTY-ID : NAB03321 )
  24. ;==============================================================================
  25. ;
  26.             .286                            ;
  27.             .MODEL    SMALL,C                    ;
  28.             .STACK    100h                    ;
  29. ;
  30. ;********************************************
  31. ;            データ領域
  32. ;********************************************
  33.             .DATA                            ;
  34. ;
  35.             public    Vcount                    ;
  36. Vcount            dw        ?                    ; VSYNCカウンタ
  37. ;
  38. ;
  39. ;********************************************
  40. ;            コード領域
  41. ;********************************************
  42.             .CODE                            ;
  43. ;
  44. COPYRIGHT    db            0Dh
  45.             db            '     ',0Dh,0Ah,07h
  46.             db            0Dh,0Ah,'        '
  47.             db            'VSYNC INTERRUPT V0.50   1990-08-17',0Dh,0Ah
  48.             db            0Dh,0Ah,'        '
  49.             db            'Copyright (C) Y.Hirata 1990.'
  50.             db            0Dh,0Ah,0Dh,0Ah,1Ah
  51. ;
  52. TITLE_name    db            'VSYNC INTERRUPT'
  53. TITLE_len    EQU            $-TITLE_name
  54. ;
  55. ;
  56. ;********************************************
  57. ;            定数定義
  58. ;********************************************
  59. TRUE        EQU            1
  60. FALSE        EQU            0
  61. ;
  62. ZERO        EQU            0
  63. ;
  64. INT_INT        EQU            0AEh                ; 割り込み管理BIOS
  65. INT_NUM        EQU            00Bh                ; IRQ B (オプションボード)
  66. IRQ_0B_ON    EQU            08h                    ; IRQ B 割り込み許可 (11 ビット)
  67. IRQ_0B_OFF    EQU            0F7h                ; IRQ B 割り込み不許可 (11 ビット)
  68. VSYNC_CLR    EQU            05CAh                ; VSYNC割り込み原因クリアレジスタ
  69. ;
  70. ;
  71. ;********************************************
  72. ;            データ定義
  73. ;********************************************
  74. int_mask_data    label    BYTE                ; 割り込み許可データ
  75.                 db        ?                    ; ビット 31~24        +0
  76.                 db        ?                    ; ビット 23~16        +1
  77.                 db        ?                    ; ビット 15~ 8        +2
  78.                 db        ?                    ; ビット  7~ 0        +3
  79. ;
  80. vsync_offset    dw        ?                    ; 割り込みデータブロック・オフセット
  81. vsync_segment    dw        ?                    ; 割り込みデータブロック・セグメント
  82. ;
  83. vsync_adrs        db        0                    ; 割り込みデータブロック..
  84.                 db        0                    ;
  85.                 dw        VSYNC_handr            ; ハンドラアドレス・オフセット
  86.                 dw        ?                    ; ハンドラアドレス・セグメント
  87. ;
  88. ;
  89. ;********************************************
  90. ;            VSYNCハンドラ
  91. ;********************************************
  92. VSYNC_handr        proc    FAR                    ;
  93.             push    ds                        ;
  94.             push    dx                        ;
  95. ;
  96.             cli                                ;
  97.             mov        dx,VSYNC_CLR            ;
  98.             out        dx,al                    ; ダミーライト (VSYNC割り込み原因クリア)
  99.             sti                                ;
  100. ;
  101.             mov        ax,@data                ; load ds
  102.             mov        ds,ax                    ;
  103.             mov        ax,Vcount                ;
  104.             inc        ax                        ;
  105.             mov        Vcount,ax                ; VSYNCカウンタ・インクリメント
  106. ;
  107.             pop        dx                        ;
  108.             pop        ds                        ;
  109.             lds        di,DWORD ptr cs:vsync_offset
  110.                                             ; 本来のVSYNCハンドラに処理を移す
  111.             jmp        DWORD ptr ds:[di+2]        ; Jump Real Handler
  112. ;
  113.             ret
  114. VSYNC_handr        endp                        ;
  115. ;
  116. ;********************************************
  117. ;            VSYNC割り込みの登録
  118. ;********************************************
  119. VSYNC_init        proc    NEAR                ;
  120.             push    ds                        ;
  121.             push    di                        ;
  122.             push    dx                        ;
  123. ;
  124.             push    cs                        ;
  125.             pop        ds                        ; ds = cs
  126. ;
  127.             mov        ah,01h                    ;
  128.             mov        dl,INT_NUM                ; 割り込み要因コード
  129.             int        INT_INT                    ; 割り込みデータブロックアドレスの取り出し
  130. ;
  131.             mov        cs:vsync_offset,di        ; データブロックアドレス・オフセット
  132.             mov        cs:vsync_segment,ds        ; データブロックアドレス・セグメント
  133. ;
  134.             push    cs                        ;
  135.             pop        ds                        ; ds = cs
  136. ;
  137.             mov        WORD ptr cs:[vsync_adrs+4],cs
  138.                                             ; VSYNC ハンドラのセグメント
  139.             mov        ah,00h                    ;
  140.             mov        dl,INT_NUM                ; 割り込み要因コード
  141.             mov        di,offset cs:vsync_adrs    ;
  142.             int        INT_INT                    ; 割り込みデータブロックアドレスの登録
  143. ;
  144.             mov        ah,03h                    ;
  145.             mov        di,offset cs:int_mask_data    ; 割り込み許可データ
  146.             int        INT_INT                    ; 割り込み管理データの取り出し
  147. ;
  148.             or        BYTE ptr [di+2],IRQ_0B_ON
  149.                                             ; VSYNC 割り込みの許可
  150.             mov        ah,02h                    ;
  151.             int        INT_INT                    ; 割り込み許可データの書き込み
  152. ;
  153.             shr        ax,8                    ; リターンコード
  154. ;
  155.             pop        dx                        ;
  156.             pop        di                        ;
  157.             pop        ds                        ;
  158.             ret                                ;
  159. VSYNC_init        endp                        ;
  160. ;
  161. ;********************************************
  162. ;            VSYNC割り込みの取消
  163. ;********************************************
  164. VSYNC_release    proc    near                ;
  165.             push    ds                        ;
  166.             push    di                        ;
  167.             push    dx                        ;
  168. ;
  169.             push    cs                        ;
  170.             pop        ds                        ; ds = cs
  171. ;
  172.             mov        ah,03h                    ;
  173.             mov        di,offset cs:int_mask_data    ; 割り込み許可データ
  174.             int        INT_INT                    ; 割り込み管理データの取り出し
  175.             and     BYTE ptr [di+2],IRQ_0B_OFF
  176.                                             ; VSYNC 割り込みの禁止
  177.             mov        ah,02h                    ;
  178.             int        INT_INT                    ; 割り込み許可データの書き込み
  179. ;
  180.             mov        ah,00h                    ;
  181.             mov        dl,INT_NUM                ; 割り込み要因コード
  182.             lds        di,DWORD ptr cs:vsync_offset
  183.                                             ; 割り込みデータブロック
  184.             int        INT_INT                    ; 割り込みデータブロックアドレスの登録
  185. ;
  186.             shr        ax,8                    ; リターンコード
  187. ;
  188.             pop        dx                        ;
  189.             pop        di                        ;
  190.             pop        ds                        ;
  191.             ret                                ;
  192. VSYNC_release    endp                        ;
  193. ;
  194. ;
  195.             end
  196.  
  197.