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.
Share your thoughts about the article