P8000/firmware/MON8/INA.S

92 lines
1.1 KiB
ArmAsm

;
GETA
;
; EINGABE-ROUTINE UEBER SIO-KANAL B
; ZEICHEN STEHT NACH EINGABE IM AKKUMULATOR
; MIT INTERRUPT
;
CALL PRESS
;JR Z,GETA
RET Z
CALL GETAZ
RET
;
PRESS PUSH HL
PUSH BC
LD HL,APEIN
LD B,A
LD A,(APAUS)
CP (HL)
LD A,B
POP BC
POP HL
RET
GETAZ PUSH HL
LD A,(APAUS)
CALL PUFADR
AND A
LD (APAUS),A
LD A,(HL)
POP HL
RET
;
PUFADR PUSH DE
LD D,0
LD E,A
LD HL,0F00H ; ANFANGSADRESSE DES PUFFERS IST FESTGELEGT
INC A
JR NZ,PUFA1 ; NIEDERWERTIGER TEIL NUR VON E0H BIS FFH
LD A,0E0H
PUFA1 ADD HL,DE
POP DE
RET
;
ISRZET PUSH AF
PUSH HL
IN A,(S0BD)
LD HL,MCSQ
BIT 0,(HL)
JR NZ,OHNCSQ
CP 13H
JR Z,CTS
CP 11H
JR Z,CTQ
CP 1BH
JR Z,ESCEIN
OHNCSQ PUSH AF
LD A,(APEIN)
CALL PUFADR
LD (APEIN),A
POP AF
LD (HL),A ; ZEICHEN WIRD IN DEN RINGPUFFER EINGETRAGEN
ENDIZ LD A,20H
OUT (S0BC),A ; FREIGABE FUER DEN SIO (INTERRUPT NAECHSTES ZEICHEN)
POP HL
IBRT1 POP AF
EI
RETI
;
CTS SET 6,(HL)
JR ENDIZ
;
CTQ RES 6,(HL)
JR ENDIZ
;
ESCEIN RES 4,(HL)
JR ENDIZ
;
; ISR SONDERFALL DES EMPFANGS
;
ISRSET PUSH AF
LD A,1
OUT (S0BC),A
IN A,(S0BC)
LD A,30H ; RUECKSETZEN VON FEHLERN
OUT (S0BC),A
IN A,(S0BD)
JR IBRT1
;
;