1
2 /*
3 * Old-school way to deal with graphics on a ZX81
4 * It show how to deal with big pictures with simple memory-copy operations.
5 *
6 * Horse animation, keep tapping on the keyboard to make it run faster !
7 * by Stefano Bodrato, 2020
8 *
9 * To add text on top, first build the program disabling autorun:
10 * zcc +zx81 -create-app horse.c -Cz--disable-autorun
11 * ..then edit line 2 (RAND USR..) and copy it, e.g. to line 10,
12 * and add your PRINT instruction just after line 1 (REM..).
13 * Save before testing it !
14 *
15 */
16
17 #include <stdio.h>
18 //#include <string.h>
19
20 char horseg[] =
21 {
22 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x82, 0x00, 0x00, 0x00, 0x00, 0x76,
23 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x00, 0x76,
24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x76,
25 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x80, 0x07, 0x03, 0x80, 0x80, 0x05, 0x00, 0x76,
26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x02, 0x03, 0x00, 0x00, 0x76,
27 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
28 0x00, 0x00, 0x87, 0x80, 0x07, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
29 0x00, 0x02, 0x84, 0x80, 0x01, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
30 0x00, 0x81, 0x80, 0x07, 0x00, 0x00, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
31 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x80, 0x07, 0x00, 0x02, 0x03, 0x03, 0x03, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
32 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x76,
33 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0x76,
34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x84, 0x80, 0x82, 0x04, 0x00, 0x00, 0x00, 0x87, 0x80, 0x05, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x76,
35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x02, 0x84, 0x80, 0x00, 0x00, 0x87, 0x80, 0x07, 0x00, 0x00, 0x85, 0x82, 0x00, 0x00, 0x00, 0x76,
36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x82, 0x04, 0x00, 0x80, 0x05, 0x00, 0x85, 0x03, 0x00, 0x00, 0x00, 0x02, 0x84, 0x00, 0x00, 0x00, 0x76,
37 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
38
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x76,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x80, 0x82, 0x00, 0x00, 0x00, 0x76,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x76,
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x76,
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x02, 0x84, 0x80, 0x05, 0x00, 0x76,
44 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x76,
45 0x00, 0x00, 0x87, 0x80, 0x80, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
46 0x00, 0x83, 0x80, 0x80, 0x01, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
47 0x00, 0x87, 0x80, 0x07, 0x00, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
48 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x03, 0x03, 0x03, 0x03, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
49 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x07, 0x85, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x07, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x76,
50 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x07, 0x00, 0x85, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
51 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x00, 0x02, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
52 0x00, 0x00, 0x00, 0x00, 0x85, 0x07, 0x00, 0x00, 0x00, 0x84, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
53 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x83, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x76,
55
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x05, 0x00, 0x00, 0x76,
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x76,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x83, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x76,
60 0x00, 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x84, 0x80, 0x80, 0x00, 0x76,
61 0x00, 0x00, 0x00, 0x81, 0x07, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x02, 0x03, 0x00, 0x76,
62 0x00, 0x00, 0x85, 0x80, 0x01, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
63 0x00, 0x02, 0x80, 0x80, 0x00, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
64 0x87, 0x80, 0x80, 0x05, 0x00, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
65 0x00, 0x02, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x03, 0x03, 0x03, 0x84, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
66 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x07, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x84, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x76,
67 0x00, 0x00, 0x00, 0x87, 0x80, 0x05, 0x85, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x85, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x76,
68 0x00, 0x00, 0x00, 0x85, 0x07, 0x00, 0x02, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x07, 0x00, 0x00, 0x85, 0x80, 0x04, 0x00, 0x00, 0x00, 0x76,
69 0x00, 0x00, 0x87, 0x80, 0x05, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0x00, 0x84, 0x82, 0x00, 0x00, 0x00, 0x76,
70 0x00, 0x85, 0x80, 0x07, 0x00, 0x00, 0x00, 0x85, 0x80, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x76,
71 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x76,
72
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x05, 0x00, 0x00, 0x76,
75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x81, 0x80, 0x80, 0x05, 0x00, 0x00, 0x76,
76 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x00, 0x87, 0x83, 0x83, 0x83, 0x00, 0x00, 0x87, 0x83, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x76,
77 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x00, 0x76,
78 0x00, 0x00, 0x81, 0x80, 0x03, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x02, 0x80, 0x80, 0x00, 0x76,
79 0x00, 0x87, 0x80, 0x07, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
80 0x87, 0x07, 0x80, 0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
81 0x00, 0x81, 0x07, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x07, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
82 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x03, 0x03, 0x84, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
83 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x80, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
84 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0x01, 0x02, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
85 0x00, 0x00, 0x00, 0x80, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
86 0x00, 0x87, 0x81, 0x07, 0x85, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
87 0x87, 0x80, 0x07, 0x01, 0x85, 0x80, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x04, 0x00, 0x00, 0x00, 0x85, 0x80, 0x83, 0x00, 0x00, 0x00, 0x00, 0x76,
88 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x76,
89
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x05, 0x00, 0x76,
92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x80, 0x80, 0x05, 0x00, 0x76,
93 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x83, 0x83, 0x83, 0x81, 0x82, 0x83, 0x04, 0x00, 0x00, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x76,
94 0x00, 0x00, 0x87, 0x81, 0x80, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x80, 0x80, 0x82, 0x76,
95 0x00, 0x00, 0x81, 0x80, 0x05, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x84, 0x80, 0x76,
96 0x00, 0x84, 0x80, 0x80, 0x00, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x76,
97 0x00, 0x84, 0x07, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
98 0x00, 0x02, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
99 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x80, 0x07, 0x01, 0x00, 0x00, 0x03, 0x03, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
100 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
101 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
102 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x80, 0x05, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
103 0x00, 0x00, 0x87, 0x81, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x03, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
104 0x00, 0x00, 0x81, 0x07, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x07, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
105 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
106
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x05, 0x00, 0x00, 0x76,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x81, 0x80, 0x80, 0x82, 0x00, 0x00, 0x76,
110 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x83, 0x83, 0x83, 0x80, 0x83, 0x04, 0x00, 0x00, 0x00, 0x83, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x76,
111 0x00, 0x00, 0x00, 0x81, 0x80, 0x03, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x80, 0x80, 0x82, 0x00, 0x76,
112 0x00, 0x00, 0x85, 0x80, 0x05, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x84, 0x80, 0x00, 0x76,
113 0x00, 0x83, 0x80, 0x80, 0x00, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
114 0x87, 0x81, 0x80, 0x05, 0x00, 0x85, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
115 0x00, 0x84, 0x01, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x07, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
116 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x02, 0x03, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
117 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
118 0x00, 0x00, 0x00, 0x00, 0x85, 0x05, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
119 0x00, 0x00, 0x00, 0x00, 0x81, 0x05, 0x02, 0x80, 0x05, 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
120 0x00, 0x00, 0x00, 0x81, 0x80, 0x01, 0x00, 0x80, 0x05, 0x00, 0x00, 0x85, 0x80, 0x80, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
121 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x00, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
122 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
123
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x05, 0x00, 0x00, 0x00, 0x76,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x82, 0x00, 0x00, 0x00, 0x76,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x76,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x83, 0x83, 0x83, 0x83, 0x04, 0x83, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x76,
128 0x00, 0x00, 0x00, 0x83, 0x80, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x84, 0x80, 0x01, 0x00, 0x76,
129 0x00, 0x00, 0x81, 0x80, 0x07, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
130 0x00, 0x83, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
131 0x87, 0x80, 0x80, 0x01, 0x00, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
132 0x02, 0x85, 0x05, 0x00, 0x00, 0x02, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
133 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x81, 0x80, 0x80, 0x80, 0x00, 0x00, 0x03, 0x03, 0x80, 0x80, 0x80, 0x82, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
134 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x03, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
135 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x81, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x84, 0x80, 0x04, 0x00, 0x00, 0x81, 0x80, 0x86, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x84, 0x80, 0x82, 0x81, 0x80, 0x01, 0x85, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x00, 0x84, 0x80, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
140
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x05, 0x00, 0x00, 0x00, 0x00, 0x76,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x76,
143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x00, 0x76,
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x76,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x02, 0x80, 0x80, 0x00, 0x00, 0x76,
146 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
147 0x00, 0x00, 0x81, 0x80, 0x01, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
148 0x00, 0x87, 0x80, 0x07, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
149 0x85, 0x80, 0x80, 0x00, 0x00, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
150 0x02, 0x80, 0x01, 0x00, 0x00, 0x00, 0x84, 0x80, 0x80, 0x07, 0x00, 0x03, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x07, 0x03, 0x84, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x80, 0x00, 0x85, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x80, 0x04, 0x00, 0x00, 0x87, 0x83, 0x81, 0x80, 0x87, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x80, 0x05, 0x85, 0x80, 0x80, 0x07, 0x00, 0x85, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x84, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76
157
158 };
159
160 //char *display;
161 //extern int d_file @16396;
162
163
copy_frame(char * spr)164 void copy_frame(char *spr) {
165 #asm
166 pop bc
167 pop de
168 push de ; picture: current frame data
169 push bc
170
171 ld hl,(16396) ; D_FILE, starts with 0x76 (EOL), so we add 1
172 ld bc,33*4+1 ; move the picture away from the top
173 add hl,bc
174 ex de,hl
175 ld bc,416 ; picture: single frame size
176 push hl
177
178 ld hl,$4034 ; FRAMES (counter of the ZX81 video refresh cycles)
179 ld a,(hl) ; get old FRAMES
180 Sync:
181 cp (hl) ; compare to new FRAMES
182 jp z,Sync ; exit after a change is detected, to avoid flicker
183
184 pop hl
185 ldir ; copy picture data
186
187 #endasm
188 }
189
190
main()191 main()
192 {
193 int x, y, a ,b;
194 int speed, flg;
195
196 //display=d_file+1;
197 // Approx. way to collapse the display file,
198 // possible way for direct video memory access from C
199 //memset(display,0x76,693);
200
201 speed=300;
202 flg=0;
203 while (1) {
204 for(y=0 ; y<8 ; y++) {
205 copy_frame(horseg+(416*y));
206
207 for (x=0; x<(speed/3); x++) {
208 if (getk() & !flg) { speed/=2; flg=1; }
209 if (!getk()) flg=0;
210 }
211 speed++;
212 }
213 }
214
215 }
216
217