Skip to content

Commit 6698c55

Browse files
committed
Added parse ILBM test
1 parent c86da60 commit 6698c55

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed

ILBM/Demo640x256x5.ilbm

39.5 KB
Binary file not shown.

ILBM/load-ilbm.asm

+147
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
;==============================================================================
2+
; ASM Testcase
3+
; flype, 2015-09-29
4+
; load-ilbm.asm
5+
;==============================================================================
6+
7+
; DC.L 0
8+
; DC.L START
9+
SECTION .FASTRAM
10+
11+
;==============================================================================
12+
; CONSTANTS
13+
;==============================================================================
14+
15+
; Assert register
16+
17+
ASSERT_ZERO EQU $00D0000C
18+
19+
; Error codes
20+
21+
ERROR_FORM EQU 1 ; Not a FORM chunk
22+
ERROR_ILBM EQU 2 ; Not a ILBM chunk
23+
ERROR_SIZE EQU 3 ; Incorrect or corrupted chunk size
24+
25+
; Chunk Names
26+
27+
ID_FORM EQU 'FORM' ; International File Format (IFF)
28+
ID_ILBM EQU 'ILBM' ; Interleaved Bitmap
29+
ID_BMHD EQU 'BMHD' ; BitmapHeader
30+
ID_CMAP EQU 'CMAP' ; ColorMap
31+
ID_CAMG EQU 'CAMG' ; ViewModes
32+
ID_DPI EQU 'DPI ' ; DPI
33+
ID_BODY EQU 'BODY' ; Image data
34+
35+
; Struct BitmapHeader
36+
37+
BmWidth EQU 0
38+
BmHeight EQU 2
39+
BmDepth EQU 8
40+
BmCompr EQU 10
41+
42+
;==============================================================================
43+
; MAIN PROGRAM
44+
;==============================================================================
45+
46+
START:
47+
CLR.L D0 ; FORM Name
48+
CLR.L D1 ; Chunk name (4 bytes)
49+
CLR.L D2 ; Chunk Size (in bytes)
50+
CLR.L D6 ; Chunk counter
51+
CLR.L D7 ; Error code
52+
LEA PIC,A1 ; Load Picture in A1
53+
GETFORM:
54+
CMPI.L #ID_FORM,(A1)+ ; FORM ?
55+
BEQ GETSIZE ; If so, continue
56+
MOVE.L #ERROR_FORM,D7 ; D7 = Error
57+
BRA EXIT ; Stop
58+
GETSIZE:
59+
MOVE.L (A1)+,D0 ; D0 = FORM Size
60+
SUB.L #PICSZ-PIC-8,D0 ; If D0 = ( PICSIZE - PIC - 8 )
61+
BEQ GETILBM ; Then continue
62+
MOVE.L #ERROR_SIZE,D7 ; D7 = Error
63+
BRA EXIT ; Stop
64+
GETILBM:
65+
CMP.L #ID_ILBM,(A1)+ ; ILBM ?
66+
BEQ GETCHUNKS ; If so, continue
67+
MOVE.L #ERROR_ILBM,D7 ; D7 = Error
68+
BRA EXIT ; Stop
69+
GETCHUNKS:
70+
MOVE.L (A1)+,D1 ; Chunk Name
71+
MOVE.L (A1)+,D0 ; Chunk Size
72+
CMPI.L #ID_BMHD,D1 ; D1 = BHMD ?
73+
BEQ GETBMHD ; If so, parse BitmapHeader chunk
74+
CMPI.L #ID_CMAP,D1 ; D1 = CMAP ?
75+
BEQ GETCMAP ; If so, parse ColorMap chunk
76+
CMPI.L #ID_CAMG,D1 ; D1 = CAMG ?
77+
BEQ GETCAMG ; If so, parse ViewModes chunk
78+
CMPI.L #ID_DPI,D1 ; D1 = DPI ?
79+
BEQ GETDPI ; If so, parse DPI chunk
80+
CMPI.L #ID_BODY,D1 ; D1 = BODY ?
81+
BEQ GETBODY ; If so, parse Body chunk
82+
GETNEXT:
83+
ADDA.L D0,A1 ; A1 + Chunk Size
84+
BRA GETCHUNKS ; Branch to Next chunk
85+
GETBMHD:
86+
LEA width,A2
87+
MOVE.W BmWidth(A1),(A2) ; $280=640
88+
LEA height,A2
89+
MOVE.W BmHeight(A1),(A2) ; $100=256
90+
LEA depth,A2
91+
MOVE.B BmDepth(A1),(A2) ; $05
92+
LEA compr,A2
93+
MOVE.B BmCompr(A1),(A2) ; $01
94+
ADDQ #1,D6 ; Increment Chunk counter
95+
BRA GETNEXT ; Continue
96+
GETCMAP:
97+
MOVE.L D0,D3 ; Store size
98+
DIVU.W #3,D3 ; Size / 3 bytes per color
99+
;SUBI.L #32,D3 ; Should be 32 colors
100+
;MOVE.L D3,ASSERT_ZERO ; Assert no error
101+
;MOVE.L #31,D3 ; Store size
102+
MOVEA.L A1,A2 ; Store ColorMap address
103+
GETCMAP_LOOP:
104+
MOVE.B (A2)+,D4 ; Red
105+
MOVE.B (A2)+,D5 ; Green
106+
MOVE.B (A2)+,D6 ; Blue
107+
DBF D3,GETCMAP_LOOP ; Next color
108+
ADDQ #1,D6 ; Increment Chunk counter
109+
BRA GETNEXT ; Continue
110+
GETCAMG:
111+
MOVE.L (A1),D3 ; Viewmodes
112+
SUBI.L #$50091000,D3 ; Should be $50091000
113+
MOVE.L D3,ASSERT_ZERO ; Assert no error
114+
ADDQ #1,D6 ; Increment Chunk counter
115+
BRA GETNEXT ; Continue
116+
GETDPI:
117+
MOVE.L (A1),D3 ; DPI
118+
SUBI.L #$0029002C,D3 ; Should be $0029002C
119+
MOVE.L D3,ASSERT_ZERO ; Assert no error
120+
ADDQ #1,D6 ; Increment Chunk counter
121+
BRA GETNEXT ; Continue
122+
GETBODY:
123+
ADDQ #1,D6 ; Increment Chunk counter
124+
EXIT:
125+
SUBI.L #5,D6 ; Check number of chunks in ILBM file.
126+
MOVE.L D6,ASSERT_ZERO ; Assert no error
127+
MOVE.L D7,ASSERT_ZERO ; Assert no error
128+
RTS
129+
130+
;==============================================================================
131+
; Data Section
132+
;==============================================================================
133+
134+
width: DC.W 0
135+
height: DC.W 0
136+
depth: DC.B 0
137+
compr: DC.B 0
138+
139+
PIC:
140+
INCBIN "Demo640x256x5.ilbm"
141+
142+
PICSZ:
143+
*-PIC1
144+
145+
;==============================================================================
146+
; End of file
147+
;==============================================================================

0 commit comments

Comments
 (0)