home *** CD-ROM | disk | FTP | other *** search
/ Der Mediaplex Sampler - Die 6 von Plex / 6_v_plex.zip / 6_v_plex / DISK2 / MULTI_04 / I2R.ZIP / IFF2RAW.ASM next >
Assembly Source File  |  1991-10-06  |  11KB  |  494 lines

  1. ;======================================================================
  2. ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  3. ;======================================================================
  4. ; IFF to RAW converter
  5. ; programmed by Darius Zendeh
  6. ; an XACT-Software Production
  7. ; 26.07.1990
  8. ;======================================================================
  9. ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  10. ;======================================================================
  11. CGROUP        GROUP CODE_SEG, DATA_SEG
  12.  
  13.         ASSUME CS:CGROUP, DS:CGROUP
  14.  
  15. CODE_SEG    SEGMENT PUBLIC
  16.         ORG    100h
  17. ;======================================================================
  18. ILBMTORAW    PROC    NEAR
  19.  
  20. START:        call    GETNAME
  21.         call    CHECKFILE
  22.         cmp    ax,00
  23.         jnz    START
  24.         call    OPENCOL
  25.         call    READCOL
  26.  
  27. CONTBODY:    call    READBODY
  28.         cmp    SCREEN,0fa00h
  29.         jb    CONTBODY
  30.         call    SAVEGRAF
  31.  
  32.         call    RESVID
  33.         call    CLOSEHANDLE
  34.  
  35. LEND:        mov    ax,4c00h
  36.         int    21h
  37. ILBMTORAW    ENDP
  38. ;======================================================================
  39. ;======================================================================
  40. GETNAME        PROC NEAR
  41.  
  42.         call    BUILDSCREEN
  43.  
  44.         mov    ah,0ch        ;lösche Eingabepuffer
  45.         mov    al,0ah        ;dann String einlesen
  46.         lea    dx,LBMNAM    ;Sourcenamebuffer
  47.         mov    bx,dx
  48.         mov    cl,09h
  49.         mov    es:[bx],cl    ;maximal 8 Zeichen
  50.         int    21h
  51.  
  52.         mov    cl,es:[bx+1]    ;hole Länge
  53.         cmp    cl,00h
  54.         jz    NONAME
  55.  
  56.         add    bx,02h        ;filename.LBM
  57.         xor    ch,ch
  58.         add    bx,cx
  59.         mov    cl,46        ;.
  60.         mov    es:[bx],cl
  61.         mov    cl,76        ;L
  62.         mov    es:[bx+1],cl
  63.         mov    cl,66        ;B
  64.         mov    es:[bx+2],cl
  65.         mov    cl,77        ;M
  66.         mov    es:[bx+3],cl
  67.         mov    es:[bx+4],ch    ;13 (RETURN) durch 00 ersetzen
  68.         ret
  69.  
  70. NONAME:        lea    bp,NIEI        ;Zeiger auf Text
  71.         call    WRSTRING
  72.         jmp    GETNAME
  73.  
  74. GETNAME        ENDP
  75. ;======================================================================
  76. BUILDSCREEN    PROC NEAR
  77.  
  78.         mov    ah,0fh        ;Videomodus lesen
  79.         int    10h
  80.         mov    BSEITE,bh    ;Bildschirmseite speichern
  81.         mov    VMODE,al
  82.         xor    ah,ah        ;Clear Screen!
  83.         int    10h        
  84.  
  85.         mov    cx,2eh        ;Textlänge
  86.         mov    dh,05h        ;Zeile
  87.         mov    dl,11h        ;Spalte
  88.         mov    bl,00011111b    ;weiß auf dunkelblau
  89.         mov    bh,BSEITE
  90.         lea    bp,BIAU        ;Zeiger auf Windowanfang
  91.  
  92. CNTBAU:        mov    al,255
  93.         cmp    es:[bp],al    ;Ende des Text-Windows?
  94.         je    BOFF
  95.  
  96.         mov    ah,13h        ;String ausgeben
  97.         mov    al,01h
  98.         int    10h
  99.  
  100.         add    bp,2eh        ;nächste Zeile
  101.         add    dh,01h        ;   -- // --
  102.         jmp    CNTBAU
  103.                 
  104. BOFF:        mov    ah,02h        ;setze Cursorposition (Reg. bh von oben!)
  105.         mov    dh,0ch        ;Zeile 12
  106.         mov    dl,24h        ;Spalte 36
  107.         int    10h
  108.  
  109.         mov    ah,01        ;Cursorgröße
  110.         mov    ch,0        ;start
  111.         mov    cl,0fh        ;end
  112.         int    10h
  113.         ret
  114.  
  115. BUILDSCREEN    ENDP
  116. ;======================================================================
  117. GETKEY        PROC NEAR
  118.  
  119.         mov    ah,0ch
  120.         mov    al,01h
  121.         int    21h        ;Warten auf Tastendruck
  122.         ret
  123.  
  124. GETKEY        ENDP
  125. ;======================================================================
  126. CHECKFILE    PROC NEAR
  127.  
  128.         clc
  129.         mov    ah,3dh        ;Datei1 .LBM öffnen (Handle)
  130.         mov    al,80h        ;nur lesen
  131.         lea    dx,LBMNAM+2    ;Zeiger auf Dateiname
  132.         int    21h
  133.         jc    CHERROR
  134.  
  135.         mov    HANDLE1,ax    ;and store handle
  136.         xor    ax,ax
  137.         ret
  138.  
  139. CHERROR:    lea    bp,OPENERR    ;Error ausgeben
  140.         mov    bx,2eh
  141.         mul    bx
  142.         add    bp,ax
  143.         call    WRSTRING
  144.         ret
  145.  
  146. CHECKFILE    ENDP
  147. ;======================================================================
  148. WRSTRING    PROC NEAR
  149.  
  150.         mov    ah,13h        ;Zeichenkette ausgeben
  151.         mov    al,01h        ;Cursorpos. aktualisieren
  152.         mov    cx,2ch        ;26 Zeichen
  153.         mov    dh,0eh        ;Zeile
  154.         mov    dl,12h        ;Spalte
  155.         mov    bl,10011100b    ;ROT blinkend!
  156.         mov    bh,BSEITE    ;Bildschirmseite holen
  157.         int    10h
  158.         call    GETKEY
  159.         ret
  160.  
  161. WRSTRING    ENDP
  162. ;======================================================================
  163. OPENCOL        PROC NEAR
  164.  
  165.         lea    bx,LBMNAM+2
  166.         mov    dx,bx        ;Zeiger auf Dateiname
  167.         mov    cl,es:[bx-1]    ;Filename.COL
  168.         xor    ch,ch
  169.         add    bx,cx
  170.         mov    cl,67        ;C
  171.         mov    es:[bx+1],cl
  172.         mov    cl,79        ;O
  173.         mov    es:[bx+2],cl
  174.         mov    cl,76        ;L
  175.         mov    es:[bx+3],cl
  176.  
  177.         mov    ah,3ch        ;Datei erstellen (Handle)
  178.         mov    cx,00h        ;nur lesen!!??
  179.         int    21h        ;INTERRUPT!
  180.  
  181.         jc    CHERROR2
  182.         lea    bx,HANDLE2    ;get handle-adress
  183.         mov    es:[bx],ax    ;and store handle
  184.         xor    ax,ax
  185.         ret
  186.  
  187. CHERROR2:    lea    bp,INITERR    ;Error ausgeben
  188.         mov    bx,2eh
  189.         sub    ax,02h
  190.         mul    bx
  191.         add    bp,ax
  192.         call    WRSTRING
  193.         ret
  194.  
  195. OPENCOL        ENDP
  196. ;======================================================================
  197. CLOSEHANDLE    PROC NEAR
  198.  
  199.         mov    cx,03h
  200.         lea    dx,HANDLE1
  201. DOCLOSE:    mov    bx,dx
  202.         mov    bx,es:[bx]
  203.         cmp    bx,00h
  204.         jz    NOHAND
  205.  
  206.         mov    ah,3eh        ;doit
  207.         int    21h
  208.  
  209. NOHAND:        add    dx,02h        ;next Handle
  210.         loop    DOCLOSE
  211.         ret
  212.  
  213. CLOSEHANDLE    ENDP
  214. ;======================================================================
  215. READCOL        PROC NEAR
  216.  
  217.         mov    ah,3fh        ;read header
  218.         mov    bx,HANDLE1    ;until CMAP
  219.         mov    cx,30h
  220.         lea    dx,PUFFER
  221.         int    21h
  222.  
  223.         mov    ah,3fh        ;read colors
  224.         mov    cx,300h        ;255*3
  225.         int    21h
  226.  
  227.         mov    cx,300h        ;transfer 8BIT colorvalue
  228. TRANSFCOL:    lea    bx,puffer    ;into 6BIT
  229.         add    bx,cx
  230.         mov    ah,es:[bx]
  231.         shr    ah,1
  232.         shr    ah,1
  233.         mov    es:[bx],ah    ;store back
  234.         loop    TRANSFCOL
  235.  
  236.         mov    ah,40h        ;write colors on file.COL
  237.         mov    bx,HANDLE2
  238.         mov    cx,300h
  239.         int    21h
  240.  
  241.         cli
  242.         xor    ah,ah        ;set videomode : 320x200/256
  243.         mov    al,13h
  244.         int    10h
  245.         call    COPYCOL        ;and burst 256 colors into colegs
  246.         sti
  247.  
  248. REHEAD:        mov    ah,3fh        ;read 4 BYTES
  249.         mov    bx,HANDLE1
  250.         mov    cx,04h
  251.         lea    dx,PUFFER
  252.         int    21h
  253.  
  254.         lea    bx,PUFFER    ;and test checksum (B+O+D+Y)
  255.         xor    ah,ah
  256.         mov    cx,04h
  257. ICHKSUM:    mov    al,es:[bx]
  258.         add    ah,al
  259.         add    bx,01h
  260.         loop    ICHKSUM
  261.         cmp    ah,2eh
  262.         jne    REHEAD        ;until BODY found
  263.  
  264.         mov    ah,3fh        ;read remaining length of datas
  265.         mov    bx,HANDLE1
  266.         mov    cx,04h
  267.         lea    dx,GLEN
  268.         int    21h
  269.         ret
  270.  
  271. READCOL        ENDP
  272. ;======================================================================
  273. COPYCOL        PROC    NEAR
  274.  
  275.         call    VBLANC        ;wait until vertical blanking
  276.  
  277.         lea    bx,PUFFER
  278.         xor    cx,cx        ;cl=start first color and counter
  279.         mov    dx,03c8h    ;dx=03c8 write pel address reg.
  280.         mov    al,cl        ;locate address
  281.         out    dx,al        ;write the following datas
  282.         inc    dx        ;dx=03c9 : pel data reg.
  283. COLLOOP:    mov    al,es:[bx]    ;R
  284.         out    dx,al
  285.         mov    al,es:[bx+1]    ;G
  286.         out    dx,al
  287.         mov    al,es:[bx+2]    ;B
  288.         out    dx,al
  289.         add    bx,03h
  290.         inc    cl
  291.         jnz    COLLOOP
  292.         ret
  293.  
  294. COPYCOL        ENDP
  295. ;======================================================================
  296. VBLANC        PROC    NEAR
  297.  
  298.         mov    dx,3dah        ;input status reg. #1
  299. VE1:        in    al,dx        ;get data
  300.         test    al,8        ;vert. retrace ?
  301.         je    VE1
  302.         ret
  303.  
  304. VBLANC        ENDP
  305. ;======================================================================
  306. RESVID        PROC NEAR
  307.  
  308.         call    GETKEY        ;auf Taste warten
  309.  
  310.         xor    ah,ah        ;auf Originalzustand
  311.         mov    al,VMODE    ;zurückschalten
  312.         mov    bh,BSEITE
  313.         int    10h
  314.         ret
  315.  
  316. RESVID        ENDP
  317. ;======================================================================
  318. READBODY    PROC NEAR
  319.  
  320.         lea    dx,GPUFF    ;init adress
  321.         mov    GADRESS,dx    ;store it
  322.         mov    COUNTER,00h    ;init counter
  323.  
  324. BEBODY:        lea    dx,ONEPUFF    ;zwischen buffer (1 Byte)
  325.         mov    cx,01h        ;lese    1 Byte
  326.         call    READONE
  327.         
  328.         mov    bx,dx
  329.         mov    al,es:[bx]    ;hol Byte aus PUFFER
  330.         cmp    al,00
  331.         jl    ENTCOMP        ;wenn <0 & >127!
  332.  
  333.         mov    dx,GADRESS    ;wenn >0
  334.         xor    ch,ch
  335.         mov    cl,al
  336.         add    cl,01h        ;real number of bytes to read
  337.         add    COUNTER,cx
  338.         call    READONE
  339.         add    GADRESS,cx
  340.         jmp    CHECKLINE
  341.  
  342. ENTCOMP:    neg    al
  343.         mov    cl,al
  344.         xor    ch,ch
  345.         push    cx
  346.         mov    cx,01h
  347.         call    READONE
  348.         mov    bx,dx
  349.         mov    ah,es:[bx]
  350.         pop    cx
  351.         add    cx,01
  352.         add    COUNTER,cx
  353.         mov    bx,GADRESS
  354. FILLBYTES:    sub    GLEN,cx
  355.         mov    es:[bx],ah
  356.         inc    bx
  357.         loop    FILLBYTES
  358.         mov    GADRESS,bx
  359.  
  360. CHECKLINE:    cmp    COUNTER,140h
  361.         jl    BEBODY
  362.  
  363.         mov    GCOUNT,00h
  364. BEGSHIFT:    mov    SHIFTVAL,00h
  365.         mov    CBUF2,08h
  366.  
  367. OSHIFT:        add    SHIFTVAL,01h
  368.         mov    CBUF1,08h
  369.         lea    bx,GPUFF    ;140h datas = 1. Grafikzeile
  370.         add    bx,GCOUNT    ;offset
  371.         xor    al,al
  372. SHIFTY:        mov    ah,es:[bx]
  373.         mov    cl,SHIFTVAL
  374.         sal    ah,cl
  375.         jc    SETPOINT
  376.         ror    al,01h
  377.         jmp    CHECKPOINT
  378. SETPOINT:    ror    al,01h
  379.         add    al,80h
  380. CHECKPOINT:    add    bx,28h        ;next Plane
  381.         sub    CBUF1,01h
  382.         cmp    CBUF1,00h
  383.         jg    SHIFTY
  384.         
  385.         mov    bx,SCREEN
  386.         mov    dx,0a000h
  387.         mov    es,dx
  388.         mov    es:[bx],al
  389.         mov    bx,cs
  390.         mov    es,bx
  391.         add    SCREEN,01h
  392.  
  393.         dec    CBUF2
  394.         cmp    CBUF2,00h
  395.         jg    OSHIFT
  396.         add    GCOUNT,01
  397.         cmp    GCOUNT,28h
  398.         jl    BEGSHIFT
  399.         ret
  400. READBODY    ENDP
  401. ;======================================================================
  402. READONE        PROC    NEAR
  403.         mov    ah,3fh        ;read header
  404.         mov    bx,HANDLE1
  405.         int    21h
  406.         ret
  407. READONE        ENDP
  408. ;======================================================================
  409. SAVEGRAF    PROC    NEAR
  410.         lea    bx,LBMNAM+2
  411.         mov    dx,bx        ;Zeiger auf Dateiname
  412.         mov    cl,es:[bx-1]    ;Filename.RAW
  413.         xor    ch,ch
  414.         add    bx,cx
  415.         mov    cl,82        ;R
  416.         mov    es:[bx+1],cl
  417.         mov    cl,65        ;A
  418.         mov    es:[bx+2],cl
  419.         mov    cl,87        ;W
  420.         mov    es:[bx+3],cl
  421.         mov    ah,3ch        ;Datei erstellen (Handle)
  422.         mov    cx,00h        ;nur lesen!!??
  423.         int    21h        ;INTERRUPT!
  424.         mov    HANDLE3,ax    ;and store handle
  425.         mov    bx,ax
  426.         push    bx
  427.         
  428.         mov    ah,40h        ;write file.RAW
  429.         mov    cx,0fa00h
  430.         mov    bx,0a000h
  431.         mov    ds,bx
  432.         xor    dx,dx
  433.         pop    bx
  434.         int    21h
  435.         mov    bx,cs
  436.         mov    ds,bx
  437.         ret
  438. SAVEGRAF    ENDP
  439. ;======================================================================
  440. ;======================================================================
  441. CODE_SEG    ENDS
  442. ;======================================================================
  443. ;======================================================================
  444. DATA_SEG    SEGMENT PUBLIC    ;Datasegment
  445.  
  446. LBMNAM        db    15 dup (?)
  447.  
  448. NIEI        db    "          >>> Nichts eingegeben! <<<          "
  449. OPENERR        db    "    >>> fehlende File-Sharing-Software <<<    "
  450.         db    "         >>> Datei nicht gefunden <<<         "
  451.         db    "        >>> Datei existiert nicht! <<<        "
  452.         db    "       >>> kein freies Handle mehr! <<<       "
  453.         db    "         >>> Zugriff verweigert ! <<<         "
  454. INITERR        db    "         >>> Pfad nicht gefunden! <<<         "
  455.         db    "          >>> kein freies Handle <<<          "
  456.         db    "          >>> Zugriff verweigert <<<          "
  457.  
  458. BIAU        db    "╔════════════════════════════════════════════╗"
  459.         db    "║                ILBM --> RAW                ║"
  460.         db    "║                    V 1.0                   ║"
  461.         db    "║            (c) by Darius Zendeh            ║"
  462.         db    "╟────────────────────────────────────────────╢"
  463.         db    "║  Name eingeben  ( ohne Extension .LBM ! )  ║"
  464.         db    "║               max. 8 Zeichen               ║"
  465.         db    "║                 >        <                 ║"
  466.         db    "╠════════════════════════════════════════════╣"
  467.         db    "║                                            ║"
  468.         db    "╚════════════════════════════════════════════╝"
  469.         db    255
  470.         
  471. BSEITE        db    0
  472. VMODE        db    0
  473. GLEN        dw    0
  474. RLEN        dw    0
  475. COUNTER        dw    0
  476.  
  477. HANDLE1        dw    0
  478. HANDLE2        dw    0
  479. HANDLE3        dw    0
  480.  
  481. SHIFTVAL    db    0
  482. CBUF1        db    0
  483. CBUF2        db    0
  484. GADRESS        dw    0
  485. SCREEN        dw    0
  486. GCOUNT        dw    0
  487.  
  488. ONEPUFF        db    0        ;statt PUFFER!
  489. GPUFF        db    0        ;140h dup (?)
  490. PUFFER        db    0
  491.  
  492. DATA_SEG    ENDS
  493. END        ILBMTORAW
  494.