annotate 3rdparty/utils/view/view_gif.a @ 1706:6b23465701c0

Tim Kientzle's VIEW
author boisy
date Tue, 10 Aug 2004 23:46:24 +0000
parents
children b7fb6a9aead4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1706
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
1 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
2 * GIF supervisor and LZW decoding stuff.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
3 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
4
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
5 ifp1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
6 use /dd/defs/os9defs.a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
7 endc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
8
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
9 psect view_gif_a,0,0,0,0,0
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
10
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
11 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
12 * GIFshowpic
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
13 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
14 * Display a GIF picture
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
15 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
16 vsect dp
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
17 * These are initialized by SetGIF in view_gifset.a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
18 giftable: rmb 2 Pointer to 12k decode table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
19 gifstack: rmb 2 Pointer to 4k space for reversing codes
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
20 * These are used by the actual screen output routines in view_gifpix.a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
21 gifiheight: rmb 2 Image height
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
22 gifiwidth: rmb 2 image width
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
23 gifinterlace: rmb 1 T=Use interlace in displaying picture.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
24 * These are all used locally.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
25 sheight rmb 2 Screen height (We use the image size instead of these).
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
26 swidth rmb 2 Screen width
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
27 domap rmb 1 T= Color map follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
28 *cr rmb 1 Number bits of color resolution
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
29 pixel rmb 1 Number bits per pixel
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
30 background rmb 1 Background color
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
31 screenset rmb 1 T= screen has been set.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
32 endsect
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
33
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
34 GIFshowpic:
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
35 clr screenset
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
36 lbsr signature Find signature in input stream
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
37 lbsr screendesc Parse the screen descriptor information
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
38 tst <domap
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
39 beq noglobal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
40 lbsr colormap Read and parse the colormap and set up the screen.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
41 clr <domap
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
42 noglobal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
43 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
44 * Main image processing loop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
45 * Searches the input stream for one of the following separator characters,
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
46 * and acts accordingly:
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
47 * 0x2c (comma) - GIF image follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
48 * 0x21 (exclamation point) - extension block follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
49 * 0x3b (semicolon) - end of GIF file
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
50 GIFLoop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
51 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
52 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
53 cmpa #$3b semicolon marks the end of the file
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
54 beq GIFend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
55 cmpa #$21
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
56 bne gif2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
57 lbsr skipextension
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
58 bra GIFLoop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
59 gif2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
60 cmpa #$2c
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
61 bne GIFLoop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
62 bsr gifimage
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
63 bra GIFLoop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
64 GIFend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
65 lbsr EndGIF Return extra memory area.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
66 rts
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
67
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
68 vsect dp
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
69 mincode rmb 1 Starting code size
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
70 lastcode rmb 2 Last code input
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
71 thiscode rmb 2 the current code
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
72 endcode rmb 2 Code signifying end of picture
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
73 clrcode rmb 2 code indicating that we clear the table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
74 firstcolor rmb 1 First color of code just processed
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
75 codesize rmb 1 Current code size in bits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
76 *bethy rmb 50 How much I love Beth. (Needs to be MUCH bigger...)
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
77 endsect
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
78
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
79 * Process a GIF image
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
80 gifimage
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
81 pshs a,b,x,y,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
82 * First, handle the image descriptor
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
83 lbsr GIFgetword offset of pic from left edge of screen
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
84 lbsr GIFgetword offset of pic from top of screen
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
85 lbsr GIFgetword image width
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
86 std gifiwidth
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
87 lbsr GIFgetword image height
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
88 std gifiheight
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
89 lbsr I_GetByte bitmapped option byte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
90 tfr a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
91 sex
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
92 sta domap top bit: T=local map follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
93 tfr b,a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
94 anda #$3
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
95 inca
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
96 sta pixel Bottom 3 bits: bits/pixel less one.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
97 lslb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
98 sex
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
99 sta gifinterlace Bit 6: T=Use interlace
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
100 tst domap Is there a local color map?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
101 beq nolocal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
102 lbsr colormap Yes, handle it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
103 nolocal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
104 * Now, we're down to the actual image.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
105 lbsr I_GetByte Get the starting code size.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
106 sta mincode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
107 cmpa #8 Does code size make sense?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
108 bls gifcodeok
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
109 lbra E$Format No, report a format error.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
110 gifcodeok
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
111 lbsr lzwinit Initialize some machinery
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
112 lbsr gifoutinit
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
113 * From here on, U holds the address of the next entry in the decode table.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
114 lbsr clrtable Clear table, set endcode and clrcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
115 imageloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
116 lbsr nexttoken Get a code.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
117 stx thiscode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
118 cmpx endcode Is it an end-of-pic code?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
119 beq imageend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
120 cmpx clrcode Is it a clear code?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
121 bne imagenormal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
122 lbsr clrtable If so, reinitialize everything.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
123 lbsr nexttoken Get the next token (always a root)
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
124 stx lastcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
125 lbsr outcode Output it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
126 bra imageloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
127 imagenormal
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
128 lbsr outcode Output the code, set the initial color var.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
129 ldx lastcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
130 lda firstcolor
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
131 stx ,u++ Add the code to the decode table.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
132 sta ,u+
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
133 cmpu <codelimit Are we at the point where we change code size?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
134 blo addcend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
135 lbsr setlimit Yes, do it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
136 addcend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
137 ldx thiscode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
138 stx lastcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
139 bra imageloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
140 imageend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
141 puls a,b,x,y,u,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
142
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
143 * This is an extension block, so skip it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
144 skipextension
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
145 pshs a,b,x,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
146 lbsr I_GetByte Get function code
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
147 extensloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
148 bsr getpacket Get packet, size in A.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
149 tsta
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
150 bne extensloop Non-zero, get another.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
151 puls a,b,x,y,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
152
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
153 * Get a packet from input into AltBuff, return packet size in A.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
154 getpacket
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
155 pshs b,x,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
156 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
157 tsta
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
158 beq getpackend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
159 pshs a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
160 tfr a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
161 clra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
162 leax altbuff,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
163 tfr d,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
164 lbsr I_Read
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
165 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
166 puls a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
167 getpackend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
168 puls b,x,y,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
169
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
170 * Read and process colormap
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
171 colormap
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
172 pshs a,b,x,y,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
173 lda pixel
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
174 bsr powertwo
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
175 leax altbuff,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
176 leau alt2buff,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
177 pshs y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
178 tfr d,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
179 leay d,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
180 leay d,y Y:=3*D
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
181 lbsr I_Read Read global color map
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
182 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
183 puls y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
184 tst <screenset Is screen already set?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
185 bne endcmap Yes, don't process stuff.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
186 com screenset No, mark it as set.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
187 lbsr GIFcolors Translate colors, and generate color translation table.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
188 lbsr setscreen
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
189 lbsr setbuffer
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
190 lbsr setpals Set the palettes
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
191 lda background Translate background color through the translation table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
192 leau a,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
193 leau a,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
194 lda a,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
195 lbsr setborder Set the border color.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
196 endcmap
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
197 puls a,b,x,y,u,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
198
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
199 * Take value in A and return 2**A in D (assumes A<15).
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
200 powertwo
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
201 pshs a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
202 ldd #1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
203 tst ,s
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
204 powerloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
205 beq powerend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
206 lslb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
207 rola
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
208 dec ,s
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
209 bra powerloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
210 powerend
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
211 leas 1,s
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
212 rts
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
213
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
214 * Read and process screen descriptor
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
215 screendesc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
216 pshs a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
217 bsr GIFgetword
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
218 std swidth First word is screen width in pixels
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
219 bsr GIFgetword
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
220 std sheight Next is screen height in pixels
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
221 lbsr I_GetByte This is bit-mapped
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
222 lbcs _error Bit 7: T= global map follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
223 tfr a,b Bits 6:5:4: number bits of "color resolution" - 1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
224 andb #7 Bits 2:1:0: Number of bits per pixel - 1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
225 incb (Determines size of color map)
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
226 stb pixel
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
227 tfr a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
228 sex
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
229 sta domap Top bit is true if global color map follows
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
230 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
231 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
232 sta background
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
233 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
234 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
235 tsta
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
236 lbne E$Format
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
237 puls a,b,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
238
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
239 GIFgetword
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
240 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
241 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
242 tfr a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
243 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
244 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
245 rts
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
246
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
247 * Signature: scan input to find "GIF###", the GIF signature string,
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
248 * where ### is two digits followed by a lowercase letter, e.g.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
249 * '87a'
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
250 sigsub
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
251 lbsr I_GetByte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
252 lbcs _error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
253 rts
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
254
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
255 signature
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
256 pshs a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
257 Sig0
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
258 bsr sigsub
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
259 Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
260 cmpa #'G Search for "GIF"
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
261 bne Sig0
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
262 bsr sigsub
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
263 cmpa #'I
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
264 bne Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
265 bsr sigsub
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
266 cmpa #'F
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
267 bne Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
268 clrb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
269 Sig2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
270 bsr sigsub Get two digits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
271 cmpa #'0
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
272 blo Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
273 cmpa #'9
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
274 bhi Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
275 comb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
276 bne Sig2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
277 bsr sigsub and one lowercase letter
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
278 cmpa #'a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
279 blo Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
280 cmpa #'z
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
281 bhi Sig1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
282 puls a,b,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
283
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
284
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
285 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
286 *LZW decode subs.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
287 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
288 vsect dp
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
289 codelimit rmb 2 Point at which we must switch code sizes.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
290 endsect
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
291
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
292 * Miscellaneous initialization
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
293 lzwinit
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
294 pshs a,b,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
295 clr <packsiz
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
296 clr <numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
297 puls a,b,x,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
298
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
299 * Initialize the decode table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
300 *
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
301 clrtable
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
302 pshs a,b,x,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
303 ldx giftable Get start of table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
304 lda mincode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
305 lbsr powertwo
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
306 pshs y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
307 tfr d,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
308 clra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
309 clrb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
310 clrloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
311 sta ,x+ Roots have 0 for pointer, themselves for suffix
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
312 std ,x++
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
313 incb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
314 leay -1,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
315 bne clrloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
316 puls y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
317 stx clrcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
318 leax 3,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
319 stx endcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
320 leax 3,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
321 tfr x,u Set up nextentry pointer in U
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
322 lda mincode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
323 sta codesize Pretend we were doing "mincode".
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
324 lbsr setlimit Bump to next codesize.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
325 puls a,b,x,y,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
326
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
327 vsect dp
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
328 packptr rmb 2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
329 packsiz rmb 1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
330 endsect
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
331 * Return next byte from file
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
332 nextbyte
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
333 pshs x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
334 tst packsiz
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
335 bne nextbyte1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
336 lbsr getpacket
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
337 sta packsiz
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
338 leax altbuff,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
339 stx packptr
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
340 nextbyte1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
341 dec packsiz
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
342 ldx packptr
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
343 lda ,x+
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
344 stx packptr
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
345 puls x,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
346
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
347 vsect dp
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
348 numbits rmb 1 Number of bits in bit buffer
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
349 bitbuff rmb 3 Buffer bits from file here
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
350 codemask rmb 2 Mask off just codesize bits.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
351 endsect
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
352 * Return next token from file
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
353 nexttoken
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
354 pshs d
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
355 ldb numbits First, fill bitbuffer with enough bits to make up codesize
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
356 bra nexttokst
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
357 nexttokloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
358 ldx bitbuff Move other 16 bits forward.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
359 stx bitbuff+1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
360 bsr nextbyte Get 8 more bits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
361 sta bitbuff
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
362 addb #8 Increase bit count.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
363 nexttokst
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
364 cmpb codesize
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
365 blo nexttokloop
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
366 stb numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
367 cmpb #17 Do we have to deal with three bytes?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
368 blo nexttok2 No, 16 or fewer bits, so just deal with two.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
369 ldb #20
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
370 subb numbits First, we shift until we get to bit #20.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
371 clra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
372 tfr d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
373 ldd bitbuff We keep first two bytes in D, leave 3rd one in place.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
374 nexttok31
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
375 lsra Analysis shows that we are never past bit 19, so we will
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
376 rorb always have to process this loop at least once.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
377 ror bitbuff+2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
378 leax -1,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
379 bne nexttok31
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
380 tfr b,a Now, the first bit of the token we want is out of the first
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
381 ldb bitbuff+2 byte, so we're down to two bytes.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
382 lsra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
383 rorb Since we start with the least sig bit in bit #20, and we want it
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
384 lsra in bit #24, we must shift exactly 4 times.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
385 rorb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
386 lsra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
387 rorb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
388 lsra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
389 rorb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
390 bra nexttok10 Now we have our token.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
391 nexttok2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
392 cmpb #9 Do we have to deal with two bytes?
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
393 blo nexttok1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
394 ldb #16
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
395 subb numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
396 clra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
397 tfr d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
398 ldd bitbuff
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
399 stx -2,s Test X for zero.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
400 beq nexttok10
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
401 nexttok21
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
402 lsra
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
403 rorb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
404 leax -1,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
405 bne nexttok21
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
406 bra nexttok10
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
407 nexttok1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
408 ldb bitbuff
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
409 lda #8
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
410 suba numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
411 beq nexttok10
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
412 nexttok11
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
413 lsrb
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
414 deca
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
415 bne nexttok11
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
416 nexttok10
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
417 anda codemask
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
418 andb codemask+1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
419 ldx <giftable
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
420 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
421 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
422 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
423 ldb numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
424 subb codesize
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
425 stb numbits
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
426 puls d,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
427
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
428 outcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
429 pshs a,b,x,y,u
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
430 ldu <gifstack
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
431 cmpx 6,s U is on the stack.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
432 lbhi E$Format If the code is too large, report a format error
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
433 beq outcode1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
434 bsr outcsub If it's in the table, process it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
435 bra outcode2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
436 outcode1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
437 ldx lastcode If it's not in the table, then it is the last code
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
438 bsr outcsub followed by the first color of the last code.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
439 lda firstcolor
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
440 lbsr gifoutpix
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
441 outcode2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
442 puls a,b,x,y,u,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
443
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
444 outcsub
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
445 pshs y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
446 ldy #0000
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
447 outc1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
448 lda 2,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
449 leay 1,y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
450 pshu a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
451 ldx ,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
452 bne outc1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
453 tfr y,x Put the count in X
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
454 puls y
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
455
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
456 sta firstcolor Now we know the first color, so store it.
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
457
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
458 outc2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
459 pulu a
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
460 lbsr gifoutpix
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
461 leax -1,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
462 bne outc2
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
463 rts
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
464
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
465 * Add a code to the table
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
466 addcode
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
467 pshs a,b
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
468 puls a,b,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
469
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
470 setlimit
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
471 pshs a,b,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
472 lda codesize
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
473 cmpa #12
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
474 bhs setlim1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
475 inca
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
476 setlim1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
477 sta codesize
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
478 lbsr powertwo
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
479 ldx giftable
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
480 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
481 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
482 leax d,x
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
483 stx codelimit
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
484 subd #1
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
485 std <codemask
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
486 puls a,b,x,pc
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
487
6b23465701c0 Tim Kientzle's VIEW
boisy
parents:
diff changeset
488 endsect