Msg: 141 *Conference*
06-30-91 23:36:34
From: JAMES FIELDS
To : SYSOP
Subj: EXTRA KEYS
The following program will read the PRINTER BUSY (Pin 25) and the BAR CODE DATA (WAND Pin 2) when they are crossed the PRINTER DATA LINE (Pins 3,5,7,9,11,13,15,17) and PRINTER GND (all even lines except 26) PIN CROSSED VALUE RETURNED none 0 3 1 5 2 7 4 9 8 11 16 13 32 15 64 17 128 GND 255 The program is written to take either a 2 or 16 byte string. If 2 bytes; byte 1 equals BUSY crossed with DATA/GND, byte 2 equals WAND DATA crossed with DATA/GND. If 16 bytes; first 8 bytes are with BUSY, and second 8 are with BAR CODE DATA (0 in any position = not crossed, 1 = crossed; 8 1's means in first 8 positions = BUSY crossed, 8 1's in second 8 positions = WAND crossed) I wrote this program with no ORG for a relocatable assembler. DATA PIN=> 3 5 7 9 11 13 15 17 GND | | | | | | | | | BUSY (#25)-+--+--+--+--+--+--+--+--+ | | | | | | | | | WAND DATA--+--+--+--+--+--+--+--+--+ 1 4 16 64 255 2 8 32 128 Two programs that can be used: Two byte string: 10 'load machine code 20 j$=space$(2) 30 call address,,j$ 40 bu=asc(j$):wa=asc(right$(j$,1)) 50 'use bu for BUSY, wa for WAND Sixteen byte string 10 'load machine code 20 j$=space$(16) 30 call address,,j$ 40 j1$=mid$(j$,1,8):j2$=mid$(j$,9,8) 50 j1=instr(j1$,"11111111"):if j1=0 then j1=instr(j1$,"1") else j1=9 60 j2=instr(j2$,"11111111"):if j2=0 then j2=instr(j2$,"1") else j2=9 70 'use j1 for BUSY, j2 for WAND; 9=gounded START:PUSHPSW PUSHB PUSHD MOVA,M STALENGTH INXH MOVA,M INXH MOVH,M MOVL,A PUSHH LXIH,STRING PUSHH CALLCALL1 RDBUSY:CALLCALL2 CMA ANI$02 RRC CALLCALL3 STABUSY CALLCALL4 JNZRDBUSY CALLCALL1 RDBAR:CALLCALL2 ANI$08 RRC RRC RRC CALLCALL3 STABAR CALLCALL4 JNZRDBAR MOVEIT:POPH POPD LDALENGTH MOVB,A CPI$02 JNZTRANS LXIH,BUSY TRANS:MOVA,M STAXD INXH INXD DCRB JNZTRANS ENDING:POPD POPB POPPSW RET CALL1:LXIB,$08FE LXID,$0000 MOVA,C RET CALL2:OUT$B1 IN$B3 RET CALL3:MOVD,A MOVA,E ADDD RRC MOVE,A RET CALL4:MOVA,D ADI$30 MOVM,A MOVA,C RLC MOVC,A INXH DCRB RET LENGTH:$00 BUSY:$00 BAR:$00 STRING:"0000000000000000" This is an easy way to add an additional keyboard (up to 18 keys)