;from cpm22.asm from Jan 24 distribution extracted by Herb Johnson ; file dated Jan 7 2024, downloaded Jan 12 2024 ; same as July 30 2023 READER ode fragment from cpm22.asm ; EXTENDED INSTRUCTIONS ; CPROM EQU 01EDH ;COPY ROM CMDSND EQU 05DDH ;SLAVE: SEND COMMAND RECSEND EQU 0AEDH ;SLAVE: SET RECORD RECRECV EQU 0CEDH ;SLAVE: GET RECORD SHMRD EQU 10DDH ;SHARED MEM READ BYTE SHMWR EQU 11DDH ;SHARED MEM WRITE BYTE DMA EQU 0FDDH ;DMA READER: ;READER CHARACTER INTO REGISTER A FROM READER DEVICE ;Z-FLAG SET IF NO DATA RECEIVED LXI H, RXSIZE DCR M ;SIZE-1 LXI H, RXIDX JM RXSER ;BUFFER EMPTY, GET SERIAL MVI D, (BUFF+100H)>>8 MOV E, M ;E=INDEX LDAX D ;A=BYTE INR M ;INDEX+1 (CLEAR Z-FLAG) RET ;RETURN BYTE RXSER: MVI M, 0 ;RESET RXIDX LXI B, 0209H ;SEQ 2, SERIAL RX DW CMDSND ;CALL KERNEL MOV A, D ;A=BUFFER SIZE STA RXSIZE ORA A ;BUFFER EMPTY? RZ ;RETURN Z-FLAG SET LXI D, BUFF+100H XRA A DW RECRECV ;SHM->DE JMP READER ;RECALL READER ; following edited in to complete source code, don't use this like this! : RXSIZE: DS 1 ;RX SHM BUFF SIZE RXIDX: DS 1 ;RX SHM BUFF INDEX ;BUFF EQU DIRBF+180h&0ff00h ;B:DRIVE/TX/RX BUFFER BUFF EQU * ;arbitrary value should be at page boundary XX00H