home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / kxc / t_os / townsexp / p25xlf10 / p25xlf10.asm < prev    next >
Assembly Source File  |  1980-01-02  |  9KB  |  423 lines

  1. ;*************************************************************************
  2. ;    P25ファイル32K色 変換Loader ver0.6M
  3. ;             ・マウス対応版・
  4. ;        制作年月日 平成2年 4月 04日
  5. ;    Programed by KXC U・K UOTA
  6. ;
  7. ;    ○対応機種:        FM-TOWNSシリーズ
  8. ;    ○ソースファイル名:    P25XLF10.ASM
  9. ;    ○実行ファイル名:    P25XLF10.EXP
  10. ;    ○実行方法:        T-Menu等,TBIOSを組み込んだ
  11. ;                DOS上から,
  12. ;                RUN386 P25XLF10 オプション
  13. ;                で,P25,256色ファイルを32K色に変換
  14. ;                しながら,順次画面ロードする。
  15. ;                マウス右クリックで次画面,左クリックで
  16. ;                終了し,T-Menuへ。
  17. ;    オプション:        -0から-99    ファイルナンバー
  18. ;                -G        マウスクリックを無視して
  19. ;                        ロード実行
  20. ;                -Q        1画面のみ表示して終了
  21. ;*************************************************************************
  22.  
  23.     .386p
  24.  
  25. msdos    macro    func        ;(MS-DOSファンクションコールマクロ定義)
  26.     mov    ah,func
  27.     int    21H
  28.     endm
  29.  
  30. XMAX        equ    320
  31. YMAX        equ    240
  32. YLWidth        equ    64
  33. mo_port        equ    04d6h        ;パッド/マウス入力ポート1
  34. mi_port1    equ    04d0h        ;パッド/マウス入力ポート1
  35. mi_port2    equ    04d2h        ;パッド/マウス入力ポート2
  36. fn_ptr        equ    80h        ;コマンドライン入力パラメータアドレス
  37. PSP_seg        equ    004h        ;PSP領域のセグメント
  38.  
  39.  
  40.  
  41.     assume cs:CODE,ds:CODE,gs:CODE,es:CODE,ss:SSEG
  42. ;
  43. CODE    segment
  44.  
  45.  
  46. PRG_SRT:
  47.     mov    dx,OFFSET NEW_DTA    ;DTA Set
  48.     msdos    1ah
  49.     ;
  50.     mov    edi,OFFSET File_Name
  51.     mov    esi,OFFSET P25_PATH
  52.     push    ds
  53.     mov    ax,PSP_seg
  54.     mov    ds,ax
  55.     mov    eax,OFFSET fn_ptr
  56.     movzx    ebx,BYTE PTR [eax]
  57.     or    bl,bl
  58.     je    SHORT PRGlab01
  59.     movzx    ecx,bl
  60.     add    ebx,eax
  61.     mov    ebx,OFFSET fn_ptr+1
  62.     xor    eax,eax
  63.     xor    dh,dh
  64.     xor    ebp,ebp
  65. ;
  66. PRGlab09:
  67.     cmp    BYTE PTR [ebx],'-'
  68.     jne    SHORT PRGlab08
  69. PRGlab06:
  70.     dec    ecx
  71.     inc    ebx
  72.     mov    dl,BYTE PTR [ebx]
  73.     cmp    dl,'9'
  74.     jbe    PRGlab10
  75.     cmp    dl,'Z'
  76.     jbe    PRGlab11
  77.     sub    dl,'a'-'A'
  78. PRGlab11:
  79.     cmp    dl,'G'
  80.     jne    SHORT PRGlab12
  81.     or    bp,00000001b
  82.     jmp    SHORT PRGlab06
  83. PRGlab12:
  84.     cmp    dl,'Q'
  85.     jne    SHORT PRGlab06
  86.     or    bp,00000010b
  87.     jmp    SHORT PRGlab06
  88. PRGlab10:
  89.     cmp    dl,' '
  90.     je    SHORT PRGlab07
  91.     sub    dl,'0'
  92.     sal    eax,8
  93.     mov    al,dl
  94.     jmp    SHORT PRGlab06
  95. PRGlab07:
  96.     dec    ecx
  97.     inc    ebx
  98.     aad                    ;al=ah*10+al
  99.     mov    dh,al
  100.     jmp    SHORT PRGlab09
  101. PRGlab08:
  102.     or    dh,dh            ;? dh=0
  103.     je    PRGlab02
  104.     dec    dh            ;dh-=1    (nannbannme wo kaunnto nisuru)
  105. ;
  106. PRGlab02:
  107.     mov    al,[ebx]
  108.     cmp    al,'\'            ;? al='\'
  109.     jne    SHORT PRGlab03
  110.     mov    ah,al
  111. PRGlab03:
  112.     inc    ebx
  113.     mov    es:[edi],al
  114.     inc    edi
  115.     mov    es:[esi],al
  116.     inc    esi
  117.     loop    PRGlab02
  118.     ;
  119. PRGlab01:
  120.     pop    ds
  121.     mov    BYTE PTR [File_Number],dh
  122.     mov    edx,ebp
  123.     mov    BYTE PTR [Control_Code],dl
  124.     or    ah,ah
  125.     je    SHORT PRGlab04
  126.     cmp    al,'\'            ;? al='\'
  127.     je    SHORT PRGlab04
  128.     mov    al,'\'            ;al='\'
  129.     mov    [edi],al
  130.     inc    edi
  131.     mov    [esi],al
  132.     inc    esi
  133. PRGlab04:
  134.     mov    [FNadr],edi
  135.     mov    edi,OFFSET P25_Fil
  136. PRGlab05:
  137.     mov    al,[edi]
  138.     inc    edi
  139.     mov    [esi],al
  140.     inc    esi    
  141.     or    al,al
  142.     jne    SHORT PRGlab05
  143. ;
  144. ;-=================================================================-
  145. ;-    32K色モード画面設定(SCREEN@1)           -
  146. ;-=================================================================-
  147.     mov    ax,110h
  148.     mov    es,ax            ;es=110H
  149.     ;        画面の初期化
  150.     xor    ah,ah            ;ah=0
  151.     mov    edi,OFFSET work
  152.     mov    ecx,1000h
  153.     call    pword ptr es:[20h]    ;EGB_init(work,0x1000)
  154.     ;        仮想画面設定    ページ0をモード10
  155.     mov    ax,100h            ;ah=1 , al=0
  156.     mov    dx,10
  157.     mov    edi,OFFSET work
  158.     call    pword ptr es:[20h]    ;EGB_resolution(work,0,10)
  159.     ;        仮想画面設定    ページ0をモード10
  160.     mov    ax,101h            ;ah=1 , al=1
  161.     mov    dx,10
  162.     mov    edi,OFFSET work
  163.     call    pword ptr es:[20h]    ;EGB_resolution(work,1,10)
  164.     ;        表示ページ指定    ページ0を前面にして表示    
  165.     mov    ax,600h            ;ah=6 , al=1
  166.     mov    edx,1
  167.     call    pword ptr es:[20h]    ;EGB_displayPage(work,1,1)
  168.     ;        書き込みページ指定    ページ0
  169.     mov    ax,500h            ;ah=5 , al=0
  170.     call    pword ptr es:[20h]    ;EGB_wrihtPage(work,0)
  171.     ;        画面拡大    2×2倍
  172.     mov    ax,202h            ;ah=2 , al=2
  173.     mov    dx,2
  174.     mov    bx,2
  175.     call    pword ptr es:[20h]    ;EGB_displayStart(work,2,2,2)
  176.     ;        表示画面大きさ    X=320 , Y=240
  177.     mov    ax,203h
  178.     mov    dx,XMAX
  179.     mov    bx,YMAX
  180.     call    pword ptr es:[20h]    ;EGB_displayStart(work,3,XMAX,YMAX)
  181.     ;
  182. ;-=================================================================-
  183. ;-    メインルーチン    (P25ファイルチェック)           -
  184. ;-=================================================================-
  185. FN_chck:
  186.     mov    dx,OFFSET P25_PATH
  187.     mov    cx,03h
  188.     mov    al,[lpcnt]
  189.     and    al,al
  190.     jne    SHORT FNlab01
  191.     mov    al,1
  192.     mov    [lpcnt],al
  193.     msdos    4eh
  194.     jb    PRG_END
  195.     jmp    SHORT FNlab02
  196. FNlab01:    
  197.     msdos    4fh
  198.     jb    SHORT PRG_END
  199. FNlab02:
  200.     mov    al,BYTE PTR[File_Number]
  201.     or    al,al
  202.     je    FNlab04
  203.     dec    BYTE PTR[File_Number]
  204.     jmp    SHORT FN_chck
  205. FNlab04:
  206.     mov    edx,OFFSET NEW_DTA+01EH
  207.     mov    ebx,[FNadr]
  208. FNlab03:
  209.     mov    al,[edx]
  210.     inc    edx
  211.     mov    [ebx],al
  212.     inc    ebx
  213.     or    al,al
  214.     jne    SHORT FNlab03
  215.     ;
  216.     mov    dx,OFFSET File_Name
  217.     mov    al,0
  218.     msdos    3DH            ;ax=fopen(P25_File,"rb")
  219.     jnb    SHORT FNLB01        ;? Open Error
  220. FN_Err:
  221.     mov    dx,OFFSET MES01        ;Output Error Message
  222.     msdos    09H            ;(※TOWNS-Menu上では無意味)
  223. PRG_End:
  224.     msdos    4ch            ;プログラム終了
  225.  
  226. ;-=================================================================-
  227. ;    データイニシャライズ
  228. ;-=================================================================-
  229. FNLB01:
  230.     mov    bx,104h
  231.     mov    es,bx            ;es=ds
  232.  
  233.     mov    [fp],ax    ;ax=fp (ハンドル)
  234.     mov    ecx,24
  235.     mov    edx,OFFSET work
  236.     mov    bx,[fp]                ;bx=fp
  237.     msdos    3FH                ;read(fp,ldt,24)
  238.     ;
  239.     mov    bx,[fp]
  240.     mov    ecx,256*2*3+4+2*2
  241.     mov    edx,OFFSET work
  242.     msdos    3FH
  243.     ;
  244.     mov    edi,OFFSET work
  245.     xor    esi,esi
  246.     mov    ecx,256
  247. lbloop:
  248.     mov    ax,[edi]
  249.     inc    edi
  250.     inc    edi
  251.     mov    BYTE PTR [drd+esi],ah
  252.     mov    ax,[edi]
  253.     inc    edi
  254.     inc    edi
  255.     mov    BYTE PTR [dgr+esi],ah
  256.     mov    ax,[edi]
  257.     inc    edi
  258.     inc    edi
  259.     mov    BYTE PTR [dbl+esi],ah
  260.     inc    esi
  261.     loop    lbloop
  262.     ;
  263.     xor    ebp,ebp
  264.     mov    al,1
  265.     mov    [r_count],al
  266.     mov    al,240
  267.     mov    [y_count],al
  268. ;
  269. y_loop:
  270.     dec    BYTE PTR [r_count]
  271.     jne    y_lab01
  272.     ;
  273.     mov    al,40
  274.     mov    [r_count],al
  275.     mov    bx,[fp]
  276.     mov    ecx,640*40*2
  277.     mov    edx,OFFSET buf
  278.     push    ebp
  279.     msdos    3FH
  280.     pop    ebp
  281.     ;
  282.     mov    esi,OFFSET buf
  283. y_lab01:
  284.     mov    eax,320
  285.     mov    [x_count],eax
  286.     xor    ebx,ebx
  287. x_loop:
  288.     mov    cx,WORD PTR [esi]        ;緑
  289.     mov    dx,WORD PTR [640+esi]
  290.     add    esi,2
  291.     xor    ebx,ebx
  292.     xor    eax,eax
  293.     mov    bl,cl
  294.     mov    al,BYTE PTR [dgr+ebx]
  295.     mov    edi,eax
  296.     mov    bl,ch
  297.     mov    al,BYTE PTR [dgr+ebx]
  298.     add    edi,eax
  299.     mov    bl,dl
  300.     mov    al,BYTE PTR [dgr+ebx]
  301.     add    edi,eax
  302.     mov    bl,dh
  303.     mov    al,BYTE PTR [dgr+ebx]
  304.     add    eax,edi
  305.     sar    eax,5
  306.     sal    eax,10
  307.     mov    [green],eax
  308.     ;
  309.     xor    eax,eax
  310.     mov    bl,cl
  311.     mov    al,BYTE PTR [drd+ebx]
  312.     mov    edi,eax
  313.     mov    bl,ch
  314.     mov    al,BYTE PTR [drd+ebx]
  315.     add    di,ax
  316.     mov    bl,dl
  317.     mov    al,BYTE PTR [drd+ebx]
  318.     add    edi,eax
  319.     mov    bl,dh
  320.     mov    al,BYTE PTR [drd+ebx]
  321.     add    eax,edi
  322.     and    eax,01111111111100000b
  323.     mov    [red],eax
  324.     ;
  325.     xor    eax,eax
  326.     mov    bl,cl
  327.     mov    al,BYTE PTR [dbl+ebx]
  328.     mov    edi,eax
  329.     mov    bl,ch
  330.     mov    al,BYTE PTR [dbl+ebx]
  331.     add    edi,eax
  332.     mov    bl,dl
  333.     mov    al,BYTE PTR [dbl+ebx]
  334.     add    edi,eax
  335.     mov    bl,dh
  336.     mov    al,BYTE PTR [dbl+ebx]
  337.     add    eax,edi
  338.     sar    eax,5
  339.     add    eax,[green]
  340.     add    eax,[red]
  341.     mov    es:[ebp],ax
  342.     add    ebp,2
  343.     dec    DWORD PTR [x_count]
  344.     jne    x_loop
  345.     ;
  346.     add    esi,640
  347.     add    ebp,1024-320*2
  348.     dec    BYTE PTR [y_count]
  349.     jne    y_loop
  350.     ;
  351. labed:
  352.     mov    bx,[fp]            ;fp (ハンドル)
  353.     msdos    3EH            ;close(fp)    (File Close)
  354.  
  355.     mov    al,BYTE PTR[Control_Code]
  356.     test    al,00000001b
  357.     jne    SHORT mlab02
  358. ;
  359. ;    マウストリガ入力
  360. ;
  361. mloop:
  362.     mov    dx,mo_port        ;(両ポート及び全トリガ入力OK)
  363.     mov    ax,00111111b
  364.     out    dx,al
  365.     mov    dx,mi_port1        ;(ポート1入力)
  366.     in    al,dx
  367.     mov    bl,al
  368.     and    al,00100000b        ;(トリガ2が押されたか)
  369.     je    SHORT mlab02
  370.     and    bl,00010000b        ;(トリガ1が押されたか)
  371.     je    SHORT mlab01
  372.     mov    dx,mi_port2
  373.     in    al,dx
  374.     mov    bl,al
  375.     and    al,00100000b        ;(トリガ2が押されたか)
  376.     je    SHORT mlab02
  377.     and    bl,00010000b        ;(トリガ1が押されたか)
  378.     jne    SHORT mloop        ;(トリガが押されるまでループ)
  379. mlab01:
  380.     msdos    4ch            ;(プログラム終了)
  381. mlab02:
  382.     mov    al,BYTE PTR[Control_Code]
  383.     test    al,00000010b
  384.     jne    SHORT mlab01
  385.     ;
  386.     jmp    FN_chck
  387.  
  388.  
  389.  
  390. mes01        db     'ファイルオープン出来ませんよ。$'
  391. File_Name    db    64 dup(?)
  392. FNadr        dd    0
  393. NEW_DTA        db    100h dup(?)        ;新規のDTA領域
  394. P25_Fil        db    '*.P25',0
  395. P25_PATH    db    64 dup(?)        ;入力されたパス
  396. fp        dw    0            ;ファイルハンドル
  397. File_Number    db    0
  398. Control_Code    db    0
  399. lpcnt        db    0
  400. steax        dd    0
  401. stebx        dd    0
  402. stecx        dd    0
  403. stedx        dd    0
  404. grad        dd    0
  405. x_count        dd    0
  406. y_count        db    0
  407. r_count        db    0
  408. green        dd    0
  409. red        dd    0
  410. buf        dw    320*40*2 dup(?)
  411. dgr        db    256 dup(?)
  412. drd        db    256 dup(?)
  413. dbl        db    256 dup(?)
  414. work        db    1000h dup(?)
  415. P25BEnd        db    0
  416.  
  417. code    ends
  418.  
  419. sseg    segment stack
  420.     db 1000H dup(?)
  421. sseg    ends
  422.     end    PRG_SRT
  423.