High Resolution Invaders
High Resolution Invaders generates a 234 line by 31 column display, with 35 borders lines above and below. It uses a value of $0C for the I register and allows the hardware line counter to increment after each scan line. The top display area line begin when the hardware line counter has a value of 3 and ends 234 scan lines later when the hardware line counter has a value of 4. This is shown in the following annotated screenshot:
The game uses a similar technique to that used in Software Farm's Z-Xtricator (which used a value of $1E for the I register) but was released the year before it.
The display driver replicates the display routines and display loop found in the ZX81 ROM, albeit with small modifications. The display driver begins at location $40D3. The IM1 interrupt routine located at $0038 in the ZX81 ROM is replaced with an IM2 interrupt routine. When an interrupt occurs, a vector address is formed using the value of the I register for the upper 8 bits ($0C) and the value on the data bus for the lower 8 bits ($FF). Hence the vector address is $0CFF. The bytes found here in the ZX81 ROM are $C5 and $40 and so the Z80 jumps to $40C5. A copy of the ZX81's IM1 interrupt routine resides here, with the only difference being that the C register is reset to 1 instead of 8 so that the display file address changes for every scan line.
The game works with both editions of the ZX81 ROM, but is hard-coded to generate a display consisting of 309 scan lines (6 lines for the vertical sync pulse, 35 lines for the top border, 234 lines for the main display area and 35 lines for the bottom border). This means the game always generates a 50Hz picture even when used on a ZX81 configured for 60Hz operation.
The changes made to the copy of the display loop changes its timing slightly and can result in the picture being skewed horizontally. The issue can often be resolved by simply resetting the ZX81 and reloading the game. Alternatively, the horizontal hold on the TV can be adjusted. This issue was mentioned in a review in ZX Computing magazine (Dec 1983/Jan 1984, page 153):