home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / p / pchdemo.zip / SOURCESW.ZIP / SOURCE.ASM < prev    next >
Assembly Source File  |  1992-10-29  |  3KB  |  162 lines

  1. ;       Assemblerroutine SOURCE.ASM
  2. ;
  3. ;       Mit dieser Routine wird ein Bild digitalisiert und in den
  4. ;       anzugebenen Rambereich geschrieben.
  5. ;
  6. ;       Der Digitalisierbereich beträgt horizontal 384 Pixel. In BL
  7. ;       kann der Startpunkt, ab wann digitalisiert werden soll, angegeben
  8. ;       werden (0 = ganz links).
  9. ;
  10. ;       Vertikal beträgt der Digitalisierbereich 288 Zeilen. In BH
  11. ;       kann die Startzeile angegeben werden (0 = 1.Zeile).
  12. ;
  13. ;       Folgende Parameter müssen übergeben werden:
  14. ;
  15. ;       AL      =       Kontrast 0..31 (normal 15)
  16. ;       BL      =       Startpixel 0..208 (96 = Bildmitte)
  17. ;       BH      =       Startzeile 0..31 bzw. 0..63 (16 bzw. 32 = Bildmitte)
  18. ;       CX      =       Bildgröße horizontal
  19. ;       DX      =       Bildgröße vertikal
  20. ;       ES:DI   =       Buffer des Bildes (Größe = CX * DX Bytes)
  21. ;
  22. ;       Rückgabewert
  23. ;
  24. ;       Wenn Carry gelöscht dann OK
  25. ;
  26. ;       Wenn Carry gesetzt und AX = 1  Kein Videosignal
  27. ;
  28. ;                                               (c) Münch-Video 1992
  29.  
  30. .186
  31.  
  32. code    segment public
  33.  
  34. assume  cs:code
  35.  
  36. public  digit
  37.  
  38. ;       In anderen Jumperstellungen müssen die entsprechenden Adressen angege-
  39. ;       ben werden.
  40.  
  41.     Data    =    300h    ; I/O Adresse zum Einlesen der Pixel
  42.  
  43.     FF    =    302h    ; Register      Bit 0..4 = Kontrast
  44.                 ;               Bit 6  0 = Color
  45.                 ;                      1 = SW
  46.                                 ;               Bit 7  0 = Speicher 1
  47.                 ;                      1 = Speicher 2
  48.  
  49.     Reset    =    304h    ; 304 = Hor.Reset und ver.Zeilenzähler
  50.                 ; 305 = Ver.Reset
  51.  
  52.     Hbin    =    306h    ; 0 = 1.Halbbild
  53.                 ; 1 = 2.Halbbild
  54.  
  55. digit   proc near
  56.     jmp    digit0
  57. kontrast    db    0
  58. ram        db    0
  59. digit0:
  60.     push    bx
  61.     push    cx
  62.     push    dx
  63.     push    di
  64.     push    si
  65.     push    es
  66.     mov    cs:kontrast,al
  67.     call    rec            ; Bild digitalisieren
  68.         call    save_pic                ; Bild auslesen
  69.     pop    es
  70.     pop    si
  71.     pop    di
  72.     pop    dx
  73.     pop    cx
  74.     pop    bx
  75.     ret
  76. ;
  77. ;       Digitalisieren eines Bildes
  78. ;
  79. rec:
  80.     push    cx
  81.     push    dx
  82.     xor    byte ptr cs:ram,128    ; Auf das andere RAM umschalten
  83.         mov     dx,FF
  84.     mov    al,cs:kontrast        ; Kontrast nach AL
  85.         or      al,64                   ; Bit 6 = SW
  86.     or    al,cs:ram        ; Bit 7 = RAM
  87.     out    dx,al            ; AL ausgeben
  88.     mov    dx,Hbin
  89.     mov    cx,0
  90. rec11:
  91.     dec    cx
  92.         jz      rec19
  93.     in    al,dx
  94.     and    al,1
  95.     jnz    rec11            ; Auf Ende des 1.Halbbildes warten
  96. rec12:
  97.     dec    cx
  98.         jz      rec19
  99.     in    al,dx
  100.     and    al,1
  101.     jz    rec12            ; Auf Ende des 2.Halbbildes warten
  102. rec13:
  103.     pop    dx
  104.     pop    cx
  105.     ret
  106. rec19:
  107.     mov    ax,1            ; Kein Videosignal
  108.     stc
  109.     pop    dx
  110.     pop    cx
  111.     ret
  112. ;
  113. ;       Übertragen eines Bildes in das RAM des Rechners
  114. ;
  115. save_pic:
  116.     push    es
  117.     push    di
  118.     mov    si,dx            ; Vertikal nach SI
  119.     mov    dx,Reset
  120.     in    ax,dx            ; Hor. + Ver. Reset
  121.     mov    ah,bh            ; Zeilen nach AH
  122.     add    ah,21            ; + 21 Leerzeilen
  123. save10:
  124.     in    al,dx            ; Vertikal + 1
  125.     dec    ah
  126.     jnz    save10
  127. save11:
  128.     push    cx            ; Horizontal retten
  129.         mov     dx,Data
  130.     mov    bh,bl            ; Startpixel / 4
  131.     shr    bh,1
  132.     shr    bh,1
  133.     inc    bh            ; + Dummy
  134. save12:
  135.     in    ax,dx
  136.     in    ax,dx
  137.     dec    bh
  138.     jnz    save12
  139.     shr    cx,1            ; Horizontal / 2
  140.     rep    insw            ; Pixel übertragen
  141.         mov     dx,Reset
  142.     in    al,dx            ; Hor. Reset + Vertikal + 1
  143.     pop    cx
  144.     push    cx
  145.     sub    di,cx
  146.     shr    cx,1
  147.     shr    cx,1
  148.     shr    cx,1
  149.     shr    cx,1
  150.     mov    ax,es
  151.     add    ax,cx
  152.     mov    es,ax
  153.     pop    cx
  154.     dec    si
  155.     jnz    save11
  156.     pop    di
  157.         pop     es
  158.     ret
  159. digit   endp
  160. code    ends
  161. end
  162.