================================================================================
                 'JUMPING JACK' (ZX SPECTRUM) - DISASSEMBLY
                  Chris Ward, 2012 (cjw116@googlemail.com)
                  Original game (c) 1983 Imagine Software
================================================================================

This is file 1 of 4:

    *1) JJLoader.txt       Commented RAM disassembly of loader program with all
                           addresses & object code

     2) JJLoader.asm       Address-independent assembler source file of above -
                           can be reassembled at any address

     3) JJGame.txt         Commented RAM disassembly of game with all addresses
                           & object code. Also a list of useful POKES.

     4) JJGame.asm         Address-independent assembler source file of above -
                           can be reassembled at any address


NB: All mistakes are mine. Please forgive the amount of comments and the way
the files are formatted. I've never disassembled anything before and this
worked for me! Hope it is of interest to someone.

The .asm files have been tested with Pasmo (http://pasmo.speccy.org/) and
they produce exact binary matches of the original.

Enjoy!

================================================================================

The loader is a 4 line BASIC program:

1   REM [2700 BYTES]

Line 1 is a REM statement holding 2700 bytes of machine code. With nothing else
in the machine, the BASIC program is loaded into address 5ccbh. This means the
machine code resides at 5cd0h (after the 5 bytes used by BASIC to store the line
number (2), the length of the line (2) and the REM statement (1) itself).

2   [0x11, 0x07, 0x10, 0x07] BORDER 7: CLEAR 32767: PRINT INK 0; PAPER 7;
    FLASH 1; AT 16,7; "LEAVE TAPE RUNNING"; AT 5,8; FLASH 0; "IMAGINE SOFTWARE";
    AT 8,12; "presents"; PAUSE 100: RANDOMIZE USR 25046

Line 2 starts with 4 hidden control characters which equate to PAPER 7, INK 7.
On a 16/48K Spectrum, this makes the output from LIST invisible. POKE 26468,0
will change the 4th (ink) byte back to black. On any other Spectrum, the BASIC
editor will ignore these bytes so listings are visible.
The rest of the line clears the memory and PRINTs some text before calling the
machine code entry point at address 25046 (61d6h).

3   CLEAR 65535: LOAD "" CODE

4   SAVE "J'PING J'K" LINE 1: PAUSE 350: RANDOMIZE USR 54000: GO TO 4

Lines 3 and 4 are never used - possibly left over from development?

Disassembly of the machine code in the REM statement follows:

================================================================================

; DATA - GFX definitions of the big letters.
;
; Each big letter is made up of a rectangle of cells (each cell 8x8 pixels).
; Each cell is defined by 8 bytes - each byte represeting the bit definitions
; of the 8 pixels in each row.

JData:         ; "J" (Width 3, Height 5)

; Cell (0,0)
5cd0 00        db      00000000b
5cd1 00        db      00000000b
5cd2 00        db      00000000b
5cd3 00        db      00000000b
5cd4 00        db      00000000b
5cd5 00        db      00000000b
5cd6 00        db      00000000b
5cd7 00        db      00000000b

; Cell (0,1)
5cd8 3f        db      00111111b
5cd9 3f        db      00111111b
5cda fc        db      11111100b
5cdb fc        db      11111100b
5cdc ff        db      11111111b
5cdd ff        db      11111111b
5cde f0        db      11110000b
5cdf f0        db      11110000b

; Cell (0,2)
5ce0 00        db      00000000b
5ce1 00        db      00000000b
5ce2 c0        db      11000000b
5ce3 c0        db      11000000b
5ce4 f0        db      11110000b
5ce5 f0        db      11110000b
5ce6 c0        db      11000000b
5ce7 c0        db      11000000b

; Cell (1,0)
5ce8 00        db      00000000b
5ce9 00        db      00000000b
5cea 00        db      00000000b
5ceb 00        db      00000000b
5cec 3f        db      00111111b
5ced 3f        db      00111111b
5cee 00        db      00000000b
5cef 00        db      00000000b

; Cell (1,1)
5cf0 3f        db      00111111b
5cf1 3f        db      00111111b
5cf2 0c        db      00001100b
5cf3 0c        db      00001100b
5cf4 ff        db      11111111b
5cf5 ff        db      11111111b
5cf6 0c        db      00001100b
5cf7 0c        db      00001100b

; Cell (1,2)
5cf8 00        db      00000000b
5cf9 00        db      00000000b
5cfa 00        db      00000000b
5cfb 00        db      00000000b
5cfc ff        db      11111111b
5cfd ff        db      11111111b
5cfe 00        db      00000000b
5cff 00        db      00000000b

; Cell (2,0)
5d00 00        db      00000000b
5d01 00        db      00000000b
5d02 00        db      00000000b
5d03 00        db      00000000b
5d04 00        db      00000000b
5d05 00        db      00000000b
5d06 00        db      00000000b
5d07 00        db      00000000b

; Cell (2,1)
5d08 0c        db      00001100b
5d09 0c        db      00001100b
5d0a 0c        db      00001100b
5d0b 0c        db      00001100b
5d0c 0c        db      00001100b
5d0d 0c        db      00001100b
5d0e 0c        db      00001100b
5d0f 0c        db      00001100b

; Cell (2,2)
5d10 00        db      00000000b
5d11 00        db      00000000b
5d12 00        db      00000000b
5d13 00        db      00000000b
5d14 00        db      00000000b
5d15 00        db      00000000b
5d16 00        db      00000000b
5d17 00        db      00000000b

; Cell (3,0)
5d18 00        db      00000000b
5d19 00        db      00000000b
5d1a 00        db      00000000b
5d1b 00        db      00000000b
5d1c 00        db      00000000b
5d1d 00        db      00000000b
5d1e 00        db      00000000b
5d1f 00        db      00000000b

; Cell (3,1)
5d20 0c        db      00001100b
5d21 0c        db      00001100b
5d22 0c        db      00001100b
5d23 0c        db      00001100b
5d24 0c        db      00001100b
5d25 0c        db      00001100b
5d26 0c        db      00001100b
5d27 0c        db      00001100b

; Cell (3,2)
5d28 00        db      00000000b
5d29 00        db      00000000b
5d2a 00        db      00000000b
5d2b 00        db      00000000b
5d2c 00        db      00000000b
5d2d 00        db      00000000b
5d2e 00        db      00000000b
5d2f 00        db      00000000b

; Cell (4,0)
5d30 00        db      00000000b
5d31 00        db      00000000b
5d32 00        db      00000000b
5d33 00        db      00000000b
5d34 ff        db      11111111b
5d35 ff        db      11111111b
5d36 c0        db      11000000b
5d37 c0        db      11000000b

; Cell (4,1)
5d38 0c        db      00001100b
5d39 0c        db      00001100b
5d3a 0c        db      00001100b
5d3b 0c        db      00001100b
5d3c fc        db      11111100b
5d3d fc        db      11111100b
5d3e 00        db      00000000b
5d3f 00        db      00000000b

; Cell (4,2)
5d40 00        db      00000000b
5d41 00        db      00000000b
5d42 00        db      00000000b
5d43 00        db      00000000b
5d44 00        db      00000000b
5d45 00        db      00000000b
5d46 00        db      00000000b
5d47 00        db      00000000b

UData:         ; "U" (Width 3, Height 3)

; Cell (0,0)
5d48 00        db      00000000b
5d49 00        db      00000000b
5d4a 00        db      00000000b
5d4b 00        db      00000000b
5d4c 00        db      00000000b
5d4d 00        db      00000000b
5d4e 00        db      00000000b
5d4f 00        db      00000000b

; Cell (0,1)
5d50 00        db      00000000b
5d51 00        db      00000000b
5d52 00        db      00000000b
5d53 00        db      00000000b
5d54 0c        db      00001100b
5d55 0c        db      00001100b
5d56 0c        db      00001100b
5d57 0c        db      00001100b

; Cell (0,2)
5d58 00        db      00000000b
5d59 00        db      00000000b
5d5a 0f        db      00001111b
5d5b 0f        db      00001111b
5d5c 03        db      00000011b
5d5d 03        db      00000011b
5d5e 03        db      00000011b
5d5f 03        db      00000011b

; Cell (1,0)
5d60 00        db      00000000b
5d61 00        db      00000000b
5d62 00        db      00000000b
5d63 00        db      00000000b
5d64 0c        db      00001100b
5d65 0c        db      00001100b
5d66 3f        db      00111111b
5d67 3f        db      00111111b

; Cell (1,1)
5d68 0c        db      00001100b
5d69 0c        db      00001100b
5d6a 0c        db      00001100b
5d6b 0c        db      00001100b
5d6c 0c        db      00001100b
5d6d 0c        db      00001100b
5d6e 0c        db      00001100b
5d6f 0c        db      00001100b

; Cell (1,2)
5d70 03        db      00000011b
5d71 03        db      00000011b
5d72 03        db      00000011b
5d73 03        db      00000011b
5d74 03        db      00000011b
5d75 03        db      00000011b
5d76 03        db      00000011b
5d77 03        db      00000011b

; Cell (2,0)
5d78 cc        db      11001100b
5d79 cc        db      11001100b
5d7a fc        db      11111100b
5d7b fc        db      11111100b
5d7c ff        db      11111111b
5d7d ff        db      11111111b
5d7e 3f        db      00111111b
5d7f 3f        db      00111111b

; Cell (2,1)
5d80 cc        db      11001100b
5d81 cc        db      11001100b
5d82 ff        db      11111111b
5d83 ff        db      11111111b
5d84 c0        db      11000000b
5d85 c0        db      11000000b
5d86 00        db      00000000b
5d87 00        db      00000000b

; Cell (2,2)
5d88 03        db      00000011b
5d89 03        db      00000011b
5d8a ff        db      11111111b
5d8b ff        db      11111111b
5d8c 00        db      00000000b
5d8d 00        db      00000000b
5d8e 00        db      00000000b
5d8f 00        db      00000000b

MData:         ; "M" (Width 3, Height 3)

; Cell (0,0)
5d90 3f        db      00111111b
5d91 3f        db      00111111b
5d92 ff        db      11111111b
5d93 ff        db      11111111b
5d94 fc        db      11111100b
5d95 fc        db      11111100b
5d96 cc        db      11001100b
5d97 cc        db      11001100b

; Cell (0,1)
5d98 00        db      00000000b
5d99 00        db      00000000b
5d9a c0        db      11000000b
5d9b c0        db      11000000b
5d9c ff        db      11111111b
5d9d ff        db      11111111b
5d9e cc        db      11001100b
5d9f cc        db      11001100b

; Cell (0,2)
5da0 00        db      00000000b
5da1 00        db      00000000b
5da2 00        db      00000000b
5da3 00        db      00000000b
5da4 ff        db      11111111b
5da5 ff        db      11111111b
5da6 c3        db      11000011b
5da7 c3        db      11000011b

; Cell (1,0)
5da8 3f        db      00111111b
5da9 3f        db      00111111b
5daa 0c        db      00001100b
5dab 0c        db      00001100b
5dac 00        db      00000000b
5dad 00        db      00000000b
5dae 00        db      00000000b
5daf 00        db      00000000b

; Cell (1,1)
5db0 0c        db      00001100b
5db1 0c        db      00001100b
5db2 30        db      00110000b
5db3 30        db      00110000b
5db4 30        db      00110000b
5db5 30        db      00110000b
5db6 c0        db      11000000b
5db7 c0        db      11000000b

; Cell (1,2)
5db8 c3        db      11000011b
5db9 c3        db      11000011b
5dba c3        db      11000011b
5dbb c3        db      11000011b
5dbc c3        db      11000011b
5dbd c3        db      11000011b
5dbe c3        db      11000011b
5dbf c3        db      11000011b

; Cell (2,0)
5dc0 00        db      00000000b
5dc1 00        db      00000000b
5dc2 00        db      00000000b
5dc3 00        db      00000000b
5dc4 00        db      00000000b
5dc5 00        db      00000000b
5dc6 00        db      00000000b
5dc7 00        db      00000000b

; Cell (2,1)
5dc8 c0        db      11000000b
5dc9 c0        db      11000000b
5dca c0        db      11000000b
5dcb c0        db      11000000b
5dcc 00        db      00000000b
5dcd 00        db      00000000b
5dce 00        db      00000000b
5dcf 00        db      00000000b

; Cell (2,2)
5dd0 c3        db      11000011b
5dd1 c3        db      11000011b
5dd2 c3        db      11000011b
5dd3 c3        db      11000011b
5dd4 0f        db      00001111b
5dd5 0f        db      00001111b
5dd6 00        db      00000000b
5dd7 00        db      00000000b

PData:         ; "P" (Width 3, Height 5)

; Cell (0,0)
5dd8 3f        db      00111111b
5dd9 3f        db      00111111b
5dda fc        db      11111100b
5ddb fc        db      11111100b
5ddc ff        db      11111111b
5ddd ff        db      11111111b
5dde f0        db      11110000b
5ddf f0        db      11110000b

; Cell (0,1)
5de0 00        db      00000000b
5de1 00        db      00000000b
5de2 c0        db      11000000b
5de3 c0        db      11000000b
5de4 f0        db      11110000b
5de5 f0        db      11110000b
5de6 c0        db      11000000b
5de7 c0        db      11000000b

; Cell (0,2)
5de8 00        db      00000000b
5de9 00        db      00000000b
5dea 00        db      00000000b
5deb 00        db      00000000b
5dec 00        db      00000000b
5ded 00        db      00000000b
5dee 00        db      00000000b
5def 00        db      00000000b

; Cell (1,0)
5df0 3f        db      00111111b
5df1 3f        db      00111111b
5df2 0c        db      00001100b
5df3 0c        db      00001100b
5df4 0c        db      00001100b
5df5 0c        db      00001100b
5df6 0f        db      00001111b
5df7 0f        db      00001111b

; Cell (1,1)
5df8 0c        db      00001100b
5df9 0c        db      00001100b
5dfa 33        db      00110011b
5dfb 33        db      00110011b
5dfc c0        db      11000000b
5dfd c0        db      11000000b
5dfe 00        db      00000000b
5dff 00        db      00000000b

; Cell (1,2)
5e00 00        db      00000000b
5e01 00        db      00000000b
5e02 00        db      00000000b
5e03 00        db      00000000b
5e04 c0        db      11000000b
5e05 c0        db      11000000b
5e06 30        db      00110000b
5e07 30        db      00110000b

; Cell (2,0)
5e08 0f        db      00001111b
5e09 0f        db      00001111b
5e0a 0c        db      00001100b
5e0b 0c        db      00001100b
5e0c 0c        db      00001100b
5e0d 0c        db      00001100b
5e0e 0c        db      00001100b
5e0f 0c        db      00001100b

; Cell (2,1)
5e10 00        db      00000000b
5e11 00        db      00000000b
5e12 c0        db      11000000b
5e13 c0        db      11000000b
5e14 33        db      00110011b
5e15 33        db      00110011b
5e16 0c        db      00001100b
5e17 0c        db      00001100b

; Cell (2,2)
5e18 30        db      00110000b
5e19 30        db      00110000b
5e1a c0        db      11000000b
5e1b c0        db      11000000b
5e1c 00        db      00000000b
5e1d 00        db      00000000b
5e1e 00        db      00000000b
5e1f 00        db      00000000b

; Cell (3,0)
5e20 0c        db      00001100b
5e21 0c        db      00001100b
5e22 0c        db      00001100b
5e23 0c        db      00001100b
5e24 0c        db      00001100b
5e25 0c        db      00001100b
5e26 0c        db      00001100b
5e27 0c        db      00001100b

; Cell (3,1)
5e28 00        db      00000000b
5e29 00        db      00000000b
5e2a 00        db      00000000b
5e2b 00        db      00000000b
5e2c 00        db      00000000b
5e2d 00        db      00000000b
5e2e 00        db      00000000b
5e2f 00        db      00000000b

; Cell (3,2)
5e30 00        db      00000000b
5e31 00        db      00000000b
5e32 00        db      00000000b
5e33 00        db      00000000b
5e34 00        db      00000000b
5e35 00        db      00000000b
5e36 00        db      00000000b
5e37 00        db      00000000b

; Cell (4,0)
5e38 0c        db      00001100b
5e39 0c        db      00001100b
5e3a 0f        db      00001111b
5e3b 0f        db      00001111b
5e3c 00        db      00000000b
5e3d 00        db      00000000b
5e3e 00        db      00000000b
5e3f 00        db      00000000b

; Cell (4,1)
5e40 00        db      00000000b
5e41 00        db      00000000b
5e42 00        db      00000000b
5e43 00        db      00000000b
5e44 00        db      00000000b
5e45 00        db      00000000b
5e46 00        db      00000000b
5e47 00        db      00000000b

; Cell (4,2)
5e48 00        db      00000000b
5e49 00        db      00000000b
5e4a 00        db      00000000b
5e4b 00        db      00000000b
5e4c 00        db      00000000b
5e4d 00        db      00000000b
5e4e 00        db      00000000b
5e4f 00        db      00000000b

IData:         ; "I" (Width 2, Height 4)

; Cell (0,0)
5e50 0f        db      00001111b
5e51 0f        db      00001111b
5e52 33        db      00110011b
5e53 33        db      00110011b
5e54 3c        db      00111100b
5e55 3c        db      00111100b
5e56 30        db      00110000b
5e57 30        db      00110000b

; Cell (0,1)
5e58 c0        db      11000000b
5e59 c0        db      11000000b
5e5a 30        db      00110000b
5e5b 30        db      00110000b
5e5c f0        db      11110000b
5e5d f0        db      11110000b
5e5e 30        db      00110000b
5e5f 30        db      00110000b

; Cell (1,0)
5e60 0f        db      00001111b
5e61 0f        db      00001111b
5e62 03        db      00000011b
5e63 03        db      00000011b
5e64 03        db      00000011b
5e65 03        db      00000011b
5e66 03        db      00000011b
5e67 03        db      00000011b

; Cell (1,1)
5e68 c0        db      11000000b
5e69 c0        db      11000000b
5e6a 00        db      00000000b
5e6b 00        db      00000000b
5e6c 00        db      00000000b
5e6d 00        db      00000000b
5e6e 00        db      00000000b
5e6f 00        db      00000000b

; Cell (2,0)
5e70 03        db      00000011b
5e71 03        db      00000011b
5e72 03        db      00000011b
5e73 03        db      00000011b
5e74 03        db      00000011b
5e75 03        db      00000011b
5e76 03        db      00000011b
5e77 03        db      00000011b

; Cell (2,1)
5e78 00        db      00000000b
5e79 00        db      00000000b
5e7a 00        db      00000000b
5e7b 00        db      00000000b
5e7c 00        db      00000000b
5e7d 00        db      00000000b
5e7e 00        db      00000000b
5e7f 00        db      00000000b

; Cell (3,0)
5e80 03        db      00000011b
5e81 03        db      00000011b
5e82 0f        db      00001111b
5e83 0f        db      00001111b
5e84 00        db      00000000b
5e85 00        db      00000000b
5e86 00        db      00000000b
5e87 00        db      00000000b

; Cell (3,1)
5e88 00        db      00000000b
5e89 00        db      00000000b
5e8a c0        db      11000000b
5e8b c0        db      11000000b
5e8c 00        db      00000000b
5e8d 00        db      00000000b
5e8e 00        db      00000000b
5e8f 00        db      00000000b

NData:         ; "N" (Width 3, Height 3)

; Cell (0,0)
5e90 3f        db      00111111b
5e91 3f        db      00111111b
5e92 ff        db      11111111b
5e93 ff        db      11111111b
5e94 fc        db      11111100b
5e95 fc        db      11111100b
5e96 cc        db      11001100b
5e97 cc        db      11001100b

; Cell (0,1)
5e98 00        db      00000000b
5e99 00        db      00000000b
5e9a c0        db      11000000b
5e9b c0        db      11000000b
5e9c ff        db      11111111b
5e9d ff        db      11111111b
5e9e cc        db      11001100b
5e9f cc        db      11001100b

; Cell (0,2)
5ea0 00        db      00000000b
5ea1 00        db      00000000b
5ea2 00        db      00000000b
5ea3 00        db      00000000b
5ea4 ff        db      11111111b
5ea5 ff        db      11111111b
5ea6 03        db      00000011b
5ea7 03        db      00000011b

; Cell (1,0)
5ea8 3f        db      00111111b
5ea9 3f        db      00111111b
5eaa 0c        db      00001100b
5eab 0c        db      00001100b
5eac 00        db      00000000b
5ead 00        db      00000000b
5eae 00        db      00000000b
5eaf 00        db      00000000b

; Cell (1,1)
5eb0 0c        db      00001100b
5eb1 0c        db      00001100b
5eb2 0c        db      00001100b
5eb3 0c        db      00001100b
5eb4 0c        db      00001100b
5eb5 0c        db      00001100b
5eb6 0c        db      00001100b
5eb7 0c        db      00001100b

; Cell (1,2)
5eb8 03        db      00000011b
5eb9 03        db      00000011b
5eba 03        db      00000011b
5ebb 03        db      00000011b
5ebc 03        db      00000011b
5ebd 03        db      00000011b
5ebe 03        db      00000011b
5ebf 03        db      00000011b

; Cell (2,0)
5ec0 00        db      00000000b
5ec1 00        db      00000000b
5ec2 00        db      00000000b
5ec3 00        db      00000000b
5ec4 00        db      00000000b
5ec5 00        db      00000000b
5ec6 00        db      00000000b
5ec7 00        db      00000000b

; Cell (2,1)
5ec8 0c        db      00001100b
5ec9 0c        db      00001100b
5eca 0c        db      00001100b
5ecb 0c        db      00001100b
5ecc 00        db      00000000b
5ecd 00        db      00000000b
5ece 00        db      00000000b
5ecf 00        db      00000000b

; Cell (2,2)
5ed0 03        db      00000011b
5ed1 03        db      00000011b
5ed2 03        db      00000011b
5ed3 03        db      00000011b
5ed4 0f        db      00001111b
5ed5 0f        db      00001111b
5ed6 00        db      00000000b
5ed7 00        db      00000000b

GData:         ; "G" (Width 3, Height 4)

; Cell (0,0)
5ed8 00        db      00000000b
5ed9 00        db      00000000b
5eda 00        db      00000000b
5edb 00        db      00000000b
5edc 00        db      00000000b
5edd 00        db      00000000b
5ede 00        db      00000000b
5edf 00        db      00000000b

; Cell (0,1)
5ee0 0f        db      00001111b
5ee1 0f        db      00001111b
5ee2 33        db      00110011b
5ee3 33        db      00110011b
5ee4 ff        db      11111111b
5ee5 ff        db      11111111b
5ee6 30        db      00110000b
5ee7 30        db      00110000b

; Cell (0,2)
5ee8 c0        db      11000000b
5ee9 c0        db      11000000b
5eea f0        db      11110000b
5eeb f0        db      11110000b
5eec f0        db      11110000b
5eed f0        db      11110000b
5eee f0        db      11110000b
5eef f0        db      11110000b

; Cell (1,0)
5ef0 03        db      00000011b
5ef1 03        db      00000011b
5ef2 0c        db      00001100b
5ef3 0c        db      00001100b
5ef4 30        db      00110000b
5ef5 30        db      00110000b
5ef6 c0        db      11000000b
5ef7 c0        db      11000000b

; Cell (1,1)
5ef8 0f        db      00001111b
5ef9 0f        db      00001111b
5efa c3        db      11000011b
5efb c3        db      11000011b
5efc 33        db      00110011b
5efd 33        db      00110011b
5efe 0f        db      00001111b
5eff 0f        db      00001111b

; Cell (1,2)
5f00 c0        db      11000000b
5f01 c0        db      11000000b
5f02 00        db      00000000b
5f03 00        db      00000000b
5f04 00        db      00000000b
5f05 00        db      00000000b
5f06 00        db      00000000b
5f07 00        db      00000000b

; Cell (2,0)
5f08 c0        db      11000000b
5f09 c0        db      11000000b
5f0a 30        db      00110000b
5f0b 30        db      00110000b
5f0c 0c        db      00001100b
5f0d 0c        db      00001100b
5f0e 03        db      00000011b
5f0f 03        db      00000011b

; Cell (2,1)
5f10 0f        db      00001111b
5f11 0f        db      00001111b
5f12 33        db      00110011b
5f13 33        db      00110011b
5f14 c3        db      11000011b
5f15 c3        db      11000011b
5f16 03        db      00000011b
5f17 03        db      00000011b

; Cell (2,2)
5f18 00        db      00000000b
5f19 00        db      00000000b
5f1a 00        db      00000000b
5f1b 00        db      00000000b
5f1c 00        db      00000000b
5f1d 00        db      00000000b
5f1e 00        db      00000000b
5f1f 00        db      00000000b

; Cell (3,0)
5f20 00        db      00000000b
5f21 00        db      00000000b
5f22 00        db      00000000b
5f23 00        db      00000000b
5f24 30        db      00110000b
5f25 33        db      00110011b
5f26 3f        db      00111111b
5f27 3c        db      00111100b

; Cell (3,1)
5f28 03        db      00000011b
5f29 03        db      00000011b
5f2a 03        db      00000011b
5f2b 03        db      00000011b
5f2c 3f        db      00111111b
5f2d ff        db      11111111b
5f2e c0        db      11000000b
5f2f 00        db      00000000b

; Cell (3,2)
5f30 00        db      00000000b
5f31 00        db      00000000b
5f32 00        db      00000000b
5f33 00        db      00000000b
5f34 00        db      00000000b
5f35 00        db      00000000b
5f36 00        db      00000000b
5f37 00        db      00000000b

AData:         ; "A" (Width 2, Height 4)

; Cell (0,0)
5f38 00        db      00000000b
5f39 00        db      00000000b
5f3a 03        db      00000011b
5f3b 03        db      00000011b
5f3c 0f        db      00001111b
5f3d 0f        db      00001111b
5f3e 03        db      00000011b
5f3f 03        db      00000011b

; Cell (0,1)
5f40 fc        db      11111100b
5f41 fc        db      11111100b
5f42 3f        db      00111111b
5f43 3f        db      00111111b
5f44 ff        db      11111111b
5f45 ff        db      11111111b
5f46 0f        db      00001111b
5f47 0f        db      00001111b

; Cell (1,0)
5f48 00        db      00000000b
5f49 00        db      00000000b
5f4a 00        db      00000000b
5f4b 00        db      00000000b
5f4c 03        db      00000011b
5f4d 03        db      00000011b
5f4e 0c        db      00001100b
5f4f 0c        db      00001100b

; Cell (1,1)
5f50 fc        db      11111100b
5f51 fc        db      11111100b
5f52 30        db      00110000b
5f53 30        db      00110000b
5f54 f0        db      11110000b
5f55 f0        db      11110000b
5f56 30        db      00110000b
5f57 30        db      00110000b

; Cell (2,0)
5f58 30        db      00110000b
5f59 30        db      00110000b
5f5a 30        db      00110000b
5f5b 30        db      00110000b
5f5c c0        db      11000000b
5f5d c0        db      11000000b
5f5e c0        db      11000000b
5f5f c0        db      11000000b

; Cell (2,1)
5f60 30        db      00110000b
5f61 30        db      00110000b
5f62 30        db      00110000b
5f63 30        db      00110000b
5f64 30        db      00110000b
5f65 30        db      00110000b
5f66 30        db      00110000b
5f67 30        db      00110000b

; Cell (3,0)
5f68 c0        db      11000000b
5f69 c0        db      11000000b
5f6a ff        db      11111111b
5f6b ff        db      11111111b
5f6c 00        db      00000000b
5f6d 00        db      00000000b
5f6e 00        db      00000000b
5f6f 00        db      00000000b

; Cell (3,1)
5f70 30        db      00110000b
5f71 30        db      00110000b
5f72 fc        db      11111100b
5f73 fc        db      11111100b
5f74 00        db      00000000b
5f75 00        db      00000000b
5f76 00        db      00000000b
5f77 00        db      00000000b

CData:         ; "C" (Width 3, Height 4)

; Cell (0,0)
5f78 3f        db      00111111b
5f79 3f        db      00111111b
5f7a fc        db      11111100b
5f7b fc        db      11111100b
5f7c ff        db      11111111b
5f7d ff        db      11111111b
5f7e f0        db      11110000b
5f7f f0        db      11110000b

; Cell (0,1)
5f80 00        db      00000000b
5f81 00        db      00000000b
5f82 c0        db      11000000b
5f83 c0        db      11000000b
5f84 f0        db      11110000b
5f85 f0        db      11110000b
5f86 c0        db      11000000b
5f87 c0        db      11000000b

; Cell (0,2)
5f88 00        db      00000000b
5f89 00        db      00000000b
5f8a 00        db      00000000b
5f8b 00        db      00000000b
5f8c 00        db      00000000b
5f8d 00        db      00000000b
5f8e 00        db      00000000b
5f8f 00        db      00000000b

; Cell (1,0)
5f90 3f        db      00111111b
5f91 3f        db      00111111b
5f92 0c        db      00001100b
5f93 0c        db      00001100b
5f94 0f        db      00001111b
5f95 0f        db      00001111b
5f96 0c        db      00001100b
5f97 0c        db      00001100b

; Cell (1,1)
5f98 00        db      00000000b
5f99 00        db      00000000b
5f9a 00        db      00000000b
5f9b 00        db      00000000b
5f9c ff        db      11111111b
5f9d ff        db      11111111b
5f9e 00        db      00000000b
5f9f 00        db      00000000b

; Cell (1,2)
5fa0 00        db      00000000b
5fa1 00        db      00000000b
5fa2 00        db      00000000b
5fa3 00        db      00000000b
5fa4 00        db      00000000b
5fa5 00        db      00000000b
5fa6 00        db      00000000b
5fa7 00        db      00000000b

; Cell (2,0)
5fa8 0c        db      00001100b
5fa9 0c        db      00001100b
5faa 0c        db      00001100b
5fab 0c        db      00001100b
5fac 0c        db      00001100b
5fad 0c        db      00001100b
5fae 0c        db      00001100b
5faf 0c        db      00001100b

; Cell (2,1)
5fb0 00        db      00000000b
5fb1 00        db      00000000b
5fb2 00        db      00000000b
5fb3 00        db      00000000b
5fb4 00        db      00000000b
5fb5 00        db      00000000b
5fb6 00        db      00000000b
5fb7 00        db      00000000b

; Cell (2,2)
5fb8 00        db      00000000b
5fb9 00        db      00000000b
5fba 00        db      00000000b
5fbb 00        db      00000000b
5fbc 00        db      00000000b
5fbd 00        db      00000000b
5fbe 00        db      00000000b
5fbf 00        db      00000000b

; Cell (3,0)
5fc0 0c        db      00001100b
5fc1 0c        db      00001100b
5fc2 0f        db      00001111b
5fc3 0f        db      00001111b
5fc4 00        db      00000000b
5fc5 00        db      00000000b
5fc6 00        db      00000000b
5fc7 00        db      00000000b

; Cell (3,1)
5fc8 00        db      00000000b
5fc9 00        db      00000000b
5fca ff        db      11111111b
5fcb ff        db      11111111b
5fcc 00        db      00000000b
5fcd 00        db      00000000b
5fce 00        db      00000000b
5fcf 00        db      00000000b

; Cell (3,2)
5fd0 c0        db      11000000b
5fd1 c0        db      11000000b
5fd2 c0        db      11000000b
5fd3 c0        db      11000000b
5fd4 00        db      00000000b
5fd5 00        db      00000000b
5fd6 00        db      00000000b
5fd7 00        db      00000000b

KData:         ; "K" (Width 3, Height 4)

; Cell (0,0)
5fd8 3f        db      00111111b
5fd9 3f        db      00111111b
5fda fc        db      11111100b
5fdb fc        db      11111100b
5fdc ff        db      11111111b
5fdd ff        db      11111111b
5fde f0        db      11110000b
5fdf f0        db      11110000b

; Cell (0,1)
5fe0 00        db      00000000b
5fe1 00        db      00000000b
5fe2 c0        db      11000000b
5fe3 c0        db      11000000b
5fe4 f0        db      11110000b
5fe5 f0        db      11110000b
5fe6 c0        db      11000000b
5fe7 c0        db      11000000b

; Cell (0,2)
5fe8 00        db      00000000b
5fe9 00        db      00000000b
5fea 00        db      00000000b
5feb 00        db      00000000b
5fec 00        db      00000000b
5fed 00        db      00000000b
5fee 00        db      00000000b
5fef 00        db      00000000b

; Cell (1,0)
5ff0 3f        db      00111111b
5ff1 3f        db      00111111b
5ff2 0c        db      00001100b
5ff3 0c        db      00001100b
5ff4 0c        db      00001100b
5ff5 0c        db      00001100b
5ff6 0c        db      00001100b
5ff7 0c        db      00001100b

; Cell (1,1)
5ff8 00        db      00000000b
5ff9 00        db      00000000b
5ffa 00        db      00000000b
5ffb 00        db      00000000b
5ffc 03        db      00000011b
5ffd 0f        db      00001111b
5ffe 3c        db      00111100b
5fff f0        db      11110000b

; Cell (1,2)
6000 00        db      00000000b
6001 00        db      00000000b
6002 00        db      00000000b
6003 00        db      00000000b
6004 00        db      00000000b
6005 00        db      00000000b
6006 00        db      00000000b
6007 00        db      00000000b

; Cell (2,0)
6008 0f        db      00001111b
6009 0f        db      00001111b
600a 0c        db      00001100b
600b 0c        db      00001100b
600c 0f        db      00001111b
600d 0f        db      00001111b
600e 0c        db      00001100b
600f 0c        db      00001100b

; Cell (2,1)
6010 c0        db      11000000b
6011 00        db      00000000b
6012 00        db      00000000b
6013 00        db      00000000b
6014 00        db      00000000b
6015 00        db      00000000b
6016 c0        db      11000000b
6017 c0        db      11000000b

; Cell (2,2)
6018 00        db      00000000b
6019 00        db      00000000b
601a 00        db      00000000b
601b 00        db      00000000b
601c 00        db      00000000b
601d 00        db      00000000b
601e 00        db      00000000b
601f 00        db      00000000b

; Cell (3,0)
6020 0c        db      00001100b
6021 0c        db      00001100b
6022 0c        db      00001100b
6023 0c        db      00001100b
6024 0c        db      00001100b
6025 0c        db      00001100b
6026 0f        db      00001111b
6027 0f        db      00001111b

; Cell (3,1)
6028 30        db      00110000b
6029 30        db      00110000b
602a 0c        db      00001100b
602b 0c        db      00001100b
602c 03        db      00000011b
602d 03        db      00000011b
602e 00        db      00000000b
602f 00        db      00000000b

; Cell (3,2)
6030 00        db      00000000b
6031 00        db      00000000b
6032 00        db      00000000b
6033 00        db      00000000b
6034 00        db      00000000b
6035 00        db      00000000b
6036 f0        db      11110000b
6037 f0        db      11110000b




InitScreen:    ; Clears the screen and sets the desired attributes

6038 3e07      ld      a,07h
603a d3fe      out     (0feh),a    ; Set the border to white

603c 3e39      ld      a,00111001b ; A=Attributes (Paper White, Ink Blue)
603e cd4260    call    ClrScreen   ; 6042h
6041 c9        ret




ClrScreen:

6042 210040    ld      hl,4000h    ; HL points to screen memory
6045 01ff17    ld      bc,17ffh    ; Set counter to size of screen memory
6048 110140    ld      de,4001h    ; DE points to second byte of screen memory
604b 3600      ld      (hl),00h    ; Zero first byte of screen memory
604d edb0      ldir                ; Repeat (Zero screen memory)

; Set attributes

604f 210058    ld      hl,5800h    ; HL points to display attributes
6052 01ff02    ld      bc,02ffh    ; Set counter to size of attributes
6055 110158    ld      de,5801h    ; DE points to second byte of attributes
6058 77        ld      (hl),a      ; Set first byte of attributes
6059 edb0      ldir                ; Repeat (Fill display attributes)
605b c9        ret




PrintLet:      ; Prints/erases a multi-cell sprite to/from the screen

; This routine is used to print & erase the big gfx letters. Pixels are XOR'd
; onto the screen - so reprinting to the same location will erase an image.
;
; This is also used to print the credits text (where each character is treated
; as a 1x1 cell sprite).
;
; ENTRY:
; HL = Pointer to GFX data to be printed
; DE = Pointer into Display memory - where to print top left cell
; BC = Size of GFX in cells (B=Width, C=Height)

605c d5        push    de          ; Save a copy of current print location
605d c5        push    bc          ; Save a copy of the width, height counter

605e c5        push    bc          ; Another copy (for width)

; Starting painting a cell

605f 0608      ld      b,08h       ; 8 rows of pixels in this cell

; Next row

6061 4e        ld      c,(hl)      ; C=pixel data for this row
6062 1a        ld      a,(de)      ; A=pixels currently on screen at position
6063 a9        xor     c           ; Turn on/off pixels as required
6064 12        ld      (de),a      ; Copy back to Display memory
6065 23        inc     hl          ; HL points to next row of pixel data
6066 14        inc     d           ; Move Display pointer to next pixel row
6067 10f8      djnz    6061h       ; Print next pixel row

; We've painted a complete cell.

6069 c1        pop     bc          ; Retrieve width counter (B)
606a 7a        ld      a,d
606b d608      sub     08h
606d 57        ld      d,a         ; Return Display pointer (DE) to top of cell
606e 13        inc     de          ; Point DE to top of adjacent right cell
606f 10ed      djnz    605eh       ; Paint next horizontal cell

; We've finished painting a row of cells.

6071 c1        pop     bc          ; BC= Width, Height counter
6072 d1        pop     de          ; Reset DE to top of left-most cell in row
6073 7b        ld      a,e
6074 c620      add     a,20h
6076 5f        ld      e,a         ; Point DE to top of cell immediately below
6077 3004      jr      nc,607dh    ; Did we cross screen-third boundary?

6079 7a        ld      a,d         ; If so, adjust DE to point to intended cell
607a c608      add     a,08h       ; i.e add 2048 bytes (800h)
607c 57        ld      d,a

607d 0d        dec     c           ; Decrement height counter
607e 20dc      jr      nz,PrintLet ; Paint next row of cells if req (605ch)

; We've finished painting the last row of cells.

6080 c9        ret




SFXPause:      ; Generates sound effect and briefly pauses

; This is called in between every frame of animation.  Depending on which frame
; has just been drawn, a different note is played.  A short delay is then
; generated before returning.

6081 210f61    ld      hl,BeepCnt  ; Variable to track current frame (610fh)
6084 34        inc     (hl)        ;
6085 7e        ld      a,(hl)      ; We're only interested in last 3 bits, i.e
6086 e607      and     07h         ; counter will return to 0 after 7
6088 07        rlca
6089 07        rlca                ; A=A*4 (this will be the offset to jump)
608a 21b260    ld      hl,60b2h
608d e5        push    hl          ; Make this the return address after beep
608e 329260    ld      (6092h),a   ; Alter the relative jump code to target
6091 18fe      jr      6091h       ; the appropriate routine for current frame

6093 c3bf60    jp      F1Beep      ; 60bfh
6096 00        nop
6097 c3c860    jp      F2Beep      ; 60c8h
609a 00        nop
609b c3d160    jp      F3Beep      ; 60d1h
609e 00        nop
609f c3da60    jp      F4Beep      ; 60dah
60a2 00        nop
60a3 c3e360    jp      F5Beep      ; 60e3h
60a6 00        nop
60a7 c3ec60    jp      F6Beep      ; 60ech
60aa 00        nop
60ab c3f560    jp      F7Beep      ; 60f5h
60ae 00        nop
60af c3fe60    jp      F8Beep      ; 60feh

; Beep done.  Insert delay for animation before returning.

60b2 216b09    ld      hl,096bh
60b5 cdb960    call    Pause       ; 60b9h
60b8 c9        ret




Pause:         ; Generates a software delay

; This is used to insert brief pauses (of varying durations) into the animation.
;
; ENTRY
; HL = Number of times to loop

60b9 2b        dec     hl
60ba 7d        ld      a,l
60bb b4        or      h
60bc 20fb      jr      nz,Pause    ; 60b9h
60be c9        ret




F1Beep:
60bf 219006    ld      hl,0690h
60c2 110200    ld      de,0002h
60c5 c30761    jp      Beep        ; 6107h

F2Beep:
60c8 218405    ld      hl,0584h
60cb 110200    ld      de,0002h
60ce c30761    jp      Beep        ; 6107h

F3Beep:
60d1 21a304    ld      hl,04a3h
60d4 110200    ld      de,0002h
60d7 c30761    jp      Beep        ; 6107h

F4Beep:
60da 21e603    ld      hl,03e6h
60dd 110300    ld      de,0003h
60e0 c30761    jp      Beep        ; 6107h

F5Beep:
60e3 214703    ld      hl,0347h
60e6 110300    ld      de,0003h
60e9 c30761    jp      Beep        ; 6107h

F6Beep:
60ec 21c202    ld      hl,02c2h
60ef 110400    ld      de,0004h
60f2 c30761    jp      Beep        ; 6107h

F7Beep:
60f5 215202    ld      hl,0252h
60f8 110500    ld      de,0005h
60fb c30761    jp      Beep        ; 6107h

F8Beep:
60fe 21f401    ld      hl,01f4h
6101 110600    ld      de,0006h
6104 c30761    jp      Beep        ; 6107h




Beep:          ; Plays a note on the Spectrum's Beeper
;
; ENTRY
; HL = Pitch
; DE = Duration

6107 dde5      push    ix
6109 cdb503    call    03b5h       ; ROM Beeper routine
610c dde1      pop     ix
610e c9        ret




; DATA

BeepCnt:

610f ff        db      ffh         ; Used by SFXPause routine to keep track of
                                   ; current animation frame




; DATA - Animation
;
; There are 9 frames in each animation to bring the groups of big letters to
; their final positions.  The data below gives the addresses in screen memory
; of where to draw each letter for each frame.  The addresses point to the
; intended location for each letter's top left cell.

Frame0:

6110 6d50      dw      506dh       ; "J" AT 19,13
6112 6d50      dw      506dh       ; "U" AT 19,13
6114 af50      dw      50afh       ; "M" AT 21,15
6116 7050      dw      5070h       ; "P" AT 19,16
6118 8d50      dw      508dh       ; "I" AT 20,13
611a ab50      dw      50abh       ; "N" AT 21,11
611c 8f50      dw      508fh       ; "G" AT 20,15
611e 6e50      dw      506eh       ; "J" AT 19,14
6120 8d50      dw      508dh       ; "A" AT 20,13
6122 8d50      dw      508dh       ; "C" AT 20,13
6124 8b50      dw      508bh       ; "K" AT 20,11

Frame1:

6126 4c50      dw      504ch       ; "J" AT 18,12
6128 0d50      dw      500dh       ; "U" AT 16,13
612a 8f50      dw      508fh       ; "M" AT 20,15
612c 7050      dw      5070h       ; "P" AT 19,16
612e 6b50      dw      506bh       ; "I" AT 19,11
6130 8c50      dw      508ch       ; "N" AT 20,12
6132 8e50      dw      508eh       ; "G" AT 20,14
6134 6d50      dw      506dh       ; "J" AT 19,13
6136 8c50      dw      508ch       ; "A" AT 20,12
6138 8f50      dw      508fh       ; "C" AT 20,15
613a 8d50      dw      508dh       ; "K" AT 20,13

Frame2:

613c eb48      dw      48ebh       ; "J" AT 15,11
613e ac48      dw      48ach       ; "U" AT 13,12
6140 2e50      dw      502eh       ; "M" AT 17,14
6142 5050      dw      5050h       ; "P" AT 18,16
6144 2b50      dw      502bh       ; "I" AT 17,11
6146 2c50      dw      502ch       ; "N" AT 17,12
6148 4e50      dw      504eh       ; "G" AT 18,14
614a 6c50      dw      506ch       ; "J" AT 19,12
614c 8d50      dw      508dh       ; "A" AT 20,13
614e 6f50      dw      506fh       ; "C" AT 19,15
6150 7150      dw      5071h       ; "K" AT 19,17

Frame3:

6152 8a48      dw      488ah       ; "J" AT 12,10
6154 6b48      dw      486bh       ; "U" AT 11,11
6156 ed48      dw      48edh       ; "M" AT 15,13
6158 1050      dw      5010h       ; "P" AT 16,16
615a cc48      dw      48cch       ; "I" AT 14,12
615c cd48      dw      48cdh       ; "N" AT 14,13
615e ef48      dw      48efh       ; "G" AT 15,15
6160 2d50      dw      502dh       ; "J" AT 17,13
6162 6e50      dw      506eh       ; "A" AT 19,14
6164 3050      dw      5030h       ; "C" AT 17,16
6166 3250      dw      5032h       ; "K" AT 17,18

Frame4:

6168 0948      dw      4809h       ; "J" AT 8,9
616a 2a48      dw      482ah       ; "U" AT 9,10
616c 8c48      dw      488ch       ; "M" AT 12,12
616e 8f48      dw      488fh       ; "P" AT 12,15
6170 6c48      dw      486ch       ; "I" AT 11,12
6172 8e48      dw      488eh       ; "N" AT 12,14
6174 b048      dw      48b0h       ; "G" AT 13,16
6176 ee48      dw      48eeh       ; "J" AT 15,14
6178 2f50      dw      502fh       ; "A" AT 17,15
617a f148      dw      48f1h       ; "C" AT 15,17
617c f348      dw      48f3h       ; "K" AT 15,19

Frame5:

617e a740      dw      40a7h       ; "J" AT 5,7
6180 0848      dw      4808h       ; "U" AT 8,8
6182 0b48      dw      480bh       ; "M" AT 8,11
6184 2e48      dw      482eh       ; "P" AT 9,14
6186 0d48      dw      480dh       ; "I" AT 8,13
6188 2f48      dw      482fh       ; "N" AT 9,15
618a 5148      dw      4851h       ; "G" AT 10,17
618c ae48      dw      48aeh       ; "J" AT 13,14
618e f048      dw      48f0h       ; "A" AT 15,16
6190 b248      dw      48b2h       ; "C" AT 13,18
6192 b548      dw      48b5h       ; "K" AT 13,21

Frame6:

6194 6540      dw      4065h       ; "J" AT 3,5
6196 c740      dw      40c7h       ; "U" AT 6,7
6198 aa40      dw      40aah       ; "M" AT 5,10
619a cd40      dw      40cdh       ; "P" AT 6,13
619c ae40      dw      40aeh       ; "I" AT 5,14
619e d040      dw      40d0h       ; "N" AT 6,16
61a0 f240      dw      40f2h       ; "G" AT 7,18
61a2 6f48      dw      486fh       ; "J" AT 11,15
61a4 b148      dw      48b1h       ; "A" AT 13,17
61a6 7448      dw      4874h       ; "C" AT 11,20
61a8 7748      dw      4877h       ; "K" AT 11,23

Frame7:

61aa 2340      dw      4023h       ; "J" AT 1,3
61ac 8540      dw      4085h       ; "U" AT 4,5
61ae 6940      dw      4069h       ; "M" AT 3,9
61b0 8c40      dw      408ch       ; "P" AT 4,12
61b2 6f40      dw      406fh       ; "I" AT 3,15
61b4 9140      dw      4091h       ; "N" AT 4,17
61b6 9440      dw      4094h       ; "G" AT 4,20
61b8 3048      dw      4830h       ; "J" AT 9,16
61ba 7348      dw      4873h       ; "A" AT 11,19
61bc 5648      dw      4856h       ; "C" AT 10,22
61be 3948      dw      4839h       ; "K" AT 9,25

Frame8:

61c0 0040      dw      4000h       ; "J" AT 0,0
61c2 6340      dw      4063h       ; "U" AT 3,3
61c4 4740      dw      4047h       ; "M" AT 2,7
61c6 4b40      dw      404bh       ; "P" AT 2,11
61c8 2f40      dw      402fh       ; "I" AT 1,15
61ca 5240      dw      4052h       ; "N" AT 2,18
61cc 7640      dw      4076h       ; "G" AT 3,22
61ce f140      dw      40f1h       ; "J" AT 7,17
61d0 3548      dw      4835h       ; "A" AT 9,21
61d2 3848      dw      4838h       ; "C" AT 9,24
61d4 1b48      dw      481bh       ; "K" AT 8,27




Start:         ; Entry Point (From BASIC Line 2)

61d6 cd3860    call    InitScreen  ; Clear screen & set attributes (6038h)

61d9 3eff      ld      a,0ffh
61db 320f61    ld      (BeepCnt),a ; Reset counter used in SFXPause (610fh)

61de dd211061  ld      ix,Frame0   ; Point IX to 1st frame positions (6110h) and
61e2 cd7c66    call    PrintAll    ; print all the letters (667ch)

61e5 21007d    ld      hl,7d00h
61e8 cdb960    call    Pause       ; Pause briefly - duration set by HL (60b9h)

; Animation begins here - groups of the big GFX letters are repeatedly drawn and
; erased through 8 frames until they reach their final positions.
; After each frame is drawn, SFXPause generates a sound effect and pauses before
; the next frame.

; Animate "M" & "A"

; Erase Frame 0
61eb cdec65    call    PrintM      ; 65ech
61ee cd4c66    call    PrintA      ; 664ch

; Draw Frame 1
61f1 dd212661  ld      ix,Frame1   ; 6126h
61f5 cdec65    call    PrintM      ; 65ech
61f8 cd4c66    call    PrintA      ; 664ch
61fb cd8160    call    SFXPause    ; 6081h

; Erase Frame 1
61fe cd4c66    call    PrintA      ; 664ch
6201 cdec65    call    PrintM      ; 65ech

; Draw Frame 2
6204 dd213c61  ld      ix,Frame2   ; 613ch
6208 cdec65    call    PrintM      ; 65ech
620b cd4c66    call    PrintA      ; 664ch
620e cd8160    call    SFXPause    ; 6081h

; Erase Frame 2
6211 cdec65    call    PrintM      ; 65ech
6214 cd4c66    call    PrintA      ; 664ch

; Draw Frame 3
6217 dd215261  ld      ix,Frame3   ; 6152h
621b cdec65    call    PrintM      ; 65ech
621e cd4c66    call    PrintA      ; 664ch
6221 cd8160    call    SFXPause    ; 6081h

; Erase Frame 3
6224 cd4c66    call    PrintA      ; 664ch
6227 cdec65    call    PrintM      ; 65ech

; Draw Frame 4
622a dd216861  ld      ix,Frame4   ; 6168h
622e cdec65    call    PrintM      ; 65ech
6231 cd4c66    call    PrintA      ; 664ch
6234 cd8160    call    SFXPause    ; 6081h

; Erase Frame 4
6237 cdec65    call    PrintM      ; 65ech
623a cd4c66    call    PrintA      ; 664ch

; Draw Frame 5
623d dd217e61  ld      ix,Frame5   ; 617eh
6241 cdec65    call    PrintM      ; 65ech
6244 cd4c66    call    PrintA      ; 664ch
6247 cd8160    call    SFXPause    ; 6081h

; Erase Frame 5
624a cd4c66    call    PrintA      ; 664ch
624d cdec65    call    PrintM      ; 65ech

; Draw Frame 6
6250 dd219461  ld      ix,Frame6   ; 6194h
6254 cdec65    call    PrintM      ; 65ech
6257 cd4c66    call    PrintA      ; 664ch
625a cd8160    call    SFXPause    ; 6081h

; Erase Frame 6
625d cdec65    call    PrintM      ; 65ech
6260 cd4c66    call    PrintA      ; 664ch

; Draw Frame 7
6263 dd21aa61  ld      ix,Frame7   ; 61aah
6267 cdec65    call    PrintM      ; 65ech
626a cd4c66    call    PrintA      ; 664ch
626d cd8160    call    SFXPause    ; 6081h

; Erase Frame 7
6270 cdec65    call    PrintM      ; 65ech
6273 cd4c66    call    PrintA      ; 664ch

; Draw Frame 8
6276 dd21c061  ld      ix,Frame8   ; 61c0h
627a cdec65    call    PrintM      ; 65ech
627d cd4c66    call    PrintA      ; 664ch
6280 cd8160    call    SFXPause    ; 6081h

6283 21007d    ld      hl,7d00h
6286 cdb960    call    Pause       ; Longer pause - duration set by HL (60b9h)

; Animate "I" & "K"

; Erase Frame 0
6289 dd211061  ld      ix,Frame0   ; 6110h
628d cd0c66    call    PrintI      ; 660ch
6290 cd6c66    call    PrintK      ; 666ch

; Draw Frame 1
6293 dd212661  ld      ix,Frame1   ; 6126h
6297 cd0c66    call    PrintI      ; 660ch
629a cd6c66    call    PrintK      ; 666ch
629d cd8160    call    SFXPause    ; 6081h

; Erase Frame 1
62a0 cd0c66    call    PrintI      ; 660ch
62a3 cd6c66    call    PrintK      ; 666ch

; Draw Frame 2
62a6 dd213c61  ld      ix,Frame2   ; 613ch
62aa cd0c66    call    PrintI      ; 660ch
62ad cd6c66    call    PrintK      ; 666ch
62b0 cd8160    call    SFXPause    ; 6081h

; Erase Frame 2
62b3 cd0c66    call    PrintI      ; 660ch
62b6 cd6c66    call    PrintK      ; 666ch

; Draw Frame 3
62b9 dd215261  ld      ix,Frame3   ; 6152h
62bd cd0c66    call    PrintI      ; 660ch
62c0 cd6c66    call    PrintK      ; 666ch
62c3 cd8160    call    SFXPause    ; 6081h

; Erase Frame 3
62c6 cd0c66    call    PrintI      ; 660ch
62c9 cd6c66    call    PrintK      ; 666ch

; Draw Frame 4
62cc dd216861  ld      ix,Frame4   ; 6168h
62d0 cd0c66    call    PrintI      ; 660ch
62d3 cd6c66    call    PrintK      ; 666ch
62d6 cd8160    call    SFXPause    ; 6081h

; Erase Frame 4
62d9 cd0c66    call    PrintI      ; 660ch
62dc cd6c66    call    PrintK      ; 666ch

; Draw Frame 5
62df dd217e61  ld      ix,Frame5   ; 617eh
62e3 cd0c66    call    PrintI      ; 660ch
62e6 cd6c66    call    PrintK      ; 666ch
62e9 cd8160    call    SFXPause    ; 6081h

; Erase Frame 5
62ec cd0c66    call    PrintI      ; 660ch
62ef cd6c66    call    PrintK      ; 666ch

; Draw Frame 6
62f2 dd219461  ld      ix,Frame6   ; 6194h
62f6 cd0c66    call    PrintI      ; 660ch
62f9 cd6c66    call    PrintK      ; 666ch
62fc cd8160    call    SFXPause    ; 6081h

; Erase Frame 6
62ff cd0c66    call    PrintI      ; 660ch
6302 cd6c66    call    PrintK      ; 666ch

; Draw Frame 7
6305 dd21aa61  ld      ix,Frame7   ; 61aah
6309 cd0c66    call    PrintI      ; 660ch
630c cd6c66    call    PrintK      ; 666ch
630f cd8160    call    SFXPause    ; 6081h

; Erase Frame 7
6312 cd0c66    call    PrintI      ; 660ch
6315 cd6c66    call    PrintK      ; 666ch

; Draw Frame 8
6318 dd21c061  ld      ix,Frame8   ; 61c0h
631c cd0c66    call    PrintI      ; 660ch
631f cd6c66    call    PrintK      ; 666ch
6322 cd8160    call    SFXPause    ; 6081h

6325 21007d    ld      hl,7d00h
6328 cdb960    call    Pause       ; Longer pause - duration set by HL (60b9h)

; Animate "J"(1), "P" & "C"

; Erase Frame 0
632b dd211061  ld      ix,Frame0   ; 6110h
632f cdcc65    call    PrintJ1     ; 65cch
6332 cdfc65    call    PrintP      ; 65fch
6335 cd5c66    call    PrintC      ; 665ch

; Draw Frame 1
6338 dd212661  ld      ix,Frame1   ; 6126h
633c cdcc65    call    PrintJ1     ; 65cch
633f cdfc65    call    PrintP      ; 65fch
6342 cd5c66    call    PrintC      ; 665ch
6345 cd8160    call    SFXPause    ; 6081h

; Erase Frame 1
6348 cdcc65    call    PrintJ1     ; 65cch
634b cdfc65    call    PrintP      ; 65fch
634e cd5c66    call    PrintC      ; 665ch

; Draw Frame 2
6351 dd213c61  ld      ix,Frame2   ; 613ch
6355 cdcc65    call    PrintJ1     ; 65cch
6358 cdfc65    call    PrintP      ; 65fch
635b cd5c66    call    PrintC      ; 665ch
635e cd8160    call    SFXPause    ; 6081h

; Erase Frame 2
6361 cdcc65    call    PrintJ1     ; 65cch
6364 cdfc65    call    PrintP      ; 65fch
6367 cd5c66    call    PrintC      ; 665ch

; Draw Frame 3
636a dd215261  ld      ix,Frame3   ; 6152h
636e cdcc65    call    PrintJ1     ; 65cch
6371 cdfc65    call    PrintP      ; 65fch
6374 cd5c66    call    PrintC      ; 665ch
6377 cd8160    call    SFXPause    ; 6081h

; Erase Frame 3
637a cdcc65    call    PrintJ1     ; 65cch
637d cdfc65    call    PrintP      ; 65fch
6380 cd5c66    call    PrintC      ; 665ch

; Draw Frame 4
6383 dd216861  ld      ix,Frame4   ; 6168h
6387 cdcc65    call    PrintJ1     ; 65cch
638a cdfc65    call    PrintP      ; 65fch
638d cd5c66    call    PrintC      ; 665ch

; Erase Frame 4
6390 cd8160    call    SFXPause    ; 6081h
6393 cdcc65    call    PrintJ1     ; 65cch
6396 cdfc65    call    PrintP      ; 65fch
6399 cd5c66    call    PrintC      ; 665ch

; Draw Frame 5
639c dd217e61  ld      ix,Frame5   ; 617eh
63a0 cdcc65    call    PrintJ1     ; 65cch
63a3 cdfc65    call    PrintP      ; 65fch
63a6 cd5c66    call    PrintC      ; 665ch
63a9 cd8160    call    SFXPause    ; 6081h

; Erase Frame 5
63ac cdcc65    call    PrintJ1     ; 65cch
63af cdfc65    call    PrintP      ; 65fch
63b2 cd5c66    call    PrintC      ; 665ch

; Draw Frame 6
63b5 dd219461  ld      ix,Frame6   ; 6194h
63b9 cdcc65    call    PrintJ1     ; 65cch
63bc cdfc65    call    PrintP      ; 65fch
63bf cd5c66    call    PrintC      ; 665ch
63c2 cd8160    call    SFXPause    ; 6081h

; Erase Frame 6
63c5 cdcc65    call    PrintJ1     ; 65cch
63c8 cdfc65    call    PrintP      ; 65fch
63cb cd5c66    call    PrintC      ; 665ch

; Draw Frame 7
63ce dd21aa61  ld      ix,Frame7   ; 61aah
63d2 cdcc65    call    PrintJ1     ; 65cch
63d5 cdfc65    call    PrintP      ; 65fch
63d8 cd5c66    call    PrintC      ; 665ch
63db cd8160    call    SFXPause    ; 6081h

; Erase Frame 7
63de cdcc65    call    PrintJ1     ; 65cch
63e1 cdfc65    call    PrintP      ; 65fch
63e4 cd5c66    call    PrintC      ; 665ch

; Draw Frame 8
63e7 dd21c061  ld      ix,Frame8   ; 61c0h
63eb cdcc65    call    PrintJ1     ; 65cch
63ee cdfc65    call    PrintP      ; 65fch
63f1 cd5c66    call    PrintC      ; 665ch
63f4 cd8160    call    SFXPause    ; 6081h

63f7 21007d    ld      hl,7d00h
63fa cdb960    call    Pause       ; Longer pause - duration set by HL (60b9h)

; Animate "U" & "G"

; Erase Frame 0
63fd dd211061  ld      ix,Frame0   ; 6110h
6401 cddc65    call    PrintU      ; 65dch
6404 cd2c66    call    PrintG      ; 662ch

; Draw Frame 1
6407 dd212661  ld      ix,Frame1   ; 6126h
640b cddc65    call    PrintU      ; 65dch
640e cd2c66    call    PrintG      ; 662ch
6411 cd8160    call    SFXPause    ; 6081h

; Erase Frame 1
6414 cddc65    call    PrintU      ; 65dch
6417 cd2c66    call    PrintG      ; 662ch

; Draw Frame 2
641a dd213c61  ld      ix,Frame2   ; 613ch
641e cddc65    call    PrintU      ; 65dch
6421 cd2c66    call    PrintG      ; 662ch
6424 cd8160    call    SFXPause    ; 6081h

; Erase Frame 2
6427 cddc65    call    PrintU      ; 65dch
642a cd2c66    call    PrintG      ; 662ch

; Draw Frame 3
642d dd215261  ld      ix,Frame3   ; 6152h
6431 cddc65    call    PrintU      ; 65dch
6434 cd2c66    call    PrintG      ; 662ch
6437 cd8160    call    SFXPause    ; 6081h

; Erase Frame 3
643a cddc65    call    PrintU      ; 65dch
643d cd2c66    call    PrintG      ; 662ch

; Draw Frame 4
6440 dd216861  ld      ix,Frame4   ; 6168h
6444 cddc65    call    PrintU      ; 65dch
6447 cd2c66    call    PrintG      ; 662ch
644a cd8160    call    SFXPause    ; 6081h

; Erase Frame 4
644d cddc65    call    PrintU      ; 65dch
6450 cd2c66    call    PrintG      ; 662ch

; Draw Frame 5
6453 dd217e61  ld      ix,Frame5   ; 617eh
6457 cddc65    call    PrintU      ; 65dch
645a cd2c66    call    PrintG      ; 662ch
645d cd8160    call    SFXPause    ; 6081h

; Erase Frame 5
6460 cddc65    call    PrintU      ; 65dch
6463 cd2c66    call    PrintG      ; 662ch

; Draw Frame 6
6466 dd219461  ld      ix,Frame6   ; 6194h
646a cddc65    call    PrintU      ; 65dch
646d cd2c66    call    PrintG      ; 662ch
6470 cd8160    call    SFXPause    ; 6081h

; Erase Frame 6
6473 cddc65    call    PrintU      ; 65dch
6476 cd2c66    call    PrintG      ; 662ch

; Draw Frame 7
6479 dd21aa61  ld      ix,Frame7   ; 61aah
647d cddc65    call    PrintU      ; 65dch
6480 cd2c66    call    PrintG      ; 662ch
6483 cd8160    call    SFXPause    ; 6081h

; Erase Frame 7
6486 cddc65    call    PrintU      ; 65dch
6489 cd2c66    call    PrintG      ; 662ch

; Draw Frame 8
648c dd21c061  ld      ix,Frame8   ; 61c0h
6490 cddc65    call    PrintU      ; 65dch
6493 cd2c66    call    PrintG      ; 662ch
6496 cd8160    call    SFXPause    ; 6081h

6499 21007d    ld      hl,7d00h
649c cdb960    call    Pause       ; Longer pause - duration set by HL (60b9h)

; Animate "N" & "J"(2)

; Erase Frame 0
649f dd211061  ld      ix,Frame0   ; 6110h
64a3 cd1c66    call    PrintN      ; 661ch
64a6 cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 1
64a9 dd212661  ld      ix,Frame1   ; 6126h
64ad cd1c66    call    PrintN      ; 661ch
64b0 cd3c66    call    PrintJ2     ; 663ch
64b3 cd8160    call    SFXPause    ; 6081h

; Erase Frame 1
64b6 cd1c66    call    PrintN      ; 661ch
64b9 cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 2
64bc dd213c61  ld      ix,Frame2   ; 613ch
64c0 cd1c66    call    PrintN      ; 661ch
64c3 cd3c66    call    PrintJ2     ; 663ch
64c6 cd8160    call    SFXPause    ; 6081h

; Erase Frame 2
64c9 cd1c66    call    PrintN      ; 661ch
64cc cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 3
64cf dd215261  ld      ix,Frame3   ; 6152h
64d3 cd1c66    call    PrintN      ; 661ch
64d6 cd3c66    call    PrintJ2     ; 663ch
64d9 cd8160    call    SFXPause    ; 6081h

; Erase Frame 3
64dc cd1c66    call    PrintN      ; 661ch
64df cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 4
64e2 dd216861  ld      ix,Frame4   ; 6168h
64e6 cd1c66    call    PrintN      ; 661ch
64e9 cd3c66    call    PrintJ2     ; 663ch
64ec cd8160    call    SFXPause    ; 6081h

; Erase Frame 4
64ef cd1c66    call    PrintN      ; 661ch
64f2 cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 5
64f5 dd217e61  ld      ix,Frame5   ; 617eh
64f9 cd1c66    call    PrintN      ; 661ch
64fc cd3c66    call    PrintJ2     ; 663ch
64ff cd8160    call    SFXPause    ; 6081h

; Erase Frame 5
6502 cd1c66    call    PrintN      ; 661ch
6505 cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 6
6508 dd219461  ld      ix,Frame6   ; 6194h
650c cd1c66    call    PrintN      ; 661ch
650f cd3c66    call    PrintJ2     ; 663ch
6512 cd8160    call    SFXPause    ; 6081h

; Erase Frame 6
6515 cd1c66    call    PrintN      ; 661ch
6518 cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 7
651b dd21aa61  ld      ix,Frame7   ; 61aah
651f cd1c66    call    PrintN      ; 661ch
6522 cd3c66    call    PrintJ2     ; 663ch
6525 cd8160    call    SFXPause    ; 6081h

; Erase Frame 7
6528 cd1c66    call    PrintN      ; 661ch
652b cd3c66    call    PrintJ2     ; 663ch

; Draw Frame 8
652e dd21c061  ld      ix,Frame8   ; 61c0h
6532 cd1c66    call    PrintN      ; 661ch
6535 cd3c66    call    PrintJ2     ; 663ch
6538 cd8160    call    SFXPause    ; 6081h

653b 21e8fd    ld      hl,0fde8h
653e cdb960    call    Pause       ; Longer pause - duration set by HL (60b9h)


; Animation complete.  Now the credits and loading message are printed.

; "BY"
6541 21bd66    ld      hl,Text1    ; 66bdh
6544 11cf48    ld      de,48cfh    ; Display location to print (AT 14,15)
6547 0602      ld      b,02h       ; 2 characters to print
6549 cd9e66    call    PrintTxt    ; 669eh

; "ALBERT BALL"
654c 21bf66    ld      hl,Text2    ; 66bfh
654f 11ea48    ld      de,48eah    ; Display location to print (AT 15,10)
6552 060b      ld      b,0bh       ; 11 characters to print
6554 cd9e66    call    PrintTxt    ; 669eh

; "GRAPHICS BY STUART C BALL"
6557 21ca66    ld      hl,Text3    ; 66cah
655a 112450    ld      de,5024h    ; Display location to print (AT 17,4)
655d 0619      ld      b,19h       ; 25 characters to print
655f cd9e66    call    PrintTxt    ; 669eh

; "COPYRIGHT: PROGRAM,AUDIO,VISUAL"
6562 21e366    ld      hl,Text4    ; 66e3h
6565 116050    ld      de,5060h    ; Display location to print (AT 19,0)
6568 061f      ld      b,1fh       ; 31 characters to print
656a cd9e66    call    PrintTxt    ; 669eh

; "(c) 1983 BY IMAGINE SOFTWARE"
656d 210267    ld      hl,Text5    ; 6702h
6570 11c050    ld      de,50c0h    ; Display location to print (AT 22,0)
6573 061a      ld      b,1ah       ; 26 characters to print
6575 cd9e66    call    PrintTxt    ; 669eh

; 33 bytes of NOPs here for unknown reason.

6578 00        nop
6579 00        nop
657a 00        nop
657b 00        nop
657c 00        nop
657d 00        nop
657e 00        nop
657f 00        nop
6580 00        nop
6581 00        nop
6582 00        nop
6583 00        nop
6584 00        nop
6585 00        nop
6586 00        nop
6587 00        nop
6588 00        nop
6589 00        nop
658a 00        nop
658b 00        nop
658c 00        nop
658d 00        nop
658e 00        nop
658f 00        nop
6590 00        nop
6591 00        nop
6592 00        nop
6593 00        nop
6594 00        nop
6595 00        nop
6596 00        nop
6597 00        nop
6598 00        nop

; "LOADING"
6599 211c67    ld      hl,Text6    ; 671ch
659c 116048    ld      de,4860h    ; Display location to print (AT 11,0)
659f 0607      ld      b,07h       ; 7 characters to print
65a1 cd9e66    call    PrintTxt    ; 669eh

; Set flash attribute for "LOADING" text

65a4 01b907    ld      bc,07b9h    ; B=Number of cells to modify
                                   ; C=Attributes (Flash, Paper White, Ink Blue)
65a7 216059    ld      hl,5960h    ; HL=Points to cell (11,0) in Attribs memory

65aa 71        ld      (hl),c      ; Set attrib byte
65ab 23        inc     hl          ; Point to next cell
65ac 10fc      djnz    65aah       ; Repeat for each letter


; Animation and text complete - now set up the system for the main game and
; load it.

65ae 31005c    ld      sp,5c00h    ; Move stack to the printer buffer
65b1 21426f    ld      hl,6f42h    ; 6f42h will be the start address for game so
65b4 e5        push    hl          ; make it the return address from Rom Loader
65b5 dd218e5d  ld      ix,5d8eh    ; Address to load bytes (23950)
65b9 117222    ld      de,2272h    ; Length of bytes to be loaded (8818)
65bc 3eff      ld      a,0ffh      ; Data block (not header) to be loaded
65be 37        scf                 ; Load, not Verify.
65bf c35605    jp      0556h       ; Call ROM LOADER




; The following 4 lines are never reached - here for unknown reason.

65c2 cd7c66    call    PrintAll    ; 667ch
65c5 cd8160    call    SFXPause    ; 6081h
65c8 cd7c66    call    PrintAll    ; 667ch
65cb c9        ret




PrintJ1:

65cc dd5e00    ld      e,(ix+00h)
65cf dd5601    ld      d,(ix+01h)  ; DE=Print location in display memory
65d2 21d05c    ld      hl,JData    ; HL=GFX data for big "J"
65d5 010503    ld      bc,0305h    ; BC=Width/Height of "J" in cells (3x5)
65d8 cd5c60    call    PrintLet    ; 605ch
65db c9        ret

PrintU:

65dc dd5e02    ld      e,(ix+02h)
65df dd5603    ld      d,(ix+03h)  ; DE=Print location in display memory
65e2 21485d    ld      hl,UData    ; HL=GFX data for big "U"
65e5 010303    ld      bc,0303h    ; BC=Width/Height of "U" in cells (3x3)
65e8 cd5c60    call    PrintLet    ; 605ch
65eb c9        ret

PrintM:

65ec dd5e04    ld      e,(ix+04h)
65ef dd5605    ld      d,(ix+05h)  ; DE=Print location in display memory
65f2 21905d    ld      hl,MData    ; HL=GFX data for big "M"
65f5 010303    ld      bc,0303h    ; BC=Width/Height of "M" in cells (3x3)
65f8 cd5c60    call    PrintLet    ; 605ch
65fb c9        ret

PrintP:

65fc dd5e06    ld      e,(ix+06h)
65ff dd5607    ld      d,(ix+07h)  ; DE=Print location in display memory
6602 21d85d    ld      hl,PData    ; HL=GFX data for big "P"
6605 010503    ld      bc,0305h    ; BC=Width/Height of "P" in cells (3x5)
6608 cd5c60    call    PrintLet    ; 605ch
660b c9        ret

PrintI:

660c dd5e08    ld      e,(ix+08h)
660f dd5609    ld      d,(ix+09h)  ; DE=Print location in display memory
6612 21505e    ld      hl,IData    ; HL=GFX data for big "I"
6615 010402    ld      bc,0204h    ; BC=Width/Height of "I" in cells (2x4)
6618 cd5c60    call    PrintLet    ; 605ch
661b c9        ret

PrintN:

661c dd5e0a    ld      e,(ix+0ah)
661f dd560b    ld      d,(ix+0bh)  ; DE=Print location in display memory
6622 21905e    ld      hl,NData    ; HL=GFX data for big "N"
6625 010303    ld      bc,0303h    ; BC=Width/Height of "N" in cells (3x3)
6628 cd5c60    call    PrintLet    ; 605ch
662b c9        ret

PrintG:

662c dd5e0c    ld      e,(ix+0ch)
662f dd560d    ld      d,(ix+0dh)  ; DE=Print location in display memory
6632 21d85e    ld      hl,GData    ; HL=GFX data for big "G"
6635 010403    ld      bc,0304h    ; BC=Width/Height of "G" in cells (3x4)
6638 cd5c60    call    PrintLet    ; 605ch
663b c9        ret

PrintJ2:

663c dd5e0e    ld      e,(ix+0eh)
663f dd560f    ld      d,(ix+0fh)  ; DE=Print location in display memory
6642 21d05c    ld      hl,JData    ; HL=GFX data for big "J"
6645 010503    ld      bc,0305h    ; BC=Width/Height of "J" in cells (3x5)
6648 cd5c60    call    PrintLet    ; 605ch
664b c9        ret

PrintA:

664c dd5e10    ld      e,(ix+10h)
664f dd5611    ld      d,(ix+11h)  ; DE=Print location in display memory
6652 21385f    ld      hl,AData    ; HL=GFX data for big "A"
6655 010402    ld      bc,0204h    ; BC=Width/Height of "A" in cells (2x4)
6658 cd5c60    call    PrintLet    ; 605ch
665b c9        ret

PrintC:

665c dd5e12    ld      e,(ix+12h)
665f dd5613    ld      d,(ix+13h)  ; DE=Print location in display memory
6662 21785f    ld      hl,CData    ; HL=GFX data for big "C"
6665 010403    ld      bc,0304h    ; BC=Width/Height of "C" in cells (3x4)
6668 cd5c60    call    PrintLet    ; 605ch
666b c9        ret

PrintK:

666c dd5e14    ld      e,(ix+14h)
666f dd5615    ld      d,(ix+15h)  ; DE=Print location in display memory
6672 21d85f    ld      hl,KData    ; HL=GFX data for big "K"
6675 010403    ld      bc,0304h    ; BC=Width/Height of "K" in cells (3x4)
6678 cd5c60    call    PrintLet    ; 605ch
667b c9        ret




PrintAll:      ; Batch routine to print all the letters

667c cdcc65    call    PrintJ1     ; 65cch
667f cddc65    call    PrintU      ; 65dch
6682 cdec65    call    PrintM      ; 65ech
6685 cdfc65    call    PrintP      ; 65fch
6688 cd0c66    call    PrintI      ; 660ch
668b cd1c66    call    PrintN      ; 661ch
668e cd2c66    call    PrintG      ; 662ch
6691 cd3c66    call    PrintJ2     ; 663ch
6694 cd4c66    call    PrintA      ; 664ch
6697 cd5c66    call    PrintC      ; 665ch
669a cd6c66    call    PrintK      ; 666ch
669d c9        ret




PrintTxt:      ; Prints a text string

; This routine prints a string of text by making calls to PrintLet for each
; character to be printed.
;
; ENTRY:
; HL = Pointer to string to be printed
; DE = Pointer to cell in Display memory - where to print first char
; B = Length of string

669e e5        push    hl          ; Save copy of pointer to string
669f c5        push    bc          ; Save copy of string length
66a0 d5        push    de          ; Save copy of print location

; Character set pixel definitions are stored in ROM at (3c00h + 8*char code)

66a1 7e        ld      a,(hl)      ; A=Code of next character to be printed
66a2 21003c    ld      hl,3c00h    ; HL points to base address
66a5 1e08      ld      e,08h       ; Multiplication factor
66a7 1600      ld      d,00h

66a9 19        add     hl,de       ; Add 8 to HL
66aa 3d        dec     a
66ab 20fc      jr      nz,66a9h    ; Repeat 'A' times

; HL now points to ROM 8-byte pixel definition of char to be printed.

66ad 010101    ld      bc,0101h    ; It's a 1x1 cell GFX to be printed
66b0 d1        pop     de          ; DE points to print location in display
66b1 d5        push    de          ; Save a copy
66b2 cd5c60    call    PrintLet    ; 605ch

66b5 d1        pop     de          ; DE=Print location of cell just drawn
66b6 13        inc     de          ; Point to next cell along.
66b7 c1        pop     bc          ; Length counter
66b8 e1        pop     hl          ; HL points to character just printed
66b9 23        inc     hl          ; Point to next character to be printed
66ba 10e2      djnz    PrintTxt    ; Print next character if req (669eh)
66bc c9        ret




Text1:
66bd           db      "BY"

Text2:
66bf           db      "ALBERT BALL"

Text3:
66ca           db      "GRAPHICS BY STUART C BALL"

Text4:
66e3           db      "COPYRIGHT: PROGRAM,AUDIO,VISUAL"

Text5:
6702 7f        db      7fh         ; Copyright symbol
6703           db      " 1983 BY IMAGINE SOFTWARE"

Text6:
671c           db      "LOADING"




; 57 bytes of NOPs here for unknown reason.

6723 00        nop
6724 00        nop
6725 00        nop
6726 00        nop
6727 00        nop
6728 00        nop
6729 00        nop
672a 00        nop
672b 00        nop
672c 00        nop

672d 00        nop
672e 00        nop
672f 00        nop
6730 00        nop
6731 00        nop
6732 00        nop
6733 00        nop
6734 00        nop
6735 00        nop
6736 00        nop

6737 00        nop
6738 00        nop
6739 00        nop
673a 00        nop
673b 00        nop
673c 00        nop
673d 00        nop
673e 00        nop
673f 00        nop
6740 00        nop

6741 00        nop
6742 00        nop
6743 00        nop
6744 00        nop
6745 00        nop
6746 00        nop
6747 00        nop
6748 00        nop
6749 00        nop
674a 00        nop

674b 00        nop
674c 00        nop
674d 00        nop
674e 00        nop
674f 00        nop
6750 00        nop
6751 00        nop
6752 00        nop
6753 00        nop
6754 00        nop

6755 00        nop
6756 00        nop
6757 00        nop
6758 00        nop
6759 00        nop
675a 00        nop
675b 00        nop

================================================================================