443 lines
21 KiB
Plaintext
443 lines
21 KiB
Plaintext
|
|
Here is what I have done to the original ZX-Spectrum ROM. Features
|
|
include:
|
|
|
|
- Bug fixes as mentioned in "The complete Spectrum Rom Disassembly" by
|
|
Dr Ian Logan and Dr Frank O'Hara (I think I have all of them).
|
|
|
|
- An "extra cursor" which acts like the BBC Micro's and provides an
|
|
extra editing facility in program-entry and INPUT modes. Press
|
|
and hold both shift keys, then press the keys 5, 6, 7 and 8 (or
|
|
the arrow keys) to move the cursor around the screen, or 0 to copy
|
|
the character under the cursor. The machine beeps if the cursor is
|
|
not on a recognisable character. Note that copying a long line in
|
|
this way is faster than pressing EDIT and cursoring to the end of it.
|
|
It's OK for the screen to scroll while you copy, but make sure that
|
|
the line you are copying doesn't go off the top of the screen!
|
|
|
|
Note: The extra cursor requires 8 system variables, which I have
|
|
placed at FFF8 (which is usually occupied by the user-defined graphic
|
|
"U"). This means that graphic "U" is usually corrupt and should not
|
|
be used (however, it should be OK to use within a program as long
|
|
as it never uses INPUT or causes an error report). Poking other
|
|
values there will have no lasting effect, except perhaps to prevent
|
|
the extra cursor from working correctly. To reset the extra cursor,
|
|
just poke zero into each location from FFF8 to FFFF.
|
|
|
|
- A tokenizer (which is needed by the above to recombine letters from
|
|
the screen into keywords). When you press enter after typing in a
|
|
line, all keywords which are written in capital letters will be
|
|
assembled into tokens. Keywords do not need spaces before or after,
|
|
except IN and AT, which need a space after (but not before). If you
|
|
can't remember which token is on which key, then type a quote as the
|
|
very first character of each line, which will be turned into a space
|
|
(it doesn't do anything, but it makes the computer think everything
|
|
is in quotes so it uses an L-cursor instead of a K-cursor), then
|
|
spell out all the words in capital letters.
|
|
|
|
- A non-maskable interrupt routine. When it is activated (by a
|
|
debounced NMI button) you have a choice of the following:
|
|
* press N, which causes a NEW with RAMTOP set at 24199. This gives
|
|
you the opportunity to inspect any memory above that address, even
|
|
though BASIC might have been corrupted.[$]
|
|
* press space, which breaks in with the error message "NMI break",
|
|
unless the routine decides that BASIC is corrupt, in which case
|
|
it will behave as if you had pressed N.
|
|
* press V followed by four hex digits. The routine whose address
|
|
that is will be called. When the routine executes RET, the
|
|
processor will return immediately to the interrupted program
|
|
(which means that the program has to save registers itself if
|
|
it intends to return).
|
|
|
|
[$]This has, of course, been extremely useful to get into game
|
|
loaders without all the hassle of stepping through 147 different
|
|
decrypt algorithms. :-)
|
|
|
|
- A save-all-RAM routine for use by the NMI routine (press V04B5 and
|
|
make sure the tape is recording when you press the last digit).
|
|
|
|
- New LIST and CONTINUE commands.
|
|
* LIST only lists the line you name rather than the whole program
|
|
starting at that line. Type "LIST *" instead of LIST for the old
|
|
behaviour. The full syntax of LIST is
|
|
LIST [x][,[y]]
|
|
where x is the starting line number (default 0) and y is the ending
|
|
line number (default 9999).
|
|
* CONTINUE may be used to continue from NMI breaks[%], provided that
|
|
the machine stack is still intact (no CLEAR and no BASIC errors).
|
|
If there is no NMI break to continue from then it continues from
|
|
the last BASIC error as usual.
|
|
|
|
[%]Note that it doesn't always work because some memory has
|
|
changed since the NMI break (for instance, the command-line
|
|
now reads CONTINUE).
|
|
|
|
- new start-up parameters (black screen, faster key-repeat, longer
|
|
key-click).
|
|
|
|
- An error routine that doesn't crash when interrupts are disabled.
|
|
|
|
- GOTO and GOSUB keywords without spaces. :-)
|
|
|
|
- a new character set.
|
|
|
|
Here is a more detailed description of the changes. In most cases, two
|
|
listings are provided; the left-hand one lists the original ROM and the
|
|
right-hand one is my changed version. Page numbers (and labels where
|
|
they occur) refer to the book "The Complete Spectrum Rom Disassembly" by
|
|
Dr Ian Logan & Dr Frank O'Hara, published by Melbourne House Publishers,
|
|
ISBN 0 86161 116 0.
|
|
------------------------------------------------------------------------
|
|
004B CALL 02BF CALL 3B5E Call the new interrupt routine
|
|
(for the extra cursor)
|
|
------------------------------------------------------------------------
|
|
The new non-maskable interrupt routine
|
|
|
|
0066 PUSH AF PUSH HL Save some registers.
|
|
PUSH HL PUSH AF
|
|
LD HL,(5CB0) PUSH BC
|
|
LD A,H PUSH DE
|
|
OR L CALL 3CD9 Get a key-press
|
|
JR NZ,0070 CP +20 Is it a space?
|
|
JP (HL) JP 04AA Jump to continue the routine
|
|
0070 POP HL DEFB +38,+45 (spare bytes)
|
|
POP AF
|
|
RETN
|
|
------------------------------------------------------------------------
|
|
01AE 20 54 CF 47 54 CF 47 4F A new token table with the
|
|
01B2 4F 20 53 55 53 55 C2 49 spaces removed from GOTO and
|
|
01B6 C2 49 4E 50 4E 50 55 D4 GOSUB (only the last portion
|
|
01BA 55 D4 4C 4F 4C 4F 41 C4 differs).
|
|
01BE 41 C4 4C 49 4C 49 53 D4
|
|
01C2 53 D4 4C 45 4C 45 D4 50
|
|
01C6 D4 50 41 55 41 55 53 C5
|
|
01CA 53 C5 4E 45 4E 45 58 D4
|
|
01CE 58 D4 50 4F 50 4F 4B C5
|
|
01D2 4B C5 50 52 50 52 49 4E
|
|
01D6 49 4E D4 50 D4 50 4C 4F
|
|
01DA 4C 4F D4 52 D4 52 55 CE
|
|
01DE 55 CE 53 41 53 41 56 C5
|
|
01E2 56 C5 52 41 52 41 4E 44
|
|
01E6 4E 44 4F 4D 4F 4D 49 5A
|
|
01EA 49 5A C5 49 C5 49 C6 43
|
|
01EE C6 43 4C D3 4C D3 44 52
|
|
01F2 44 52 41 D7 41 D7 43 4C
|
|
01F6 43 4C 45 41 45 41 D2 52
|
|
01FA D2 52 45 54 45 54 55 52
|
|
01FE 55 52 CE 43 CE 43 4F 50
|
|
0202 4F D9
|
|
------------------------------------------------------------------------
|
|
A continuation of the non-maskable interrupt routine. It is
|
|
stored where useless ZX81 code was left, called "THE 'PROGRAM
|
|
NAME' SUBROUTINE (ZX81)".
|
|
|
|
04AA CD FB 24 3A JP Z,38A0 Jump forward if the key was a space
|
|
3B 5C 87 FA CP 'N'
|
|
8A 1C E1 D0 JP Z,3929 Jump if it was 'N'
|
|
E5 CD F1 2B JP 386E Jump forward to continue
|
|
62 6B 0D F8
|
|
09 CB FE C9
|
|
04B5 LD IX,+4000 This short routine is a complete RAM
|
|
LD DE,+C000 save, just in case it's useful to jump
|
|
LD A,+FF to on NMI (it continues straight into
|
|
LD (4000),SP SA-BYTES).
|
|
------------------------------------------------------------------------
|
|
Fix bug on page 33.
|
|
|
|
0A32 LD A,+18 LD A,+19 Test against top line
|
|
------------------------------------------------------------------------
|
|
Fix bug on page 34.
|
|
|
|
0A48 CALL 0B65 CALL 0AD9 In this case, 0AD9 (PO-ABLE) is
|
|
equivalent to calling 0B65 (PO-CHAR)
|
|
followed by 0ADC (PO-STORE).
|
|
------------------------------------------------------------------------
|
|
Insert a hook for tokenization (which is done if the key code
|
|
is 13 (carriage return).
|
|
|
|
10E6 CP +0E JP 3B51
|
|
RET C
|
|
------------------------------------------------------------------------
|
|
Changes to the initialisation.
|
|
|
|
11CC LD A,+07 LD A,+00 Make the border black (was white)
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1212 LD BC,+0040 LD BC,+1414 RASP=20, PIP=20 (was 64, 0).
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1265 LD A,+38 LD A,+07 Initialise the colours to: FLASH 0,
|
|
LD (5C8D),A LD (5C8D),A BRIGHT 0, PAPER 0 and INK 7.
|
|
LD (5C8F),A CALL 3966 Initialise the extra cursor.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1270 LD HL,+0523 LD HL,+0123 REPDEL=35, REPPER=1 (was 35, 5).
|
|
------------------------------------------------------------------------
|
|
Stop the machine from crashing if interrupts are disabled at the
|
|
time when 1303 (MAIN-4, the error reporting routine) is called.
|
|
|
|
1303 HALT NOP Don't crash if interrupts disabled.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1320 LD HL,+0001 INC L HL was zero anyway so this makes it 1
|
|
EI Now enable interrupts and do the
|
|
HALT HALT from earlier in case it matters.
|
|
------------------------------------------------------------------------
|
|
New initialisation message
|
|
|
|
1539 7F 20 31 39 20 41 6C 74 |c 19| | Alt|
|
|
153D 38 32 20 53 65 72 65 64 |82 S| |ered|
|
|
1541 69 6E 63 6C 20 62 79 20 |incl| | by |
|
|
1545 61 69 72 20 49 61 6E 20 |air | |Ian |
|
|
1549 52 65 73 65 43 6F 6C 6C |Rese| |Coll|
|
|
154D 61 72 63 68 69 65 72 20 |arch| |ier |
|
|
1551 20 4C 74 E4 31 39 38 B5 | Ltd| |1985|
|
|
------------------------------------------------------------------------
|
|
Changes to the syntax tables
|
|
|
|
1A49 CB CA CAT moves back one byte in the table.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1AAF F9 17 3B 3C The new address of LIST is 3C3B.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1AB9 5F 1E 3C 39 The new address of CONTINUE is 393C.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1ADD F5 17 D4 3C The new address of LLIST is 3CD4.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
1B10 0A 00 93 17 00 93 17 06 For an unknown reason (probably to do
|
|
with the Interface-1) I have altered
|
|
the syntax of CAT so that it expects
|
|
a numeric expression. For space
|
|
considerations, I also removed the
|
|
string expression from after ERASE.
|
|
------------------------------------------------------------------------
|
|
For some reason lost in the mist of time I altered the TEST-ROOM
|
|
routine so that it uses RST 8 to generate an out-of-memory report
|
|
rather than a jump to 0055 (ERROR-3).
|
|
|
|
1F15 LD L,+03 RST 0008
|
|
DEFB +03
|
|
------------------------------------------------------------------------
|
|
Fix bug on page 129.
|
|
|
|
257D JP 2AB2 RET Return; do not store the string again.
|
|
DEFW +2AB2 Spare locations.
|
|
------------------------------------------------------------------------
|
|
Fix bug on page 169.
|
|
|
|
CALL 2D7F CALL 2D7F Note: the last instruction in this
|
|
routine (INT-FETCH) is "LD D,A".
|
|
LD B,+10 LD B,+10
|
|
2E14 LD A,D AND A Delete the unnecessary instruction
|
|
"LD A,D" to make room for the fix.
|
|
AND A JR NZ,2E1D(*)
|
|
JR NZ,2E1E OR E
|
|
OR E JR Z,2E23(#)
|
|
JR Z,2E24 LD D,E
|
|
LD D,E LD B,+08
|
|
LD B,+08 (*)PUSH DE
|
|
2E1E PUSH DE EXX
|
|
EXX POP DE
|
|
POP DE EXX
|
|
EXX JR 2E7B
|
|
JR 2E7B (#)RST 0028
|
|
2E24 RST 0028 DEFB +02,delete Delete the extra item on the stack.
|
|
------------------------------------------------------------------------
|
|
First half of fix for -65536 bug
|
|
|
|
3032 LD (HL),A CALL 3225 The fixed code is placed at 3225
|
|
INC HL POP DE Restore STKEND to DE.
|
|
LD (HL),E RET Finished.
|
|
INC HL
|
|
LD (HL),D
|
|
DEC HL DEC HL }
|
|
DEC HL DEC HL }
|
|
DEC HL DEC HL } These locations are spare.
|
|
POP DE POP DE }
|
|
RET RET }
|
|
------------------------------------------------------------------------
|
|
Fix bug on page 185
|
|
|
|
31FF JR Z,31E2 JR Z,31DB,DIV-34TH
|
|
------------------------------------------------------------------------
|
|
Second half of the -65536 fix. This is based on page 230 but is
|
|
subtly different since that code contains an error!
|
|
|
|
The old ROM has:
|
|
=================
|
|
3223 20 1A 23 23
|
|
3227 23 3E 80 A6
|
|
322B 2B B6 2B 20
|
|
322F 03 3E 80 AE
|
|
3233 2B 20 36 77
|
|
3237 23 36 FF 2B
|
|
323B 3E 18
|
|
=================
|
|
|
|
The new ROM is as follows (I typed it in earlier, which explains the
|
|
different format...)
|
|
|
|
3221 T-GR-ZERO CP +91 Compare e to 91 hex, 145 decimal.
|
|
3223 JR 323F,T-SMALL Always omit the following code.
|
|
This code has been changed to
|
|
incorporate the fix from 3032.
|
|
|
|
3225 PUSH AF Save the sign byte in A.
|
|
3226 INC A Make any FF in A into 00.
|
|
3227 OR E Test all 3 bytes now for zero.
|
|
3228 OR D
|
|
3229 JR NZ,3233,ADD-STORE Jump if not -65536.
|
|
322B POP AF Clear the stack.
|
|
322C LD A,+80 Prepare to enter 80 hex into second byte.
|
|
322E DEC HL Point to the first byte
|
|
322F LD (HL),+91 Enter 91 hex into first byte.
|
|
3231 PUSH AF Put the 80 on the stack. Note: DE
|
|
still holds zero so the third and fourth
|
|
bytes will be cleared.
|
|
3232 INC HL Restore HL pointer.
|
|
3233 ADD-STORE POP AF Restore the sign byte in A.
|
|
3234 LD (HL),A Store it on the stack.
|
|
3235 INC HL Point to the next location.
|
|
3236 LD (HL),E Store the low byte of the result.
|
|
3237 INC HL Point to the next location.
|
|
3238 LD (HL),D Store the high byte of the result.
|
|
3239 DEC HL Move the pointer back to
|
|
323A DEC HL address the first byte of the
|
|
323B DEC HL result.
|
|
323C RET Return to complete the routine.
|
|
|
|
323D JR 3272,NIL-BYTES These locations are spare.
|
|
------------------------------------------------------------------------
|
|
Miscellaneous routines are stored in the area 386E-3CFF where the
|
|
original ROM has FF-bytes. They are:
|
|
|
|
- the rest of the NMI routine
|
|
- the new LIST and CONTINUE commands
|
|
- the new interrupt routine for the extra cursor
|
|
- the tokenization routine.
|
|
|
|
(sorry, no disassembly (yet))
|
|
|
|
386E FE 56 C2 6A 00 21 00 00 06 04 E5 C5 3E FF 0E 64
|
|
387E 2F D3 FE 06 64 10 FE 0D 20 F6 CD EE 3C C1 E1 0E
|
|
388E 04 CB 25 CB 14 0D 20 F9 B5 6F 10 DE D1 C1 F1 E3
|
|
389E ED 45 21 A6 38 E5 ED 45 ED 57 D1 C1 F5 E1 22 E9
|
|
38AE 5B F3 F1 E1 ED 73 FE 5B 31 FE 5B FD E5 DD E5 D9
|
|
38BE C5 D5 E5 D9 08 F5 08 C5 D5 E5 F5 ED 7B FE 5B FD
|
|
38CE 21 3A 5C 2A 4B 5C ED 5B 53 5C A7 ED 52 38 4C 2A
|
|
38DE 4F 5C 01 14 00 09 EB A7 ED 52 38 3F 21 B5 5C ED
|
|
38EE 52 30 38 21 A8 61 ED 52 38 31 FD CB 36 FE ED 56
|
|
38FE FB FD 36 31 02 CD 6E 0D FD CB 02 EE 11 1F 39 AF
|
|
390E CD 0A 0C FD 36 00 FF CD 97 10 FD CB 01 9E C3 AC
|
|
391E 12 80 4E 4D 49 20 62 72 65 61 EB F3 3E FF 01 FF
|
|
392E FF 11 14 0A 21 58 FF D9 11 87 5E C3 CB 11 FD CB
|
|
393E 36 7E CA 5F 1E FD CB 36 BE F3 31 EA 5B F1 E1 D1
|
|
394E C1 D9 08 F1 E1 D1 C1 D9 08 DD E1 FD E1 ED 7B FE
|
|
395E 5B FD CB AF 56 C0 FB C9 21 72 39 11 F8 FF 01 08
|
|
396E 00 ED B0 C9 00 00 00 00 00 00 40 00 2A FD FF 7C
|
|
397E 1F 1F 1F E6 03 F6 58 67 CB 7E C8 7E 2F 77 C9 0F
|
|
398E 00 F0 00 FF 00 00 0F 0F 0F F0 0F FF 0F 00 F0 0F
|
|
399E F0 F0 F0 FF F0 00 FF 0F FF F0 FF FF FF CD 7A 39
|
|
39AE 3A F8 FF 87 C6 C5 6F 26 39 5E 23 56 EB CD 2C 16
|
|
39BE CD 7A 39 7E 2F 77 C9 93 3A E4 39 F9 39 04 3A CF
|
|
39CE 39 2A FD FF 2C 20 0B 7C C6 08 67 2F E6 18 20 02
|
|
39DE 26 40 22 FD FF C9 2A FD FF 2D 7D 3C 20 F4 7C D6
|
|
39EE 08 67 2F E6 18 20 EB 26 50 18 E7 2A FD FF 7D C6
|
|
39FE 20 6F 30 DE 18 D1 2A FD FF 7D D6 20 6F 30 D3 18
|
|
3A0E DD 21 8D 39 11 90 81 01 04 02 37 CD 39 3A 2A 36
|
|
3A1E 5C 24 11 80 20 01 01 08 B7 CD 39 3A 2A 7B 5C 11
|
|
3A2E A5 90 01 01 08 B7 CD 39 3A AF C9 08 D5 DD 2A FD
|
|
3A3E FF E5 C5 DD 7E 00 AE 28 08 3C 20 3C 08 38 38 08
|
|
3A4E 3D 5F 51 15 20 03 51 05 23 DD 24 DD 7E 00 AE AB
|
|
3A5E 20 26 15 20 F4 51 23 10 F0 3A FF FF AB 7B 32 FF
|
|
3A6E FF 28 0D 3E 14 CD 85 0F 3A FF FF E6 01 CD 85 0F
|
|
3A7E C1 E1 D1 7A A7 E1 C9 08 C1 E1 58 16 00 19 D1 14
|
|
3A8E 7A BB 20 A8 C9 DD E5 08 F5 CD 0F 3A 08 F1 08 28
|
|
3A9E 08 CD 81 0F DD E1 C3 CF 39 21 5E 01 11 5E 01 CD
|
|
3AAE B5 03 DD E1 C9 2A 59 5C 7E FE 22 20 02 36 20 2B
|
|
3ABE 23 7E FE 0D C8 FE 22 28 6C FE 0E 28 73 FE 3C 38
|
|
3ACE EF FE 5B 30 EB 22 B0 5C 16 A3 01 94 00 2A B0 5C
|
|
3ADE 03 0A FE 36 CA 45 3B CB 7F 28 03 14 18 F2 BE 20
|
|
3AEE EF 0B 0A 03 17 30 E9 1E 01 03 23 1C 0A BE 28 F9
|
|
3AFE CB 7F 20 03 0B 18 D6 14 E6 7F BE 20 D0 23 7E FE
|
|
3B0E 20 28 0B 7A FE BF 28 C5 FE AC 28 C1 1D 2B 1C 06
|
|
3B1E 00 4B A7 ED 42 7E FE 20 28 02 23 0D 72 E5 23 CD
|
|
3B2E E8 19 E1 18 8B 23 7E FE 22 28 F8 FE 80 C8 18 F5
|
|
3B3E 23 23 23 23 23 18 EC E5 ED 5B 61 5C A7 ED 52 E1
|
|
3B4E D0 18 E0 FE 0D D8 C2 E9 10 CD B3 3A 3E 0D 37 C9
|
|
3B5E CD BF 02 2A 3D 5C 5E 23 56 21 7F 10 A7 ED 52 28
|
|
3B6E 06 21 68 11 ED 52 C0 3A FA FF 5F 3A 89 5C 32 FA
|
|
3B7E FF 3A F9 FF 47 3A 6B 5C 32 F9 FF B8 28 2D 38 2B
|
|
3B8E 47 BB 30 1B 2A FD FF 7D CB 2C CB 2C CB 2C CB 2C
|
|
3B9E 1F CB 2C 1F 1F 1F 1F 2F E6 1F D6 07 B8 30 0C CD
|
|
3BAE 04 3A 3A FB FF 3C 32 FB FF 18 4C 3A FB FF A7 28
|
|
3BBE 0F 3D 32 FB FF CD 06 3C 38 3D AF 32 FB FF 18 37
|
|
3BCE CD 06 3C 21 FC FF 7E 36 00 30 2C A7 20 0A 3A 09
|
|
3BDE 5C 32 FB FF 36 01 18 08 3A 0A 5C 32 FB FF 36 02
|
|
3BEE CD AB 39 FD CB 01 AE FD 36 C8 FF FD 36 CC FF FD
|
|
3BFE 36 07 00 FD CB 02 DE C9 3E 7F DB FE 1F 1F 3F D0
|
|
3C0E 3E FE DB FE 1F 3F D0 21 F8 FF 3E F7 DB FE 36 01
|
|
3C1E CB 67 37 C8 3E EF DB FE 36 00 1F 3F D8 1F 1F 36
|
|
3C2E 04 3F D8 36 03 1F 3F D8 36 02 1F 3F C9 3E 02 F5
|
|
3C3E DF FE 2A 20 05 E7 F1 C3 FB 17 F1 FD 36 02 00 CD
|
|
3C4E 30 25 C4 01 16 DF CD 70 20 38 06 DF FE 3B 20 63
|
|
3C5E E7 DF FE 3A 28 5D FE 0D 28 59 FE 2C 28 05 CD 82
|
|
3C6E 1C 18 04 CD E6 1C DF FE 2C 20 1E E7 CD DE 1C CD
|
|
3C7E EE 1B CD 99 1E 78 B1 20 03 01 00 40 ED 43 74 5C
|
|
3C8E CD 99 1E ED 43 72 5C 18 0E CD EE 1B CD 99 1E ED
|
|
3C9E 43 72 5C ED 43 74 5C 2A 72 5C 22 49 5C CD 6E 19
|
|
3CAE 11 00 00 CD 65 18 D7 ED 4B 74 5C CD 80 19 38 F0
|
|
3CBE 28 EE C9 CD EE 1B 01 0F 27 ED 43 74 5C 01 00 00
|
|
3CCE ED 43 72 5C 18 D1 3E 03 C3 3D 3C CD 8E 02 20 FB
|
|
3CDE CD 1E 03 30 F6 F5 CD 8E 02 7A A3 3C 20 F8 F1 C9
|
|
3CEE CD D9 3C D6 30 38 F9 FE 0A D8 D6 07 FE 10 D8 18
|
|
3CFE EF 00
|
|
------------------------------------------------------------------------
|
|
A new character set is stored in place of the old one at 3D00-3FFF.
|
|
|
|
3D00 00 00 00 00 00 00 00 00 00 18 18 18 18 00 18 00
|
|
3D10 00 24 24 00 00 00 00 00 00 14 16 1C 36 1C 34 14
|
|
3D20 00 10 3C 50 38 14 78 10 00 62 64 08 10 26 46 00
|
|
3D30 00 10 28 10 2A 44 3A 00 00 08 10 00 00 00 00 00
|
|
3D40 00 18 30 30 30 30 18 00 00 30 18 18 18 18 30 00
|
|
3D50 00 00 6C 38 FE 38 6C 00 00 00 18 18 7E 18 18 00
|
|
3D60 00 00 00 00 00 10 10 20 00 00 00 00 3E 00 00 00
|
|
3D70 00 00 00 00 00 18 18 00 00 00 06 0C 18 30 60 00
|
|
3D80 00 38 6C 6C 6C 6C 38 00 00 18 38 18 18 18 3C 00
|
|
3D90 00 3C 66 06 3C 60 7E 00 00 3C 66 0C 06 66 3C 00
|
|
3DA0 00 0C 1C 2C 4C 7E 0C 00 00 7E 60 7C 06 66 3C 00
|
|
3DB0 00 3C 60 7C 66 66 3C 00 00 7E 06 0C 18 30 30 00
|
|
3DC0 00 3C 66 3C 66 66 3C 00 00 3C 66 66 3E 06 3C 00
|
|
3DD0 00 00 00 10 00 00 10 00 00 00 10 00 00 10 10 20
|
|
3DE0 00 00 0C 18 30 18 0C 00 00 00 00 3E 00 3E 00 00
|
|
3DF0 00 00 30 18 0C 18 30 00 00 3C 66 0C 18 00 18 00
|
|
3E00 3C 42 9A AA 9E 40 3C 00 00 3C 66 66 7E 66 66 00
|
|
3E10 00 7C 66 7C 66 66 7C 00 00 3C 66 60 60 66 3C 00
|
|
3E20 00 78 6C 66 66 6C 78 00 00 7E 60 7C 60 60 7E 00
|
|
3E30 00 7E 60 7C 60 60 60 00 00 3C 66 60 6E 66 3C 00
|
|
3E40 00 66 66 7E 66 66 66 00 00 7E 18 18 18 18 7E 00
|
|
3E50 00 06 06 06 66 66 3C 00 00 66 6C 78 78 6C 66 00
|
|
3E60 00 60 60 60 60 60 7E 00 00 C6 EE FE D6 C6 C6 00
|
|
3E70 00 C6 E6 F6 DE CE C6 00 00 3C 66 66 66 66 3C 00
|
|
3E80 00 7C 66 66 7C 60 60 00 00 7C C6 C6 D6 CE 7C 02
|
|
3E90 00 7C 66 66 7C 6C 66 00 00 3C 60 3C 06 66 3C 00
|
|
3EA0 00 7E 18 18 18 18 18 00 00 66 66 66 66 66 3C 00
|
|
3EB0 00 66 66 66 66 3C 18 00 00 C6 C6 C6 D6 FE 6C 00
|
|
3EC0 00 C6 6C 38 38 6C C6 00 00 C6 6C 38 10 10 10 00
|
|
3ED0 00 7C 0C 18 30 60 7C 00 00 1E 18 18 18 18 1E 00
|
|
3EE0 00 00 60 30 18 0C 06 00 00 78 18 18 18 18 78 00
|
|
3EF0 00 18 3C 5A 18 18 18 00 00 00 00 00 00 00 00 FF
|
|
3F00 00 3C 66 60 F8 60 FE 00 00 00 3C 06 3E 66 3E 00
|
|
3F10 00 60 60 7C 66 66 7C 00 00 00 3C 60 60 60 3C 00
|
|
3F20 00 06 06 3E 66 66 3E 00 00 00 3C 66 7C 60 3E 00
|
|
3F30 00 1C 30 38 30 30 30 00 00 00 7C CC CC 7C 0C 78
|
|
3F40 00 60 60 7C 66 66 66 00 00 18 00 38 18 18 3C 00
|
|
3F50 00 0C 00 0C 0C 0C 6C 38 00 60 6C 78 70 78 6C 00
|
|
3F60 00 70 30 30 30 30 78 00 00 00 6C FE D6 C6 C6 00
|
|
3F70 00 00 7C 66 66 66 66 00 00 00 3C 66 66 66 3C 00
|
|
3F80 00 00 7C 66 66 7C 60 60 00 00 7C CC CC 7C 0C 0E
|
|
3F90 00 00 5C 76 60 60 60 00 00 00 38 60 38 0C 78 00
|
|
3FA0 00 30 78 30 30 30 1C 00 00 00 CC CC CC CC 76 00
|
|
3FB0 00 00 66 66 66 3C 18 00 00 00 C6 C6 D6 FE 6C 00
|
|
3FC0 00 00 66 3C 18 3C 66 00 00 00 CC CC CC 7C 0C 78
|
|
3FD0 00 00 7E 0C 18 30 7E 00 1C 30 30 60 30 30 1C 00
|
|
3FE0 18 18 18 18 18 18 18 00 38 0C 0C 06 0C 0C 38 00
|
|
3FF0 00 00 32 4C 00 00 00 00 3C 42 99 A1 A1 99 42 3C
|
|
------------------------------------------------------------------------
|
|
|