54279 E 704,160: POKE 53256,2 30 MEM = PEEK(106) - 8 40 POKE 54279, MEM: POKE 53277,3: S TART = MEM * 256 + 1024 50 FOR LOOP = 100 TO 119: READ BYTE : POKE START + LOOP, BYTE: NEXT LO OP 60 DATA 16,16,56,40,40,56,40,40,40 70 DATA 124,84,124,84,254,146,254,1 70,170,68 100 END You can change the color, width, resolution, and horizontal position of the player in the example by altering the registers used above. Each player is one byte (eight bits) wide. Single line resolution P/M characters (POKE 559,62) can be up to 256 bytes high. Double line resolution P/M characters (POKE 559,46) can be up to 128 bytes high. In either case, they can map to the height of the screen. Missiles have the same height, but are only two bits wide each. Four missiles can be combined into a fifth player by setting BIT 4 of location 623 ($26F). You need not fill the entire height of a P/M character, but you should POKE unused bytes with zero to eliminate any screen garbage. You can do this by: FOR N = PMBASE + 1024 TO PMBASE + 2048: POKE N,0: NEXT N where PMBASE is the starting address of the reserve memory area. In double line resolution, change the loop value to N = PMBASE + 512 TO PMBASE + 1024. Here's a short machine language routine to do the same thing. You would put the start address of the area to be loaded with zero and the number of bytes to be cleared in with the USR call as the first two parameters. In this example, I have arbitrarily chosen 38012 and 2048 for these values. 10 START = 38012: BYTE = 2048: DIM PGM$(42) 20 FOR LOOP = 1 TO 42: READ ML: PGM $(LOOP, LOOP) = CHR$(ML): NEXT LOO P 30 DATA 104,104,133,204,104,133,203 ,104,133,206,104 40 DATA 133,205,166,206,160,0,169,0 ,145,203,136 50 DATA 208,251,230,204,202,48,6,20 8,244,164