Subversion Repositories pentevo

Rev

Rev 261 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. .EQU    DMLZ_DATA       =0
  2. .EQU    DMLZ_TEMP       =1
  3. .EQU    DMLZ_TMP2       =2
  4. .EQU    DMLZ_TMP3       =3
  5. .EQU    DMLZ_XL         =4
  6. .EQU    DMLZ_XH         =5
  7. .EQU    DMLZ_JUMP       =6
  8. ;
  9. ;--------------------------------------
  10. ;
  11. .DSEG
  12. DMLZ_Z:         .BYTE   2
  13. DMLZ_REGS:      .BYTE   7
  14. .CSEG
  15. ;
  16. ;--------------------------------------
  17. ;in:    Z,RAMPZ == указатель на упакованные данные
  18. DMLZ_INIT:
  19.         STSZ    DMLZ_Z
  20.         LDIZ    DMLZ_REGS
  21.         LDI     TEMP,$80
  22.         STD     Z+DMLZ_TEMP,TEMP
  23.         LDI     TEMP,LOW(MEGABUFFER)
  24.         STD     Z+DMLZ_TMP2,TEMP
  25.         LDI     TEMP,HIGH(MEGABUFFER)
  26.         STD     Z+DMLZ_TMP3,TEMP
  27.         STD     Z+DMLZ_JUMP,FF
  28.         RET
  29. ;(не менять RAMPZ между вызовами DMLZ_GETBYTE)
  30. ;--------------------------------------
  31. ;out:   sreg.Z == CLR - успешно, SET - конец данных
  32. ;       DATA == очередной байт
  33. DMLZ_GETBYTE:
  34.         LDIZ    DMLZ_REGS
  35.         LDD     DATA,Z+DMLZ_DATA
  36.         LDD     TEMP,Z+DMLZ_TEMP
  37.         LDD     TMP2,Z+DMLZ_TMP2
  38.         LDD     TMP3,Z+DMLZ_TMP3
  39.         LDD     XL,Z+DMLZ_XL
  40.         LDD     XH,Z+DMLZ_XH
  41.         LDD     R0,Z+DMLZ_JUMP
  42.         LDSZ    DMLZ_Z
  43.         TST     R0
  44.         BRMI    DMLZ_MS
  45.         BREQ    DMLZ_METKA0
  46.         RJMP    DMLZ_METKA1
  47. ;
  48. DMLZ_MS:ELPM    R0,Z+
  49.         STSZ    DMLZ_Z
  50.         LDIZ    DMLZ_REGS
  51.         STD     Z+DMLZ_JUMP,NULL
  52. DMLZ_OUT:
  53.         STD     Z+DMLZ_DATA,DATA
  54.         STD     Z+DMLZ_TEMP,TEMP
  55.         STD     Z+DMLZ_XL,XL
  56.         STD     Z+DMLZ_XH,XH
  57.         MOV     XL,TMP2
  58.         MOV     XH,TMP3
  59.         ST      X+,R0
  60.         SUBI    XH,HIGH(MEGABUFFER) ;
  61.         ANDI    XH,DBMASK_HI        ;address warp
  62.         ADDI    XH,HIGH(MEGABUFFER) ;
  63.         STD     Z+DMLZ_TMP2,XL
  64.         STD     Z+DMLZ_TMP3,XH
  65.         MOV     DATA,R0
  66.         CLZ
  67.         RET
  68.  
  69. DMLZ_METKA0:
  70. DMLZ_M0:LDI     WH,$02
  71.         LDI     WL,$FF
  72. DMLZ_M1:ADD     TEMP,TEMP
  73.         BRNE    DMLZ_M2
  74.         ELPM    TEMP,Z+
  75.         ROL     TEMP
  76. DMLZ_M2:ROL     WL
  77.         BRCC    DMLZ_M1
  78.         DEC     WH
  79.         BRNE    DMLZ_X2
  80.         LDI     DATA,2
  81.         ASR     WL
  82.         BRCS    DMLZ_N1
  83.         INC     DATA
  84.         INC     WL
  85.         BREQ    DMLZ_N2
  86.         LDI     WH,$03
  87.         LDI     WL,$3F
  88.         RJMP    DMLZ_M1
  89.  
  90. DMLZ_X2:DEC     WH
  91.         BRNE    DMLZ_X3
  92.         LSR     WL
  93.         BRCS    DMLZ_MS
  94.         INC     WH
  95.         RJMP    DMLZ_M1
  96.  
  97. DMLZ_X6:ADD     DATA,WL
  98. DMLZ_N2:LDI     WH,$04
  99.         LDI     WL,$FF
  100.         RJMP    DMLZ_M1
  101.  
  102. DMLZ_N1:INC     WL
  103.         BRNE    DMLZ_M4
  104.         INC     WH
  105. DMLZ_N5:ROR     WL
  106.         BRCS    DMLZ_END
  107.         ROL     WH
  108.         ADD     TEMP,TEMP
  109.         BRNE    DMLZ_N6
  110.         ELPM    TEMP,Z+
  111.         ROL     TEMP
  112. DMLZ_N6:BRCC    DMLZ_N5
  113.         ADD     DATA,WH
  114.         LDI     WH,6
  115.         RJMP    DMLZ_M1
  116. DMLZ_X3:DEC     WH
  117.         BRNE    DMLZ_X4
  118.         LDI     DATA,1
  119.         RJMP    DMLZ_M3
  120. DMLZ_X4:DEC     WH
  121.         BRNE    DMLZ_X5
  122.         INC     WL
  123.         BRNE    DMLZ_M4
  124.         LDI     WH,$05
  125.         LDI     WL,$1F
  126.         RJMP    DMLZ_M1
  127. DMLZ_X5:DEC     WH
  128.         BRNE    DMLZ_X6
  129.         MOV     WH,WL
  130. DMLZ_M4:ELPM    WL,Z+
  131. DMLZ_M3:DEC     WH
  132.         MOV     XL,WL
  133.         MOV     XH,WH
  134.         ADD     XL,TMP2
  135.         ADC     XH,TMP3
  136. DMLZ_LDIR:
  137.         SUBI    XH,HIGH(MEGABUFFER) ;
  138.         ANDI    XH,DBMASK_HI        ;address warp
  139.         ADDI    XH,HIGH(MEGABUFFER) ;
  140.         LD      R0,X+
  141.         STSZ    DMLZ_Z
  142.         LDIZ    DMLZ_REGS
  143.         STD     Z+DMLZ_JUMP,ONE
  144.         RJMP    DMLZ_OUT
  145.  
  146. DMLZ_METKA1:
  147.         DEC     DATA
  148.         BRNE    DMLZ_LDIR
  149.  
  150.         RJMP    DMLZ_M0
  151. ;
  152. DMLZ_END:
  153.         SEZ
  154.         RET
  155. ;
  156. ;--------------------------------------
  157. ;
  158.