Specifications

CONSTRUCTION
Addr. Code Label Mneumonics Remarks
0000 .ORG 0000H
26 11 LINE_NUMB: EQU 1126H
28 11 ROW_NUMB: EQU 1128H
29 11 CHAR_NUMB: EQU 1129H
25 11 NIB_FL: EQU 1125H
00 11 BUFFER_MEM: EQU 1100H
00 11 NIBLE_BUF: EQU 1100H
29 11 CHAR_NO: EQU 1129H
50 11 AUX_STORE: EQU 1150H
27 11 CHAR_POS: EQU 1127H
05 00 F1KEY: EQU 05H
D6 00 F2KEY: EQU D6H
04 00 F3KEY: EQU 04H
DC 00 F4KEY: EQU DCH
0000 31 FF 13 LXI SP,13FFH
0003 F3 DI
0004 C3 80 00 JMP 0080H
0080 .ORG 80H
0080 CD E6 04 CALL CRTCON_INIT ;initialise c.r.t.c.
0083 CD 0B 05 CALL CLEAR ;clear video memory
0086 3E 00 MVI A,00
0088 D3 80 OUT 80H
008A CD 12 04 CALL KBD ;CALL KEYBOARD
008D 4F BEG: MOV C,A
008E DB 80 IN 80H
0090 E6 03 ANI 03H
0092 FE 01 CPI 01
0094 CA CA 00 JZ HINDI
0097 FE 00 CPI 0
0099 CA A9 00 JZ ENGLISH
009C FE 02 CPI 02H
009E CA BE 00 JZ TAMIL
00A1 FE 03 FL: CPI 03H
00A3 CA A6 00 JZ LANG3
00A6 C3 8D 00 LANG3: JMP BEG ;YET UNDEFINED.
00A9 79 ENGLISH: MOV A,C
00AA CD 98 01 E: CALL CL_CH_CK ;CONTROL CHARACTER CHECK
00AD D2 B6 00 JNC CURSORA
00B0 CD E5 00 CALL NIBST ;NIBBLE STORE
00B3 CD 1A 01 CALL VDUST ;VdU STORE MEANS WRITE VdRAM
00B6 CD 22 02 CURSORA: CALL INC_SP ;CURSOR NEXT
00B9 C3 8D 00 JMP BEG
00BC 00 NOP
00BD 00 NOP
00BE 79 TAMIL: MOV A,C
00BF CD B4 02 CALL CHOOKT ;COMPARE HOOK CHARACTERS IN
TAMIL
00C2 DA D4 00 JC TAMHKFIL ;TAMIL HOOK FILLING
00C5 C3 AA 00 JMP E
00C8 00 NOP
00C9 00 NOP
00CA 79 HINDI: MOV A,C
00CB CD D2 02 CALL HIHOCK ;COMPARE HOOK CHARACTER
HINDI
00CE DA DA 00 JC HINHK ;HINDI HOOK FILLING ROUTINE
00D1 C3 AA 00 JMP E
00D4 CD 13 03 TAMHKFIL: CALL HIHKFIL ;CALL HOOK CHARACTER FILL
00D7 C3 B6 00 JMP CURSORA
00DA F5 HINHK: PUSH PSW
00DB CD 8A 03 CALL ROW13FIL ;CALL 13TH ROW FILL
00DE F1 POP PSW
00DF CD 48 03 CALL HI_HO_CHFIL ;CALL HINDI HOOK FILL
00E2 C3 B6 00 JMP CURSORA
;NIBBLE STORE ROUTINE (ASCI CODE IN ACC.for current character say $)
00E5 C5 NIBST: PUSH B
00E6 D5 PUSH D
00E7 E5 PUSH H
00E8 5F MOV E,A
00E9 16 08 MVI D,8 ;Start address of char.gen ROM
00EB 1A LDAX D ;GET LOW ADDRES OF
CHARACTER TABLE
00EC 4F MOV C,A
00ED 3E 80 MVI A,80H ;ADD 80H TO A
00EF 83 ADD E
00F0 5F MOV E,A
00F1 1A LDAX D ;Get high address of cha. table
00F2 C6 08 ADI 8
00F4 47 MOV B,A
00F5 0A LDAX B ;b-c contain start address of char.table
of “$”
00F6 16 00 MVI D,00
00F8 21 00 11 LXI H,NIBLE_BUF ;BUFFER MEMORY STORING
NIBBLE BY NIBBLE
00FB 0A B2: LDAX B ;Get pixel code, one byte
00FC 5F MOV E,A ;move into E
00FD 1F RAR ;Get first nibble of four dots
00FE 1F RAR
00FF 1F RAR
0100 1F RAR
0101 E6 0F ANI 0FH
0103 77 MOV M,A ;store first nibble, left
0104 23 INX H ;to store at next address
0105 14 INR D ;increment counter
0106 7B MOV A,E ;mov a,e
0107 E6 0F ANI 0FH ;NEXT FOUR DOTS
0109 77 MOV M,A ;Store it in buffer
010A 23 INX H
010B 14 INR D
010C 7A MOV A,D ;check if all (12 lines x 3nibles =36)
010D FE 24 CPI 24H ;compare if all 36 nibbles for $ saved
010F CA 16 01 JZ EN
0112 03 INX B
0113 C3 FB 00 JMP B2
0116 E1 EN: POP H
0117 D1 POP D
0118 C1 POP B
0119 C9 RET ;Data storage in 100-1123 buffer
memory over
;VIDEO RAM STORE ROUTINE
;ROW NO.AND CHARACTER NUMBER AT ENTRY, STORED IN 1128 AND 1127
011A 3A 27 11 VDUST: LDA CHAR_POS ;CHARACTER POSITION ON
SCREEN
011D CD 8A 01 CALL CH_NUMB ;CALCULATES CHAR. SLOT FROM
CHAR.NO.
0120 5F MOV E,A
0121 16 14 MVI D,14H
0123 3E FF MVI A,FFH
0125 32 26 11 STA LINE_NUMB ;LINE NO. STORED IN 1126
0128 21 00 11 LXI H,BUFFER_MEM ;POINT TO BUFFER MEMORY
012B 3A 26 11 NXTLIN: LDA LINE_NUMB
012E 3C INR A
012F 32 26 11 STA LINE_NUMB ;lines 0 -11 decimal
0132 3A 28 11 LDA ROW_NUMB ;rows 0 -15 decimal
0135 17 RAL
0136 17 RAL
0137 17 RAL
0138 17 RAL
0139 E6 F0 ANI F0H
013B 47 MOV B,A
013C 3A 26 11 LDA LINE_NUMB
013F B0 ORA B ;GET HIGH ADDRESS
0140 32 00 18 STA 1800H ;STORE IN VIDEO LATCH 74374
0143 3A 26 11 LDA LINE_NUMB
0146 FE 0C CPI 0CH ;CHECK FOR > 12 LINES
0148 C2 4C 01 JNZ STORE
014B C9 RET
014C 3A 25 11 STORE: LDA NIB_FL ;1125 H IS USED FOR STORING
ODD/EVEN CHAR. IN D0 BIT
014F 1F RAR
0150 DA 73 01 JC LOAD_RT ;RIGHT HALF IS TO BE LOADED
0153 7E LEFT: MOV A,M ;TAKE BYTE (NIBBLE BUFFER)
0154 17 RAL
0155 17 RAL
0156 17 RAL
0157 17 RAL
0158 E6 F0 ANI F0H ;move nibble left
015A 47 MOV B,A ;save in B
015B 23 INX H ;point to next nibble buffer
015C 7E MOV A,M
015D B0 ORA B ;join with left nibble
015E 12 STAX D ;store in video ram
015F 13 INX D
0160 23 INX H ;get address of next char.slot
0161 7E MOV A,M ;Read from buffer
0162 07 RLC ;Move left
0163 07 RLC
0164 07 RLC
0165 07 RLC
0166 E6 F0 ANI F0H
(Appendix I) CONTROL PROGRAM LISTING
Errata for Part I of the article
1. Refer Fig. 1(a). Please renumber data
pins 9 through 11 and 13 through 17 of
both 2764 ICs (IC3 and IC4) as 11 through
13 and 15 through 19.
2. Refer Fig. 1(b). Interchange con-
nections between pin numbers 1 and 2 of
74LS165 (IC22) (i.e. pin 11/13 of IC23 to
go to pin 2 while pin 14 of IC23 to go to
pin 1 of IC22).
141