home *** CD-ROM | disk | FTP | other *** search
/ Mega Magazine 5 / Mega_Magazine_05_19xx___nl_Side_B.atr / gigaexpo.lzh / GIGAEXPO.SRC next >
Text File  |  1988-09-01  |  6KB  |  418 lines

  1. *************************************
  2. *                *
  3. *       THE HTT GIGA UNPACKER       *
  4. *      (C)1990 BY FRANKENSTEIN      *
  5. *                *
  6. *************************************
  7. *                                   *
  8. *   VERSION: 5.7   DATE: 19-11-90   *
  9. *                                   *
  10. *************************************
  11.  
  12. * USED FOR THE EXPO DEMO 1991
  13.  
  14. *------------------------------------
  15. * DOCUMENTED/TRANSLATED AT 1-1-93 (!)
  16. *------------------------------------
  17.  
  18.     ORG $B000
  19.  
  20. * START OF PACKED DATA
  21. PACKBEG    EQU $46F2
  22.  
  23. * END OF PACKED DATA + 1 !!
  24. * (PHYSICAL END)
  25. PACKEND    EQU $5000
  26.  
  27. *------------------------------------
  28. * PROGRAM VARIABLES
  29. *------------------------------------
  30.  
  31. * 3 PAGES BUFFER FOR THE TREE
  32. TREE1    EQU $B900    * BITPAT.L
  33. TREE2    EQU $BA00    * BITPAT.H
  34. TREE3    EQU $BB00    * CHAR.
  35.  
  36. * WARNING! THIS IS A SMALL BUFFER!
  37. MTAB1    EQU ENDPRG+1    * BUFFER
  38. MTAB2    EQU ENDPRG+1+16    * BUFFER
  39.  
  40. SOURCE    EQU $F0        (AND $F1)
  41. TARGET    EQU $F2        (AND $F3)
  42. EIND    EQU $F4        (AND $F5)
  43.  
  44. FINDBEG    EQU $F6
  45. FINDEND    EQU $F7
  46. BINBEG    EQU $F8
  47. BINEND    EQU $F9
  48.  
  49. SRCBIT    EQU $FA
  50.  
  51. TREELEN    EQU $FB
  52. DUMMY1    EQU $FC
  53. DUMMY2    EQU $FD
  54.  
  55. SBCNT    EQU $FE    * SOURCE BIT COUNT.
  56.  
  57. * INTERRUPTS OFF!
  58.  
  59.     LDA #0
  60.     STA $D40E
  61.     STA $D20E
  62.     LDA #DL
  63.     STA $230
  64.     STA $D402
  65.     LDA #DL/256
  66.     STA $231
  67.     STA $D403
  68.     LDA #34
  69.     STA $D400
  70.  
  71. *------------------------------------
  72. * SET BEGIN & END POINTERS
  73. *------------------------------------
  74.  
  75.     LDA #PACKBEG:L
  76.     STA SOURCE
  77.     LDA #PACKBEG:H
  78.     STA SOURCE+1
  79.  
  80.     LDA #PACKEND:L
  81.     STA EIND
  82.     LDA #PACKEND:H
  83.     STA EIND+1
  84.  
  85. *------------------------------------
  86. * CREATE TWO MASK TABLES
  87. *------------------------------------
  88.  
  89.     LDX #31
  90.     LDA #0
  91. DELTAB    STA MTAB1,X
  92.     DEX
  93.     BPL DELTAB
  94.  
  95.     LDX #7
  96.     LDA #1
  97. FILTAB    STA MTAB1,X
  98.     STA MTAB2+8,X
  99.     ASL
  100.     DEX
  101.     BPL FILTAB
  102.  
  103. *------------------------------------
  104. * CLEAR TREE BUFFER
  105. *------------------------------------
  106.  
  107.     INX
  108.     TXA
  109. DELBUF    STA TREE1,X
  110.     STA TREE2,X
  111.     STA TREE3,X
  112.     INX
  113.     BNE DELBUF
  114.  
  115. *------------------------------------
  116. * GET HEADER BYTES
  117. *------------------------------------
  118.  
  119. * BYTE #1: \ LO/HI
  120. * BYTE #2: / ORIGINAL START ADR.
  121. * BYTE #3: LENGTH TREE TABEL
  122. * [TREE]
  123. * [DATA]
  124.  
  125.     TAY        ;Y=0
  126.  
  127.     LDA (SOURCE),Y
  128.     STA TARGET
  129.     INY
  130.     LDA (SOURCE),Y
  131.     STA TARGET+1
  132.     INY
  133.     LDA (SOURCE),Y
  134.     STA TREELEN
  135.  
  136. *------------------------------------
  137. * COPY TREE IN SEPARATE PAGES
  138. *------------------------------------
  139.  
  140.     LDX #0
  141.  
  142. CTREE    LDA #3
  143.     JSR ADDSRC
  144.  
  145.     LDY #0
  146.     LDA (SOURCE),Y
  147.     STA TREE1,X
  148.     INY
  149.     LDA (SOURCE),Y
  150.     STA TREE2,X
  151.     INY
  152.     LDA (SOURCE),Y
  153.     STA TREE3,X
  154.     INX
  155.     CPX TREELEN
  156.     BNE CTREE
  157.  
  158. * IF TREELEN = 0 (=256!)
  159. * THEN THE ENDVECTOR IS 255
  160.  
  161.     DEC TREELEN
  162.  
  163.     LDA #3
  164.     JSR ADDSRC
  165.  
  166. *------------------------------------
  167. * INITIALISATION
  168. *------------------------------------
  169.  
  170.     LDX #0
  171. NOTSET    INX
  172.     LDA TREE1,X
  173.     AND #%10000000
  174.     BEQ NOTSET
  175.     STX BEGEEN+1
  176.  
  177. * GET TWO BYTES FROM SOURCE
  178. * SOURCE BIT COUNTER = 0
  179.  
  180.     JSR NEXTWO
  181.  
  182. *------------------------------------
  183. * MAIN LOOP
  184. *------------------------------------
  185.  
  186. * TREE BIT COUNTER = 0
  187. * (X = TREE BIT COUNTER)
  188. * FINDBEG = BEGIN TREE-TABEL
  189. * FINDEND = END TREE-TABEL
  190.  
  191. MAIN    LDX #0
  192.     STX FINDBEG
  193.     LDA TREELEN
  194.     STA FINDEND
  195.  
  196. *------------------------------------
  197. * SEARCH LOOP
  198. *------------------------------------
  199.  
  200. * FILTER A BIT FROM DUMMY1, DUMMY2
  201. * WITH HELP OF THE MASK CHOSEN
  202. * BY THE SOURCE BIT COUNTER.
  203. * "ORA" THE RESULT AND PUT IT
  204. * IN SRCBIT
  205.  
  206. SEARCH    LDY SBCNT
  207.  
  208.     LDA DUMMY1
  209.     AND MTAB1,Y
  210.     STA SRCBIT
  211.     LDA DUMMY2
  212.     AND MTAB2,Y
  213.     ORA SRCBIT
  214.     STA SRCBIT
  215.  
  216. * RESET BINAIRY SEARCH POINTERS
  217.  
  218.     LDA FINDBEG
  219.     STA BINBEG
  220.     LDA FINDEND
  221.     STA BINEND
  222.  
  223. * IF THE TREE BIT COUNTER >7 THEN
  224. * CHECK THE HI-BYTE OF THE TREE-TABEL
  225.  
  226.     TXA
  227.     BNE NOT1COL
  228.  
  229. BEGEEN    LDY #0
  230.     JMP SKIP
  231.  
  232. NOT1COL    AND #%00001000
  233.     BEQ LOCHK
  234.  
  235. *------------------------------------
  236. * CHECK TREE HI-BYTE 
  237. *------------------------------------
  238.  
  239.     LDA MTAB2,X
  240.     STA HMASK+1
  241.  
  242. HINEX    LDA BINBEG
  243.     CLC
  244.     ADC BINEND
  245.     ROR
  246.     TAY
  247.     LDA TREE2,Y
  248. HMASK    AND #0
  249.     BNE EEN2
  250.     STY BINBEG
  251.  
  252.     INY
  253.     CPY BINEND
  254.     BNE HINEX
  255.     JMP SKIP
  256.  
  257. EEN2    STY BINEND
  258.     DEY
  259.     CPY BINBEG
  260.     BNE HINEX
  261.     INY
  262.  
  263.     JMP SKIP
  264.  
  265. *------------------------------------
  266. * CHECK LO-BYTE TREE
  267. *------------------------------------
  268.  
  269. LOCHK    LDA MTAB1,X
  270.     STA LMASK+1
  271.  
  272. LONEX    LDA BINBEG
  273.     CLC
  274.     ADC BINEND
  275.     ROR
  276.     TAY
  277.     LDA TREE1,Y
  278. LMASK    AND #0
  279.     BNE EEN
  280.     STY BINBEG
  281.  
  282.     INY
  283.     CPY BINEND    
  284.     BNE LONEX    
  285.     JMP SKIP
  286.  
  287. EEN    STY BINEND
  288.     DEY
  289.     CPY BINBEG
  290.     BNE LONEX
  291.     INY
  292.  
  293. * IF WE'RE LOOKING FOR A "0", THEN
  294. * WE HAVE TO MOVE
  295. * THE FINDEND POINTER
  296.  
  297. SKIP    LDA SRCBIT
  298.     BNE NOZERO
  299.     DEY
  300.     STY FINDEND
  301.     JMP CONTIN
  302.  
  303. * IF WE'RE LOOKING FOR A "1", THEN
  304. * WE HAVE TO MOVE
  305. * THE FINDBEG POINTER
  306.  
  307. NOZERO    STY FINDBEG
  308.  
  309. * INC. TREE BIT COUNTER (X = X + 1)
  310. * INC. SOURCE BIT COUNTER (SBCNT)
  311.  
  312. CONTIN    INX
  313.     INC SBCNT
  314.  
  315. * SOURCE BIT COUNTER > 15?
  316.  
  317.     LDA SBCNT
  318.     CMP #16
  319.     BNE NOEND
  320.  
  321. * SOURCE BIT COUNTER = 0
  322. * DUMMY1, DUMMY2 = NEXT TWO
  323. * BYTES FROM SOURCE
  324.  
  325.     LDA #2
  326.     JSR ADDSRC
  327.     JSR NEXTWO
  328.  
  329. * UNTIL FINDBEG = FINDEND
  330.  
  331. NOEND    LDA FINDBEG
  332.     CMP FINDEND
  333.  
  334.     BEQ PUTCH
  335.  
  336.     JMP SEARCH
  337.  
  338. * GET A CHARACTER FROM THE TREE-TABEL
  339. * WITH HELP OF THE FINDBEG POINTER
  340. * AND PUT IT IN TARGET
  341.  
  342. PUTCH    TAX
  343.     LDA TREE3,X
  344.     LDY #0
  345.     STA (TARGET),Y
  346.     STA $D01A
  347.  
  348. *------------------------------------
  349. * INC. TARGET POINTER
  350. *------------------------------------
  351.  
  352.     INC TARGET
  353.     BNE NOTHI
  354.  
  355. * IF YOU WANT TO INCLUDE A
  356. * "PAGES UNPACKED" COUNTER,
  357. * HERE'S THE PLACE TO DO IT!
  358.  
  359.     INC TARGET+1
  360.  
  361. NOTHI    LDA TARGET
  362.     CMP EIND
  363.     BNE NOTHEND
  364.     LDA TARGET+1
  365.     CMP EIND+1
  366.     BEQ STOPIT
  367.  
  368. * NOT THE END, BACK TO MAIN!
  369.  
  370. NOTHEND    JMP MAIN
  371.  
  372. * END OF DECRUNCH
  373.  
  374. STOPIT    LDA #$C0
  375.     STA $D20E
  376.     LDA #$40
  377.     STA $D40E
  378.     LDA #0
  379.     STA 559
  380.     RTS
  381.  
  382. *------------------------------------
  383. * ADD ACCU TO SOURCE POINTER
  384. *------------------------------------
  385.  
  386. ADDSRC    CLC
  387.     ADC SOURCE
  388.     STA SOURCE
  389.     BCC CEMPT
  390.     INC SOURCE+1
  391. CEMPT    RTS
  392.  
  393. *------------------------------------
  394. * GET TWO NEW BYTES FROM SOURCE
  395. *------------------------------------
  396.  
  397. NEXTWO    LDY #0
  398.     STY SBCNT
  399.  
  400.     LDA (SOURCE),Y
  401.     STA DUMMY1
  402.     INY
  403.     LDA (SOURCE),Y
  404.     STA DUMMY2
  405.  
  406.     RTS
  407.  
  408.     ASC %(C)FRANKENSTEIN%
  409.  
  410. DL    DFB 112,112
  411.     DFB $42
  412.     DFW TXT
  413.     DFB $41
  414.     DFW DL
  415.  
  416. TXT    ASC %HTT GIGA UNPACKER - %
  417.     ASC %IT'S SLOW, BUT GOOD!%
  418. ENDPRG    DFB 0¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯