home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CONTRSRC.ZIP / SRC / WAVES / GENSTOS.LST < prev    next >
Encoding:
File List  |  1994-11-20  |  2.8 KB  |  164 lines

  1.  
  2. Xwidth% = 160
  3. DIM buf%(32000)
  4.  
  5. FILESELECT "*.raw","",n$
  6.  
  7. OPEN "i",#1,n$
  8. ' load header + pal
  9. BGET #1,V:buf%(0),800
  10. x%=PEEK(V:buf%(0)+8)*256+PEEK(V:buf%(0)+9)
  11. y%=PEEK(V:buf%(0)+10)*256+PEEK(V:buf%(0)+11)
  12. PRINT MKL$(LPEEK(V:buf%(0)))
  13. PRINT x%,y%
  14. ' load data
  15. BGET #1,V:buf%(0),x%*y%
  16. CLOSE #1
  17. '
  18. REPEAT
  19. UNTIL INKEY$=CHR$(32)
  20. '
  21. OPEN "o",#1,LEFT$(n$,LEN(n$)-3)+"asm"
  22.  
  23. ' analyser datas et generer code
  24. CheckCode
  25.  
  26. CLOSE #1
  27.  
  28. EDIT
  29.  
  30.  
  31. PROCEDURE Genadd(ct%)
  32.   IF (ct% = 1) THEN 
  33.     ' INC DI
  34.     PRINT #1;" db 47h"
  35.   ELSE IF (ct% < 128)
  36.     ' ADD DI, byte
  37.     PRINT #1;" db 83h,0c7h,";ct%
  38.   ELSE
  39.     ' ADD DI, word
  40.     PRINT #1," db 81h,0c7h"
  41.     PRINT #1;" dw ";ct%
  42.   ENDIF
  43. RETURN
  44.  
  45. PROCEDURE Gencode(dt%)
  46.   IF (dt%>0) THEN 
  47.     
  48.     SELECT dt%
  49.       
  50.     CASE 1
  51.       ' AA = code de STOSB
  52.       PRINT #1;" db 0AAh"
  53.     CASE 2
  54.       ' AB = code de STOSW
  55.       PRINT #1;" db 0ABh"
  56.     CASE 3
  57.       ' 3 octets
  58.       PRINT #1;" db 0ABh,0AAh"
  59.     CASE 4
  60.       ' 4 octets = code de STOSD
  61.       PRINT  #1;" db 066h,0ABh"
  62.     CASE 5
  63.       ' 5 octets
  64.       PRINT #1;" db 066h,0ABh,0AAh"
  65.     CASE 6
  66.       ' 6 octets
  67.       PRINT #1;" db 066h,0ABh,0ABh"
  68.     CASE 7
  69.       ' 7 octets
  70.       PRINT #1;" db 066h,0ABh,0ABh,0AAh"
  71.     CASE 8
  72.       ' 8 octets
  73.       PRINT #1;" db 066h,0ABh,066h,0ABh"
  74.     CASE 9
  75.       ' 9 octets
  76.       PRINT #1;" db 066h,0ABh,066h,0ABh,0AAh"
  77.     CASE 10
  78.       ' 10 octets
  79.       PRINT #1;" db 066h,0ABh,066h,0ABh,0ABh"
  80.     CASE 11
  81.       ' 11 octets
  82.       PRINT #1;" db 066h,0ABh,066h,0ABh,0ABh,0AAh"
  83.       
  84.     DEFAULT
  85.       
  86.       ' MOV CL,x  REP STOSD
  87.       PRINT #1;" db 0B1h,";SHR(dt%,2);",0F3h,066h,0ABh"
  88.       IF (dt% AND 2)=1 THEN 
  89.         ' STOSW
  90.         PRINT #1;" db 0ABh"
  91.       ENDIF
  92.       
  93.       IF (dt% AND 1)=1 THEN 
  94.         ' STOSB si Impaire
  95.         PRINT #1;" db 0AAh"
  96.       ENDIF
  97.       
  98.     ENDSELECT 
  99.     
  100.   ENDIF
  101.   
  102. RETURN
  103.  
  104.  
  105. PROCEDURE CheckCode
  106.   LOCAL ix%,iy%,cod%,ct%,dt%
  107.   
  108.   SCREEN $13
  109.   
  110.   ' compteur blancs à 0
  111.   ct%=0
  112.   dt%=0
  113.   
  114.   FOR iy%=0 TO y%-1
  115.     FOR ix%=0 TO x%-1
  116.       cod%=PEEK(V:buf%(0)+ix%+iy%*x%)
  117.       
  118.       IF (cod% = 0) THEN 
  119.         
  120.         IF (ct% = 0) AND (dt% > 0) THEN 
  121.           Gencode(dt%)
  122.           dt%=0
  123.         ENDIF
  124.         
  125.         ' un blanc en +
  126.         INC ct%
  127.         
  128.       ELSE
  129.         
  130.         POKE $a000:ix%+iy%*320,15
  131.         
  132.         IF (dt% = 0) AND (ct%>0) THEN 
  133.           Genadd(ct%)
  134.           ct%=0
  135.         ENDIF
  136.         
  137.         ' more data
  138.         
  139.         INC dt%
  140.         
  141.       ENDIF
  142.       
  143.     NEXT ix%
  144.     
  145.     IF (ct% > 0) THEN 
  146.       ' next line
  147.       ADD ct%,Xwidth% - x%
  148.     ELSE
  149.       Gencode(dt%)
  150.       dt% = 0
  151.       ' passer a la ligne
  152.       Genadd(Xwidth%-x%)
  153.     ENDIF
  154.     
  155.   NEXT iy%
  156.   
  157.   REPEAT
  158.   UNTIL INKEY$=CHR$(32)
  159.   
  160.   SCREEN $3
  161.   
  162. RETURN
  163.  
  164.