SYS --- Sys is the beginning of the game machine code block and is 59540 Rooms ----- Each room 388 bytes. 69 rooms. Start at 32768. End at 59540. Jump ---- 52 2-byte entries, first Y then X, signed bytes. Begins jumptable SYS+58 (59598), length 104 bytes. The jumptable is in jswxjump.dat Code ---- The code is loaded at 59540 and begins with system variables of the game. It should be started from the instrostart label. Willy ----- The character (Willy) starts at SYS+162 and has 2 directions, 8 positions each. Each position is 16 pixels high and 16 pixels (2 bytes) wide. Total 512 bytes. Character set ------------- Starts at SYS+674 and has 256 characters by 8 bytes. Title screen ------------ titlescreen.dat. 6912 bytes (6144 bytes bitmap and 768 bytes attributes). The manchester code loader -------------------------- This loader loads with speed of 44.1kHz/8=5.5125 kbps. The format is almost identical to Ethernet frame - 56 bytes preamble 10101010, 1 byte SFD 10101011 and then the manchester modulated data. The tape loader uses manchester modulation. The manchester modulator is in manwav.c. The manchesterd demodulator in loader.asm. The loader.asm code is loaded from 65000. It first clears the screen with white paper white ink no brightness no flash. Then it loads the logo pixel data and the logo character data. Then it loads a 38kB block from 27000 and then a 536B block just after the videoram. Then it moves a small piece of code just after the loaded block and executes it. This piece of code moves the 536B block to 65000 so the game is completely assembled as if it were loaded with the slow loader. Then it jumps to the game start. JSWDEMO ---------------------- The code embedded in the basic program was probably LD HL,nn LD DE,0x4000 LD BC,6912, LDIR, RET JSW4~C was loaded exceptionally beginning with 60664 (0xecf8), that's 0x360 (864) forward of normal location. The special coded started at 60429. The difference is exactly 235, the length of the special code. POKES ----- The BASIC code jsw4demo pokes: CLEAR 23855 23296 - 40 bytes UDG 23675, 0 ? 23696, 91 - like H of 23296, UDG start? 23609, 8 ? 23658, 8 no joystick -> 63483,62 63484, 0 SYS+2819, 2820 (0xf49b, 0xf49c in jswx.img) 64457, 0 SYS+3793 (0xf869 in jswx.img) RRCA -> NOP 64458, 12 SYS+3794 (0xf86a in jswx.img) RRCA -> INC C 0xed 0x43 0x9b 0xf8 64414, 0 SYS+3750 (63550, 0xf83e in jswx.img 0x4B poke1 64415, 128 SYS+3751 (0xf83f in jswx.img 0xcd 0x7f 0xf8 0xed 0x43 0x9d 0xf8 0x01) 60509, 63 intro+80 (intro+0x50) Scroll text length L 60510, 1 intro+81 (intro+0x51) Scroll text length H 60442, 0 intro+13 (intro+0xd) Room file start addr L 60443, 128 intro+14 (intro+0xe) Room file start addr H 60449, 71 intro+20 (intro+0x14) Number of rooms (1 byte) CALL 60429 (code is loaded from 60664, what normally belongs to 59800, normally the address would be 59565, that's 59800-235, exactly the start of the intro.asm) Character types --------------- 0 - space 1 - = shelf 2 - > conveyor animating 3 - < conveyor animating 4 - # wall 5 - ! kill 6 - * item 7 - \ ramp 8 - / ramp 9 - ~ shelf a - } conveyor nonanimating b - { conveyor nonanimating c - | wall d - ^ shelf e - " shelf f - + item (taken) Unreachable items ----------------- 60 (West Park) 1 uncollectable 64 (The map room) 1 uncollectable The rest 0-68 all collectable