home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 1 / FREEWARE.BIN / dmycon / bios.asm < prev    next >
Assembly Source File  |  1989-10-17  |  7KB  |  478 lines

  1. _TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  2. _TEXT    ENDS
  3. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  4. _DATA    ENDS
  5. CONST    SEGMENT  WORD PUBLIC 'CONST'
  6. CONST    ENDS
  7. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  8. _BSS    ENDS
  9. DGROUP    GROUP    CONST,    _BSS,    _DATA
  10.  
  11.     ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  12.  
  13. extrn   _cflush:NEAR
  14. extrn    _BIOS_91:NEAR
  15. extrn    _ankfont:BYTE
  16. extrn    _CUR_X:WORD
  17. extrn    _CUR_Y:WORD
  18. extrn    _ureg:NEAR
  19.  
  20. GVRAM    equ    0C000h
  21. CVRAM    equ    0C800h
  22. KVRAM    equ    0CA00h
  23.  
  24. _TEXT      SEGMENT
  25. ;*****************************
  26. ;*    割り込みワ-ク
  27. ;*****************************
  28. ds_bak    dw    ?
  29. es_bak    dw    ?
  30. vct_off    dw    ?
  31. vct_seg    dw    ?
  32. old_x    dw    0
  33. old_y    dw    0
  34. ;*****************************
  35. ;*    タイマ割り込みテ-ブル
  36. ;*****************************
  37. tim_no    db    ?
  38. tim_md    db    00h
  39.     db    00h
  40. tim_off    dw    ?
  41. tim_seg    dw    ?
  42.     dw    0
  43.     dw    10        ; 割り込み間隔 (1 = 10ms)
  44. ;*****************************
  45. ;*    タイマ割り込み
  46. ;*****************************
  47. int_ent proc far
  48.     mov    ds,cs:[ds_bak]
  49.     mov    es,cs:[es_bak]
  50.     mov    dx,05C8h
  51.     in    al,dx
  52.     test    al,80h
  53.     jnz    int_go
  54.     mov    ax,[_CUR_X]
  55.     cmp    ax,cs:[old_x]
  56.     jnz    int_go
  57.     mov    ax,[_CUR_Y]
  58.     cmp    ax,cs:[old_y]
  59.     jz    int_rt
  60. int_go:    call    _cflush
  61.     mov    ax,[_CUR_X]
  62.     mov    cs:[old_x],ax
  63.     mov    ax,[_CUR_Y]
  64.     mov    cs:[old_y],ax
  65. int_rt:    ret
  66. int_ent endp
  67. ;******************************
  68. ;*    コンソ-ルBIOS(int 91h)
  69. ;******************************
  70. bios_ent proc far
  71. ;    push    cf    ;+24
  72. ;    push    cs    ;+22
  73. ;    push    ip    ;+20
  74. ;    push    ax    ;+18
  75. ;    push    cx    ;+16
  76. ;    push    dx    ;+14
  77. ;    push    bx    ;+12
  78. ;    push    sp    ;+10
  79. ;    push    bp    ;+8
  80. ;    push    si    ;+6
  81. ;    push    di    ;+4
  82.     db    60h    ; pusha
  83.     push    ds    ;+2
  84.     push    es    ;+0
  85.     mov    si,sp
  86.     mov    di,offset _ureg
  87.     push    ss
  88.     pop    ds
  89.     mov    es,cs:[ds_bak]
  90.     mov    cx,13
  91.     cld
  92.     rep movsw
  93.     mov    ds,cs:[ds_bak]
  94.     mov    es,cs:[es_bak]
  95.     call    _BIOS_91
  96.     mov    di,sp
  97.     mov    si,offset _ureg
  98.     push    ss
  99.     pop    es
  100.     mov    cx,13
  101.     cld
  102.     rep movsw
  103.     pop    es
  104.     pop    ds
  105.     db    61h    ; popa
  106.     iret
  107. bios_ent endp
  108. ;*********************************************
  109. ;*    コンソ-ルBIOSベクタ(int 91h) &
  110. ;*    タイマ割り込みの設定
  111. ;*********************************************
  112.     PUBLIC    _setbios
  113. _setbios PROC NEAR
  114.     push    ds
  115.     push    es
  116.     push    bp
  117.     mov    ax,ds
  118.     mov    cs:[ds_bak],ax
  119.     mov    ax,es
  120.     mov    cs:[es_bak],ax
  121.  
  122.     mov    ax,3591h        ; int 91h
  123.     int    21h
  124.     mov    ax,es
  125.     mov    cs:[vct_seg],ax
  126.     mov    cs:[vct_off],bx
  127.  
  128.     mov    dx,offset bios_ent
  129.     push    cs
  130.     pop    ds
  131.     mov    ax,2591h        ; int 91h
  132.     int    21h
  133.  
  134.     mov    ax,offset int_ent
  135.     mov    cs:[tim_off],ax
  136.     mov    ax,cs
  137.     mov    cs:[tim_seg],ax
  138.  
  139.     mov    di,offset tim_md
  140.     push    cs
  141.     pop    ds
  142.     mov    ah,00h
  143.     int    97h
  144.     mov    cs:[tim_no],al
  145.  
  146.     pop    bp
  147.     pop    es
  148.     pop    ds
  149.     ret    
  150. _setbios ENDP
  151. ;***************************************
  152. ;*    ベクタ及び割り込みの解除 & 終了
  153. ;***************************************
  154.     PUBLIC    _resetbios
  155. _resetbios PROC NEAR
  156.     push    ds
  157.     push    es
  158.  
  159.     mov    ax,cs:[vct_seg]
  160.     mov    ds,ax
  161.     mov    dx,cs:[vct_off]
  162.     mov    ax,2591h
  163.     int    21h
  164.  
  165.     mov    al,cs:[tim_no]
  166.     mov    ah,01h
  167.     int    97h
  168.  
  169.     mov    ah,4ch
  170.     mov    al,00h
  171.     int    21h
  172.  
  173.     pop    es
  174.     pop    ds
  175.     ret    
  176. _resetbios ENDP
  177.  
  178.     PUBLIC    _colset
  179. _colset    proc    near
  180.     push    bp
  181.     mov    bp,sp
  182.     push    es
  183.     push    di
  184.  
  185.     cld
  186.     mov    ax,CVRAM
  187.     mov    es,ax
  188.     mov    di,[bp+4]
  189.     sub    al,al
  190.     mov    ah,[bp+6]
  191.     mov    cx,[bp+8]
  192.     shr    cx,1
  193.     jcxz    colst1
  194.     rep    stosw
  195.  
  196. colst1:    pop    di
  197.     pop    es
  198.     pop    bp
  199.     ret
  200. _colset    endp
  201.  
  202.     PUBLIC    _vramcpy
  203. _vramcpy proc    near
  204.     push    bp
  205.     mov    bp,sp
  206.     push    ds
  207.     push    es
  208.     push    di
  209.     push    si
  210.  
  211.     cld
  212.     mov    ax,CVRAM
  213.     mov    ds,ax
  214.     mov    es,ax
  215.     mov    di,[bp+4]
  216.     mov    si,[bp+6]
  217.     mov    cx,[bp+8]
  218.     shr    cx,1
  219.     jcxz    vfcp1
  220.     rep    movsw
  221.  
  222.     mov    ax,KVRAM
  223.     mov    ds,ax
  224.     mov    es,ax
  225.     mov    di,[bp+4]
  226.     mov    si,[bp+6]
  227.     mov    cx,[bp+8]
  228.     shr    cx,1
  229.     rep    movsw
  230.  
  231. vfcp1:    pop    si
  232.     pop    di
  233.     pop    es
  234.     pop    ds
  235.     pop    bp
  236.     ret
  237. _vramcpy endp
  238.  
  239.     PUBLIC    _vramrcpy
  240. _vramrcpy proc    near
  241.     push    bp
  242.     mov    bp,sp
  243.     push    ds
  244.     push    es
  245.     push    di
  246.     push    si
  247.  
  248.     std
  249.     mov    ax,CVRAM
  250.     mov    ds,ax
  251.     mov    es,ax
  252.     mov    di,[bp+4]
  253.     mov    si,[bp+6]
  254.     mov    cx,[bp+8]
  255.     shr    cx,1
  256.     jcxz    vrcp1
  257.     rep    movsw
  258.  
  259.     mov    ax,KVRAM
  260.     mov    ds,ax
  261.     mov    es,ax
  262.     mov    di,[bp+4]
  263.     mov    si,[bp+6]
  264.     mov    cx,[bp+8]
  265.     shr    cx,1
  266.     rep    movsw
  267.  
  268. vrcp1:    pop    si
  269.     pop    di
  270.     pop    es
  271.     pop    ds
  272.     pop    bp
  273.     ret
  274. _vramrcpy endp
  275.  
  276.     PUBLIC    _Wrt_Ank
  277. _Wrt_Ank proc    near
  278.     push    bp
  279.     mov    bp,sp
  280.     push    es
  281.     push    si
  282.     push    di
  283.  
  284.     mov    al,[bp+4]    ;ch
  285.     sub    ah,ah
  286.     mov    cl,4
  287.     shl    ax,cl
  288.     add    ax,OFFSET _ankfont
  289.     mov    si,ax
  290.  
  291.     mov    ax,1280
  292.     imul    WORD PTR [bp+8]    ;y
  293.     add    ax,[bp+6]    ;x
  294.     mov    di,ax
  295.  
  296.     mov    bx,[bp+10]    ;cl
  297.     and    bx,7
  298.  
  299.     test    BYTE PTR [bp+10],32    ;cl
  300.     je    $I147
  301.     or    bl,8            ;at
  302. $I147:
  303.     test    BYTE PTR [bp+10],24    ;cl
  304.     je    $I148
  305.     mov    bh,0FFh            ;bk
  306. $I148:
  307.     mov    al,0Fh
  308.     mov    dx,0FF81h
  309.     out    dx,al
  310.  
  311.     mov    ax,GVRAM
  312.     mov    es,ax
  313.     mov    cx,16
  314.     push    di
  315.     sub    al,al
  316. $F151:    mov    es:[di],al
  317.     add    di,80
  318.     loop    $F151
  319.     pop    di
  320.  
  321.     mov    al,bl
  322.     out    dx,al
  323.     mov    cx,16
  324.     cld
  325. $F155:    lodsb
  326.     xor    al,bh
  327.     mov    es:[di],al
  328.     add    di,80
  329.     loop    $F155
  330.  
  331.     pop    di
  332.     pop    si
  333.     pop    es
  334.     pop    bp
  335.     ret    
  336. _Wrt_Ank    ENDP
  337.  
  338.     PUBLIC    _Wrt_Kan
  339. _Wrt_Kan PROC NEAR
  340.     push    bp
  341.     mov    bp,sp
  342.     push    es
  343.     push    si
  344.     push    di
  345.  
  346.     mov    ax,1280
  347.     imul    WORD PTR [bp+8]    ;y
  348.     add    ax,[bp+6]    ;x
  349.     mov    di,ax
  350.  
  351.     mov    dx,0FF94h
  352.     mov    al,[bp+5]    ;ch
  353.     out    dx,al
  354.     inc    dx
  355.     mov    al,[bp+4]    ;ch
  356.     out    dx,al
  357.  
  358.     mov    bx,[bp+10]    ;cl
  359.     and    bx,7
  360.  
  361.     test    BYTE PTR [bp+10],32    ;cl
  362.     je    $I247
  363.     or    bl,8            ;at
  364. $I247:
  365.     test    BYTE PTR [bp+10],24    ;cl
  366.     je    $I248
  367.     mov    bh,0FFh            ;bk
  368. $I248:
  369.     mov    al,0Fh
  370.     mov    dx,0FF81h
  371.     out    dx,al
  372.  
  373.     mov    ax,GVRAM
  374.     mov    es,ax
  375.     mov    cx,16
  376.     push    di
  377.     sub    al,al
  378. $F251:    mov    es:[di],al
  379.     mov    es:[di+1],al
  380.     add    di,80
  381.     loop    $F251
  382.     pop    di
  383.  
  384.     mov    al,bl
  385.     out    dx,al
  386.     mov    cx,16
  387. $F277:    mov    dx,0FF96h
  388.     in    al,dx
  389.     xor    al,bh
  390.     mov    es:[di],al
  391.  
  392.     inc    dx
  393.     in    al,dx
  394.     xor    al,bh
  395.     mov    es:[di+1],al
  396.  
  397.     add    di,80
  398.     loop    $F277
  399.  
  400.     pop    di
  401.     pop    si
  402.     pop    es
  403.     pop    bp
  404.     ret    
  405. _Wrt_Kan ENDP
  406.  
  407.     PUBLIC    _locate
  408. _locate proc    near
  409.     push    bp
  410.     mov    bp,sp
  411.     push    es
  412.     push    di
  413.  
  414.     mov    ax,80*16
  415.     imul    WORD PTR [bp+6]    ;y
  416.     add    ax,[bp+4]    ;x
  417.     add    ax,80*14
  418.     mov    di,ax
  419.  
  420.     mov    al,0Fh
  421.     mov    dx,0FF81h
  422.     out    dx,al
  423.  
  424.     mov    ax,GVRAM
  425.     mov    es,ax
  426.     mov    cx,2
  427.     mov    al,0FFh
  428. loca1:    mov    es:[di],al
  429.     add    di,80
  430.     loop    loca1
  431.  
  432.     pop    di
  433.     pop    es
  434.     pop    bp
  435.     ret    
  436. _locate    ENDP
  437.  
  438.     PUBLIC    _sjisto
  439. _sjisto proc    near
  440.     push    bp
  441.     mov    bp,sp
  442.     mov    ax,[bp+4]
  443.     cmp    ah,9fh
  444.     jbe    sjto1
  445.     sub    ah,0B1h-071h
  446. sjto1:  sub    ah,071h
  447.     shl    ah,1
  448.     inc    ah
  449.     cmp    al,7fh
  450.     jbe    sjto2
  451.     dec    al
  452. sjto2:    cmp    al,9eh
  453.     jb    sjto3
  454.     sub    al,7dh
  455.     inc    ah
  456.     jmp    sjto4
  457. sjto3:    sub    al,1fh
  458. sjto4:    pop    bp
  459.     ret
  460. _sjisto    ENDP
  461.  
  462.     PUBLIC    _Beep
  463. _Beep    proc    near
  464.     push    dx
  465.     push    cx
  466.     mov    dx,0FF98h
  467.     in    al,dx
  468.     mov    cx,5000        ; x 10us
  469.     int    0FDh
  470.     out    dx,al
  471.     pop    cx
  472.     pop    dx
  473.     ret
  474. _Beep    ENDP
  475.  
  476. _TEXT    ENDS
  477. END
  478.