AHS%psuvm.bitnet@rutgers.edu (06/19/88)
Tom Almy, toma@tekgvs.TEK.COM, writes of his set of KBD*.com programs:
All of these [AT only] programs were written by me, using the CFORTH
Forth Compiler, and are placed in public domain for the benefit of
other PC users who are frustrated with these keyboard designs.
I am not supplying sources, the programs are small enough that DEBUG
can be used to reverse-engineer them.
Tom Almy
toma@tekgvs.TEK.COM
-----------------------------------
I attempted a dissassembly of:
KBDL COM 332 6-15-88 7:03a
I include the dissassembly below. The dissassembled code is logically
consistent in its jumps, calls, reads, and writes, but is very strange. The
resulting flow is very simple, yet this dissassembled code is so strange that I
wonder..... Further, the file KBDL.COM contains several CD 21 op-codes but
contains *no* CD 27 or CD 31 op-codes which are *necessary* to terminate and
stay resident. Is it Forth, is it Almy, is it me..... I don't know, I don't
have an AT to try it (if I would still dare try it).
TITLE KBDL
RET_NEAR MACRO
DB 0C3H
ENDM
.RADIX 16
S0000 SEGMENT
ASSUME DS:S0000, SS:S0000 ,CS:S0000 ,ES:S0000
ORG 0100H
L0100: JMP L010B
;The following DB are bytes unused by the program
DB 4C,2
L0105 DW 0000
L0107 DW 0000,000A
L010B: MOV SP, FF9A
MOV WORD PTR L0105, FF98
MOV BP, FFFE
MOV L0107,BP
CLD
CALL L017F
MOV AX, 4C00 ;Terminate *normally* with exit code of 00
INT 21
;The following DB's are bytes unused by the program
DW L0000
DW L0000
DB 80,0FC,4F,75,2DH
DB 3C,3A,75,1A,6
DB 2E,8E,6,7E,0
DB 26,0F6,6,17,4
DB 2,75,2,0B0,1DH
DB 0A2,7DH,0,7,0F9
DB 2E,0FF,2E,80,0
DB 3C,0BA,75,0BH,0A0
DB 7DH,0,4,80,0F9
DB 2E,0FF,2E,80,0
DB 0F9,2E,0FF,2E,80
DB 0,5E,58,5A,5BH
DB 1E,8E,0DBH,0B4,25
DB 0CDH,21,1F,0FF,0E6
DB 0B4,35,0CDH,21,89
DB 0D8,8C,2 DUP(0C3),0BA
DB 0C,0,0B8,0,31
DB 0CDH,21
L017F: CALL L01FE
;The following DB's are bytes unused by the program
DB 33,43,41,50,53
DB 4C,4F,43,4BH,20
DB 2DH,3E,20,43,54
DB 52,4C,2C,2 DUP(20),4C
DB 45,46,54,53,48
DB 49,46,54,20,2BH
DB 20,43,41,50,53
DB 4C,4F,43,4BH,20
DB 2DH,3E,20,43,41
DB 50
DB 53,4C,4F,43,4BH
DB 0E8,57,0,0E8,42
DB 0
DB 0BH,42,79,20,54
DB 6F,6DH,20,41,6C
DB 6DH,79,0E8,45,0
DB 0C7,6,7E,0
DW L0000
DB 0B8,15,0,0E8,97
DB 0FF,0A3,24,1,89
DB 1E,26,1,0BA,24
DB 1,52,0BA,80,0
DB 52,0BA,3C,0,52
DB 0E8,51,0,8C,0C8
DB 50,0BA,84,0,52
DB 0BA,15,0,52,0E8
DB 65,0FF,0E9,79,0FF
L01FE: POP BX
MOV AL,[BX]
XOR AH,AH
INC BX
PUSH BX
PUSH AX
ADD BX,AX
POP AX
POP DX
PUSH BX
MOV BX,DX
JMP L0231
;The following DB's are bytes unused by the program
DB 0B8,0DH,0,0E8,9
DB 0,0B8,0A,0,0E9
DB 3,0
L021C DB 1,2 DUP(0)
;The following DB's are bytes unused by the program
DB 0A2
DB 1E,2,0B4,40,0B9
DB 1,0,0BA,1E,2
DB 8BH,1E,1C,2,0CDH
DB 21,0C3
L0231: MOV CX,AX
MOV DX,BX
MOV BX,L021C
MOV AH,40 ;Write to device having the handle 0100
INT 21
RET_NEAR
;The following DB's are bytes unused by the program
DB 5BH,59,5F,5E,0E3
DB 6,8C,0D8,8E,0C0
DB 0F3,0A4,0FF,0E3
S0000 ENDS
;
END L0100
--end