Napisalem taki prosty programik do drukowania i testuje go na OKI Microline 320. Z drukiem tekstu nie mam problemow ale chce tez wydrukowac graficznie piramidke. Zamiast piramidy drukuje sie litera K i w nastepnej linii dwa znaki zapytania i lewa strona czubka piramidy. Prosze o pomoc w znalezieniu bledow. Dodam tylko, ze nie znam kodow sterujacych typowo dla OKI, na stronie producenta wyczytalem, ze ten model potrafi emulowac Epsona FX i wlasnie takich kodow uzywam. Prosze o pomoc, bo juz sam nie wiem czy to ja cos zle robie czy drukarka zle interpretuje te kody.

;-----------------------------                          
;       SEGMENT STOSU                                    
;-----------------------------                          
Mojstos SEGMENT STACK           ; DOS laduje segment SS 
        DB 64 DUP ('STOSIK!!')  ; rezerwacja 512 bajt˘w na stos 
Mojstos ENDS                                            
                                                        
;-----------------------------                          
;       SEGMENT DANYCH                                  
;-----------------------------                          
Mojdane SEGMENT                                          
                                                        
Dane        DB "Testowy wydruk.",0Ah,0Dh,00h     ; bufor do wydrukowania                        
LPT        DW 00h                    ; numer portu drukarki 00h-LPT1 itd. 
SoftReset    DB 1Bh,"@",00h                   ; sekwencja resetujaca drukarke 
Gl_W_Lewo    DB 1Bh,3Ch,00h                ; sekwencja przesowajaca glowice drukarki na lewe skrajne polozenie 
SetBold        DB 1Bh,"E",00h                ; sekwencja ustawiajaca druk wytluszczony 
UnSetBold    DB 1Bh,"F",00h                ; sekwencja kasujaca druk wyluszczony                                                        
OdstepPionowy    DB 1Bh,"A",08h,00h            ; sekwencja ustawiajaca odstep miedzy wierszami: 12h (druk tekstowy), 08h (druk graficzny) 
Skos_LG        DB 255,127,63,63,31,15,7,7,3,1 
Skos_LD        DB 128,192,224,224,240,248,252,252,254,255            
Skos_PG        DB 1,3,7,7,15,31,63,63,127,255                        
Skos_PD        DB 255,254,252,252,248,240,224,224,192,128            
                                                        ; Skosy potrzebne do zbudowania piramidki, oznaczaja zawartosc poszczegolnych kolumn (binarnie 1 - igla uderza 0 - nie uderza)            
Mojdane ENDS                                                          
                                                                      
;-----------------------------                                        
;       SEGMENT KODU                                                  
;-----------------------------                                        
Mojprog SEGMENT                                                        
        ASSUME CS:Mojprog, DS:Mojdane                                  
Main    PROC                                                          
Start:                  ; poczatek programu                            
        mov  AX,0003H   ; ustaw. tryb video: AH=0 AL=tryb (=3-80x25)  
        int  10H        ; wywolanie uslugi BIOS                        
                                                                      
        mov  AX,Mojdane ; zaladowanie wlasciwego adresu DS            
        mov  DS,AX                                                    
                                                                      
        ;lea  SI,SoftReset    
        ;call SendSequence                                              
                                                                      
        ;lea  SI,OdstepPionowy                                          
        ;call SendSequence                                              
                                                                      
        mov  CX,50 
        mov  DX,0 
        push CX  
        push DX  
                  
loop1:            
    pop  DX  
    pop  CX  
    sub  CX,10 
    push CX    
    push DX    
        mov  AL,0 
        call Drukuj_Kol 
                  
                  
        lea  SI,Skos_LG 
        call Drukuj_Pole 
                  
        pop  DX    
        pop  CX    
        push CX    
        push DX    
        mov  CX,DX 
        mov  AL,0    
        call Drukuj_Kol 
                    
        lea  SI,Skos_PG 
        call Drukuj_Pole 
                    
        call NewLine 
                  
        pop  DX    
        pop  CX    
        add  DX,20 
        push CX    
        push DX    
                  
        cmp  CX,0 
        jne  loop1 
                                                                      
        mov  AX,4C00H   ; wywolanie procedury DOS konczacej program    
        int  21h        ; przekazanie sterowania do DOS                                                                                  
                                                                      
                                                                      
;-----------------------------                                        
;    PROCEDURY                                                      
;-----------------------------                                        
SendByte PROC          ; wysyla do drukarki zawartosc AL              
    mov AH,00h    ; po wykonaniu przerwania w AL znajduje sie status drukarki 
    mov DX,LPT                                                    
    int 17h                                                        
    ret                                                            
SendByte ENDP                                                          
                                                                      
H_Reset PROC          ; Hardware'owy reset drukarki                  
           mov AH,01h                                                    
    mov DX,LPT                                                    
           int 17h                                                        
           ret                                                            
H_Reset ENDP                                                          
                                                                      
GetStatus PROC          ; nie przyjmuje argukmentow, w AL zwraca status drukarki 
    mov AH,02h                                                              
    mov DX,LPT                                                    
    int 17h                                                        
    ret                                                            
GetStatus ENDP                                                        
                                                                      
SendSequence PROC    ; wysyla sekwencje wskazywana przez SI do drukarki 
    mov AL,[SI]                                                    
    cmp AL,00h                                                    
    je seq_end                                                    
    call SendByte                                                  
    inc SI                                                        
    jmp SendSequence                                              
seq_end:                                                              
      ret                                                            
SendSequence ENDP                                                      
                                                                      
DrukGraf PROC        ; sekwencja druku graficznego                  
    mov  AL,1Bh                                                    
    call SendByte                                                  
    mov  AL,"K"                                                    
    call SendByte                                                  
    mov  AL,CL                                                    
    call SendByte                                                  
    mov  AL,CH                                                    
    call SendByte                                                  
    ret                                                            
DrukGraf ENDP                                                          
                                                                      
Drukuj_Kol PROC             ; drukuje CX-krotnie kolumne zdefiniowana w AL 
    cmp  CX,0 
    je   kol_end 
           call DrukGraf    
    dec  CX          
kolumna:                
           call SendByte    
           loop kolumna 
kol_end:    
           ret              
Drukuj_Kol ENDP          
                        
Drukuj_Pole PROC        
    mov  CX,10      
        call DrukGraf 
pole:                
        mov  AL,[SI] 
        call SendByte 
        inc  SI      
        dec  CX      
        jnz  pole    
        ret          
Drukuj_Pole ENDP      
                      
                      
NewLine    PROC          
    mov  AL,0Ah  
    call SendByte 
    mov  AL,0dh  
    call SendByte    
    ret            
NewLine ENDP            
;-----------------------------                          
                                                        
Main    ENDP                                            
Mojprog ENDS                                            
                                                        
        END  Start