segunda-feira, 18 de fevereiro de 2008

Código base RS232

Eis o código da rotina de recepção de "buffer". Agora é preciso adaptar o código da rotina anterior para criar a rotina RXBYTE. Também é preciso acrescentar o código que chaveia do registro 14 para o registro 15 do PSG. Essa operação é necessária devido à arquitetura do PSG

RX232:
; Entradas: HL = Ender Buffer em RAM
; C = Tam maximo do buffer
; Saicas : D = Bytes recebidos
; CY = 0, OK
; CY = 1, Error, A=Codigo erro
;
LD A,15
OUT [PSGAC],A
IN A,[PSGRD]
LD [PSGSAV],A
SET ABSEL,A
LD E,A
LD D,0
NEWBYTE: LD A,14
OUT [PSGAD],A
IN A,[PSGRD]
AND A ; Clear carry
BIT RTS,A
LD A,D
JR NZ,EXIT ; RTS off

LDA A,D
CP C
LD A,ERFUL
JR C,EXIT ; Buffer full

PUSH BC
PUSH HL
CALL RXBYTE
POP HL
POP BC
JR C,EXIT ; Error

LD [HL],A ; Save byte
INC HL
INC D ; Incr counter
JR NEWBYTE ; Next byte

EXIT: PUSH AF
LD A,15
OUT [PSGAD],A
LD A,[PSGSAV]
OUT [PSGWR],A
POP AF
RET

Nenhum comentário: