home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / util / sfxsrc.lzh / UPDATE.A < prev   
Encoding:
Text File  |  1990-02-12  |  6.5 KB  |  211 lines

  1. ; update.a
  2. ;──────────────────────────────────────────────────────────────────────────────
  3. ; LHARC self extraction code for C64/C128 -     Copyright 1990 Chris Smeets
  4. ;──────────────────────────────────────────────────────────────────────────────
  5. ; Update() is the function responsible for the majority of the execution time
  6. ; during extraction.
  7.  
  8.             INSTXT "sfx.i"
  9.  
  10.             EXT freq
  11.             EXT prnt
  12.             EXT son
  13.             EXT Reconst
  14.  
  15.             PUBLIC Update
  16.  
  17. PNT         EQU T0                  ; Zpage temps
  18. I           EQU T1
  19. C           EQU T2
  20. J           EQU T3
  21. K           EQU T4
  22. L           EQU T5
  23. C2          EQU T6                  ; 2*c
  24. L2          EQU T7                  ; 2*l
  25.  
  26. Update
  27.             lda freq+Rstar2         ; if (freq[R] == 0x8000)
  28.             cmp #<MAX_FREQ          ;    reconst();
  29.             bne upd0
  30.             lda freq+Rstar2+1
  31.             cmp #>MAX_FREQ
  32.             bne upd0
  33.             txa
  34.             pha
  35.             tya
  36.             pha
  37.             jsr Reconst
  38.             pla
  39.             tay
  40.             pla
  41.             tax
  42.  
  43. upd0        stx C
  44.             sty C+1
  45.             ldx #0
  46.             ldy #1
  47.             asl C
  48.             rol C+1
  49.             clc                     ; C = prnt[T+c]
  50.             lda #<prnt+Tstar2
  51.             adc C
  52.             sta PNT
  53.             lda #>prnt+Tstar2
  54.             adc C+1
  55.             sta PNT+1
  56.             lda (PNT,x)
  57.             asl a
  58.             sta C
  59.             lda (PNT),y
  60.             rol a
  61.             sta C+1
  62.  
  63. do          clc                     ; k = ++freq[c]
  64.             lda #<freq
  65.             adc C
  66.             sta PNT
  67.             lda #>freq
  68.             adc C+1
  69.             sta PNT+1
  70.             clc
  71.             lda (PNT,x)
  72.             adc #1
  73.             sta (PNT,x)
  74.             sta K
  75.             lda (PNT),y
  76.             adc #0
  77.             sta (PNT),y
  78.             sta K+1
  79.  
  80. if          clc                     ; l = c+1
  81.             lda C
  82.             adc #2
  83.             sta L
  84.             lda C+1
  85.             adc #0
  86.             sta L+1
  87.  
  88.             clc
  89.             lda L
  90.             adc #<freq
  91.             sta PNT                 ; if (k>freq[l])
  92.             lda L+1
  93.             adc #>freq
  94.             sta PNT+1
  95. upd1        lda (PNT,x)
  96.             cmp K
  97.             lda (PNT),y
  98.             sbc K+1
  99.             bcc while
  100.             jmp endif
  101.  
  102. while       clc                     ;    while(k>freq[++l])
  103.             lda L                   ;       ;
  104.             adc #2
  105.             sta L
  106.             bcc upd2
  107.             inc L+1
  108. upd2        clc
  109.             lda L
  110.             adc #<freq
  111.             sta PNT
  112.             lda L+1
  113.             adc #>freq
  114.             sta PNT+1
  115.             lda (PNT,x)
  116.             cmp K
  117.             lda (PNT),y
  118.             sbc K+1
  119.             bcc while
  120.  
  121.             sec
  122.             lda L                   ;    l--
  123.             sbc #2
  124.             sta L
  125.             lda L+1
  126.             sbc #0
  127.             sta L+1
  128.  
  129.             clc                     ; freq[c] = freq[l]
  130.             lda C
  131.             adc #<freq
  132.             sta C2
  133.             lda C+1
  134.             adc #>freq
  135.             sta C2+1
  136.             clc
  137.             lda L
  138.             adc #<freq
  139.             sta L2
  140.             lda L+1
  141.             adc #>freq
  142.             sta L2+1
  143.             lda (L2,x)
  144.             sta (C2,x)
  145.             lda (L2),y
  146.             sta (C2),y
  147.  
  148.             lda K                   ; freq[l] = k
  149.             sta (L2,x)
  150.             lda K+1
  151.             sta (L2),y
  152.  
  153. ì2j            EXT p
  154. 0e PNT            adc #>freq
  155.             sta PNT+1
  156.          lda freq+Rstar2+1
  157.    CC2
  158.             lda L+1
  159.             sta Lmí+1
  160.            xpsC+1
  161.             clc                     ; C = prc  lda K           T+1
  162.          l sbc #2
  163.     7#2
  164. nlp          sta L
  165.         sta L      bcc upd2
  166.          o         T+1
  167.   J#c#<freq
  168.        
  169.             sta (C2,x)
  170. (#SÆM+╩lép╙í╜L2
  171.             lda L+1
  172.        +s     T+1
  173.   l╤£P-K~of the execution tYnπ      lda L+1
  174.           Kûr╬£   i    ócPNT
  175. or the majority of the e      ; freq[l] h                      ;    while(k>freq[++l])<freS    ócPNT
  176. or the major╒R; sta K
  177.             lda (PNT),y
  178.       rcPNT
  179. or the majo
  180. j            lda L+1
  181.             ae         adc #>freq
  182.             sta PNT+1
  183.          lda frea (L2
  184.   lda L+1
  185.        )Rhlpr╙nm#2
  186.     7#2
  187. nl│
  188. cif+1
  189.        ±     inc L+1 sbc #2
  190.             sta L
  191.             lda L+1
  192. ),y
  193.   lda L+1
  194.             adc #>freq
  195.    d-EQU T3
  196. K  D    É Kûr╬£   i    ócPNT
  197. or      lda L+1
  198. ),y
  199. ae         adc #>freq
  200.             sta PNT+1
  201.          ldaå            sta PNT+
  202. or      lda L+1
  203. ),y
  204. aeÆtC_ C = prc  lda K           T+1
  205.       #C 2eC;B),y
  206.   lda L+1
  207.        )   T+1
  208. ╢    ⌐     )   T+1
  209.   inc L+           adc #>freq
  210. b    )   T+1
  211.   inc L+    ╒Ie    )   T+1
  212.   inc L+(C2          sta PNT+
  213. orp+(C2          st(2j            EXTî  sCalda +aq|#>freq
  214. b    )   T+1
  215.  K2ynô"u #C 2eC;B),y
  216.   lda LK
  217. xia  lda
  218. 0mÑ0l]c
  219.    £    -πsT+1/
  220. JZs╗EXT+
  221. n╜     e
  222. C
  223.          ldaå            sta PNT+
  224. or      lda L+1
  225. )eq
  226.    d-EQU T3
  227.           adc #<02p lda LK
  228. xia  l&QiL &QiKTupd2 íÅrBp+(C2          &QiLei(PNTu0      2ynôea P   adc #>freq
  229.             sta PNT+1
  230.          ldaå      {Có£╟da +aq|#>freq
  231. b    )   T+1
  232.  K2ynô"u #C 2eC;B),M      sbSZ42Hnô"u #C 2eC;B),M     st(2j            EXb    )   T+1
  233.  K2yn)p;nna--╥╖òöñ┴æ¡áÄÿºïèëêç¬àäâ┐üÇ║}ªÜz┌╠╧vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvƒ╛▐ⁿ¢█▌╞╘╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓╓δ└¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿╝ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ`Γ^τ\Φ≤╣┤WVε÷√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√⌡∙O╨╕╚≡≥≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈═ß²»╦°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°@?▀µΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ:⌠╔∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∩╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┘α░■╫Θφ▄······················································'¥%$σ┬!½.Ö▒▓¼= Gù├ú[kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkìììììììììììììììììììììììììììì  ─╩é«3╤Y₧û╬╬╬╬╬╬╬╬╬╬╬~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww│±gåDÉ*#hhhhhhhhhhhhhhPR("⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐⌐