dos33fsprogs:
${MAKE} ${MAKEFLAGS} -C dos33fsprogs/utils/dos33fs-utils dos33 mkdos33fs
-test.dsk: bootable.dsk sonic.a2bin
+test.dsk: bootable.dsk sonic.a2bin knuckles.a2bin
cp bootable.dsk $@
${DOS33} $@ SAVE B sonic.a2bin SONIC
+ ${DOS33} $@ SAVE B knuckles.a2bin KNUCKLES
sonic.a2bin: sonic.ihx
./a2_hex2bin.py $< $@
sonic_frame5.gif: sonic_running_6_colours_apple_80x48_indexed.gif
convert "$^[5]" $@
+knuckles.a2bin: knuckles.ihx
+ ./a2_hex2bin.py $< $@
+
+knuckles.ihx: \
+dlores_viewer12.ihx \
+knuckles_frames.ihx
+ ${HEXMERGE} -o $@ $^
+
+dlores_viewer12.ihx: dlores_viewer12.rel
+ ${ASLINK} -n -m -u -il -b zpage=0 -b text=${LOAD_ADDR} $@ $^
+
+dlores_viewer12.rel: dlores_viewer12.asm
+ ${AS6500} -l -o dlores_viewer12.asm
+
+dlores_viewer12.asm: dlores_viewer.asm
+ sed -e 's/DATA_FRAMES = 6/DATA_FRAMES = 12/' <$< >$@
+
+knuckles_frames.ihx: \
+knuckles_frame0.gif \
+knuckles_frame1.gif \
+knuckles_frame2.gif \
+knuckles_frame3.gif \
+knuckles_frame4.gif \
+knuckles_frame5.gif \
+knuckles_frame6.gif \
+knuckles_frame7.gif \
+knuckles_frame8.gif \
+knuckles_frame9.gif \
+knuckles_frame10.gif \
+knuckles_frame11.gif
+ ./gr_to_ihx.py --combine ${DATA_ADDR} "$^" $@
+
+knuckles_frame0.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[0]" $@
+
+knuckles_frame1.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[1]" $@
+
+knuckles_frame2.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[2]" $@
+
+knuckles_frame3.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[3]" $@
+
+knuckles_frame4.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[4]" $@
+
+knuckles_frame5.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[5]" $@
+
+knuckles_frame6.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[6]" $@
+
+knuckles_frame7.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[7]" $@
+
+knuckles_frame8.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[8]" $@
+
+knuckles_frame9.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[9]" $@
+
+knuckles_frame10.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[10]" $@
+
+knuckles_frame11.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+ convert "$^[11]" $@
+
.PHONY: clean
clean:
${MAKE} ${MAKEFLAGS} -C asxv5pxx/asxmak/linux/build clean
*.map \
*.rel \
*.rst \
+sonic_frame*.gif \
+dlores_viewer12.asm \
+knuckles_frame*.gif \
test.dsk
EXIT_SUCCESS = 0
EXIT_FAILURE = 1
+combine = False
+if len(sys.argv) >= 2 and sys.argv[1] == '--combine':
+ combine = True
+ del sys.argv[1]
if len(sys.argv) < 4:
- print(f'usage: {sys.argv[0]:s} load_addr "in.png ..." out.ihx')
+ print(f'usage: {sys.argv[0]:s} [--combine] load_addr "in.png ..." out.ihx')
sys.exit(EXIT_FAILURE)
load_addr = int(sys.argv[1], 0)
in_pngs = sys.argv[2].split()
for in_png in in_pngs:
image_in_pil = PIL.Image.open(in_png)
assert image_in_pil.mode == 'P'
- image_in.append(
- numpy.frombuffer(
- image_in_pil.tobytes(),
- dtype = numpy.uint8
- ).reshape((image_in_pil.size[1], image_in_pil.size[0]))
- )
+ image = numpy.frombuffer(
+ image_in_pil.tobytes(),
+ dtype = numpy.uint8
+ ).reshape((image_in_pil.size[1], image_in_pil.size[0]))
+ image = image.copy()
+ if 'transparency' in image_in_pil.info:
+ image[image == image_in_pil.info['transparency']] = 0x10
+ image_in.append(image)
image_in = numpy.stack(image_in, 0)
ts, ys, xs = image_in.shape
assert xs == 80
# deal with transparency
-transparent_color = image_in[0, 0, 0] # temporary
-image_in[image_in == transparent_color] = 0
+if combine:
+ for i in range(1, ts):
+ mask = image_in[i, :, :] != 0x10
+ content = image_in[i, mask]
+ image_in[i, :, :] = image_in[i - 1, :, :]
+ image_in[i, mask] = content
+image_in &= 0xf # remove transparency
image_out = numpy.zeros((ts, 8, 0x100), numpy.uint8)
shifts = [0, 4]