Hi Michelle,
I'm not sure if you are looking for any tips on Z80 assy... if not, just say so. Anyway, you can shorten your code a bit if you want.
(existing)
Con_Chk: ld b,stat_loop_cnt ;load B with the 256 loops
Con_In: ld e,FFh ;value for single status checking
ld c,condir ;BDOS function 6 for direct I/O
call bdos
jp nz,con_valid ;jump if A contains a character
dec b ;one less loop to go
ld a,b
cp 00h ;have all loops been executed?
jp nz,Con_In ;if not, keep looping
djnz Con_In ;check again
Also, the BDOS calls don't guarantee that they don't use/modify registers, so you should push BC before making the BDOS call (since you care about the value in B).
Another tip, if you did need to check B for zero (not using the DJNZ to decrement and jump), the DEC B instruction sets the Z flag if the result is 0, so there isn't a need to load it into A and CP 0. If you weren't decrementing B, and just need to check it for zero, you can LD A,B then OR A, that will set the Z flag if B was zero, and it takes 2 bytes of code.
-Ed