Tips and Tricks
Every programmer has their own tricks, often known only to
himself. To publish this sort of thing and will be designed
this section.
Today we have:
1. Elegant clear the screen:
Usually the screen clean as follows:
XOR A; 1
OUT (# FE), A; 2
LD HL, # 4000; 3
LD DE, # 4001, 3 Size in bytes
LD BC, # 1AFF; 3
LD (HL), A; 1
LDIR; 2
Size: 15 bytes.
And we like:
XOR A; 1
OUT (# FE), A; 2
LD HL, # 5B00; 3
L1 DEC HL; 1
LD (HL), A; 1
OR (HL); 1
JR Z, L1; 2
Size: 11 bytes. Four bytes shorter. It seems a trifle, but
nice ...
2. Quickly scan the keyboard:
LD L, 0
LD A, # FE
L1 LD C, A
LD B, 5
IN A, (# FE)
L2 RRA
JR NC, YES_KEY
INC L
DJNZ L1
LD A, C
RLCA
JP C, L2
NO_KEY; no keys are pressed. In
; L sticks # 28 (40)
YES_KEY; on something pressed. In the L-code
; Keys. Convert to
ASCII can be using the tablet:
Key code key code
# 00 C. SHIFT # 14 0
# 01 Z # 15 September
# 02 X # 16 August
C # # 03 July 17
V # # 04 June 18
# 05 A # 19 P
# 06 S # 1A O
# 07 D # 1B I
# 08 F # 1C U
# 09 G # 1D Y
0A # Q # 1E ENTER
# 0B W # 1F L
# 0C E # 20 K
# 0D R # 21 J
# 0E T # 22 H
# 0F 1 # 1923 SPACE
# 10 2 # 24 S. SHIFT
# 11 3 # 25 M
# 12 4 # 26 N
# 13 5 # 27 B
If you have received value of the trigger
and keys, check the keyboard, you want to continue scanning,
then let JP L2, while the registers A, BC, L should remain the
same values that were in the Output from the procedure. In
bars scan takes maximum 1432 (NO_KEY)!
3. And here is a very old but beautiful setting IM 2 (we
were not the invented):
LD HL, TABLE_ADR; TABLE_ADR should be
LD A, H; multiple of 256!
LD I, A
LD B, L
INC A
L1 LD (HL), A
INC HL
DJNZ L1
LD (HL), A
LD L, H
LD (HL), # C9; RET
IM 2
Generate an interrupt table
with TABLE_ADR and establish processing procedures: a single
command RET. Takes only 3 +1 +2 +1 +1 +1 +1 +2 +1 +1 +2 +2 = 18
bytes.
Well enough for now ... Please send us your
Tricks, readers! If someone is able to thread the needle better
than we will be happy.