new stuff
This commit is contained in:
parent
36c6368fed
commit
f4949b5d07
|
|
@ -0,0 +1,665 @@
|
||||||
|
!*******************************************************
|
||||||
|
* *
|
||||||
|
* T E R M I N A L *
|
||||||
|
* *
|
||||||
|
* mit Einchip-Mikrorechner U 882 und CRTC 8275 *
|
||||||
|
* ============================================ *
|
||||||
|
* *
|
||||||
|
* ESCAPE_SEQUENZ Module; Version 3.1: *
|
||||||
|
* - 24 Zeilen / 80 Zeichen *
|
||||||
|
* Inhalt: *
|
||||||
|
* - Auswertung der Escape-Sequenzen *
|
||||||
|
* *
|
||||||
|
********************************************************
|
||||||
|
|
||||||
|
Bearbeiter: Heller/Kuehle / WAT/WAE
|
||||||
|
Stand: 26.01.88
|
||||||
|
|
||||||
|
Name: P8T.ESCAPE !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ESCAPE_SEQUENZ MODULE
|
||||||
|
|
||||||
|
|
||||||
|
CONSTANT
|
||||||
|
|
||||||
|
! 'Z8T.VEREINBARUNGEN' !
|
||||||
|
PARA :=254
|
||||||
|
$LISTOFF
|
||||||
|
|
||||||
|
! Werte !
|
||||||
|
P01EXT := %96 ! P0:=A8...A14, P1:=AD0...AD7, Stack intern !
|
||||||
|
P01TRI := %9E ! tri state: P0,P1,AS,DS,R/W !
|
||||||
|
|
||||||
|
! Bit Definitionen !
|
||||||
|
B0 := %1 ! bit 0 !
|
||||||
|
B1 := %2 ! bit 1 !
|
||||||
|
B2 := %4 ! bit 2 !
|
||||||
|
B3 := %8 ! bit 3 !
|
||||||
|
B4 := %10 ! bit 4 !
|
||||||
|
B5 := %20 ! bit 5 !
|
||||||
|
B6 := %40 ! bit 6 !
|
||||||
|
B7 := %80 ! bit 7 !
|
||||||
|
NB0 := %FE ! negiertes bit 0 !
|
||||||
|
NB1 := %FD ! negiertes bit 1 !
|
||||||
|
NB2 := %FB ! negiertes bit 2 !
|
||||||
|
NB3 := %F7 ! negiertes bit 3 !
|
||||||
|
NB4 := %EF ! negiertes bit 4 !
|
||||||
|
NB5 := %DF ! negiertes bit 5 !
|
||||||
|
NB6 := %BF ! negiertes bit 6 !
|
||||||
|
NB7 := %7F ! negiertes bit 7 !
|
||||||
|
|
||||||
|
! Bildparameter !
|
||||||
|
ZEILENZAHL := 24
|
||||||
|
ZEICHENZAHL := 80
|
||||||
|
|
||||||
|
! Adressen !
|
||||||
|
BRAM := %1000 ! Bildwiederholspeicher !
|
||||||
|
ZADR_TAB := %1780 ! Tabelle der Zeilenanfangsadr. !
|
||||||
|
CRT_PAR := %1C00 ! Parameter lesen / schreiben !
|
||||||
|
CRT_COM := %1C01 ! Commands schreiben !
|
||||||
|
CRTL_STAT := %1C01 ! Status lesen !
|
||||||
|
ZG0 := %4000 ! ADM31-ASCII-Zeichensatz !
|
||||||
|
ZG1 := %2000 ! Alternativ-Zeichensatz !
|
||||||
|
BELL_ADR := %8000 ! Signalton !
|
||||||
|
|
||||||
|
! Display Commands !
|
||||||
|
RES_DISPL := %00
|
||||||
|
START_DISPL := %20
|
||||||
|
STOP_DISPL := %40
|
||||||
|
READ_LPEN := %60
|
||||||
|
LD_CURSOR := %80
|
||||||
|
ENABLE_INT := %A0
|
||||||
|
DISABLE_INT := %C0
|
||||||
|
PRES_COUNT := %E0
|
||||||
|
|
||||||
|
! Parameter fuer Display-Reset-Command !
|
||||||
|
RES1 := %4F ! 80 characters/row !
|
||||||
|
RES2 := %97 ! !
|
||||||
|
RES3 := %0B ! !
|
||||||
|
RES4 := %6C ! !
|
||||||
|
|
||||||
|
! Field Attribute Code !
|
||||||
|
FAC := %80 ! Field Attribute: Normal Mode !
|
||||||
|
FACH := %01 ! Highlight !
|
||||||
|
FACB := %02 ! Blink !
|
||||||
|
FACR := %10 ! Reverse video !
|
||||||
|
FACU := %20 ! Underline !
|
||||||
|
|
||||||
|
! ASCII Control Characters entsprechend ADM 31 !
|
||||||
|
NUL := %00 ! Null ^@ !
|
||||||
|
SOH := %01 ! Start of Heading ^A !
|
||||||
|
STX := %02 ! Start of Text ^B !
|
||||||
|
ETX := %03 ! End of Text ^C !
|
||||||
|
EOT := %04 ! End of Transmission ^D !
|
||||||
|
ENQ := %05 ! Inquiry (who are you) ^E !
|
||||||
|
ACK := %06 ! Acknewledge ^F !
|
||||||
|
BEL := %07 ! Bell ^G !
|
||||||
|
BS := %08 ! Backspace ^H !
|
||||||
|
HT := %09 ! Horizontal Tabulator ^I !
|
||||||
|
LF := %0A ! Line Feed ^J !
|
||||||
|
VT := %0B ! Vertical Tabulator ^K !
|
||||||
|
FF := %0C ! Forspace ^L !
|
||||||
|
CR := %0D ! Carriage Return ^M !
|
||||||
|
SO := %0E ! Shift out ^N !
|
||||||
|
SI := %0F ! Shift in ^O !
|
||||||
|
|
||||||
|
DLE := %10 ! Data Link Escape ^P !
|
||||||
|
DC1 := %11 ! Device Control ^Q !
|
||||||
|
DC2 := %12 ! ^R !
|
||||||
|
DC3 := %13 ! ^S !
|
||||||
|
DC4 := %14 ! ^T !
|
||||||
|
NAK := %15 ! Not Acknewl. ^U !
|
||||||
|
SYN := %16 ! Synchronous Idle ^V !
|
||||||
|
ETB := %17 ! End of Trans.-Block ^W !
|
||||||
|
CAN := %18 ! Cancel ^X !
|
||||||
|
EM := %19 ! End of Medium ^Y !
|
||||||
|
SBS := %1A ! Substitute ^Z !
|
||||||
|
ESC := %1B ! Escape Sequenz ^[ !
|
||||||
|
FS := %1C ! File Separator !
|
||||||
|
GS := %1D ! Group Separator ^] !
|
||||||
|
RS := %1E ! Cursor HOME ^^ !
|
||||||
|
US := %1F ! New Line ^~ !
|
||||||
|
$LISTON
|
||||||
|
$PAGE
|
||||||
|
EXTERNAL
|
||||||
|
PUTA PROCEDURE
|
||||||
|
SIO_OUT PROCEDURE
|
||||||
|
WRITE_CHAR PROCEDURE
|
||||||
|
READ_CHAR PROCEDURE
|
||||||
|
CHAR_ADRESSE PROCEDURE
|
||||||
|
BRAM_ADR PROCEDURE
|
||||||
|
LOAD_CURSOR PROCEDURE
|
||||||
|
CLEAR_SCREEN PROCEDURE
|
||||||
|
CLEAR_LINE PROCEDURE
|
||||||
|
ROLL_DOWN PROCEDURE
|
||||||
|
CLEAR_L LABEL
|
||||||
|
ROLL_U2 LABEL
|
||||||
|
ROLL_U3 LABEL
|
||||||
|
TAB LABEL
|
||||||
|
BACK_TAB LABEL
|
||||||
|
CH_del LABEL
|
||||||
|
CH_ins LABEL
|
||||||
|
|
||||||
|
P0, P1, P2, P3, STAT0, STAT1, STAT2 BYTE
|
||||||
|
CHAR_ADR WORD
|
||||||
|
SPALTZ, ZEILZ, CHAR, ESCH0 BYTE
|
||||||
|
|
||||||
|
|
||||||
|
GLOBAL
|
||||||
|
CLEAR_SC PAGE_ERASE LINE_ERASE LABEL
|
||||||
|
ESC_AUS2 LABEL
|
||||||
|
|
||||||
|
$SECTION SEC3 PROGRAM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ESC_SEQUENZ PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Auswertung der ESC_Sequenzen
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
TCM STAT1,#B5 ! Cursor-Steuerung !
|
||||||
|
JP Z,CURSOR_CONTROL
|
||||||
|
TCM STAT1,#B7 ! Video-Atribute !
|
||||||
|
JP Z,VIDEO_CONTROL
|
||||||
|
CP CHAR,#'='
|
||||||
|
JR Z,CURSOR_FLAG
|
||||||
|
CP CHAR,#'G'
|
||||||
|
JR Z,VIDEO_FLAG
|
||||||
|
|
||||||
|
and STAT1,#NB4 ! ESC-Flag ruecksetzen !
|
||||||
|
CP CHAR,#':'
|
||||||
|
JR Z,CLEAR_SC
|
||||||
|
CP CHAR,#'*'
|
||||||
|
JR Z,CLEAR_SC
|
||||||
|
CP CHAR,#'U' ! set PGM !
|
||||||
|
JR Z,SET_PGM
|
||||||
|
cp CHAR,#'i' ! ESC i = TAB !
|
||||||
|
jp z,TAB ! in PUTA !
|
||||||
|
cp CHAR,#'I' ! ESC I = Back TAB !
|
||||||
|
jp z,BACK_TAB ! in PUTA !
|
||||||
|
CP CHAR,#'T' ! line erase? !
|
||||||
|
JR Z,LINE_ERASE
|
||||||
|
CP CHAR,#'Y' ! page erase? !
|
||||||
|
JR Z,PAGE_ERASE
|
||||||
|
CP CHAR,#'R' ! line delete? !
|
||||||
|
JR Z,LINE_DELETE
|
||||||
|
cp CHAR,#'Q' ! char_insert !
|
||||||
|
jr z,CHAR_INSERT
|
||||||
|
cp CHAR,#'W' ! char_delete? !
|
||||||
|
jp z,CHAR_DEL
|
||||||
|
cp CHAR,#'E' ! line_insert? !
|
||||||
|
jp z,LINE_INSERT
|
||||||
|
|
||||||
|
AND STAT1,#NB4 ! Escape_Flag ruecksetzen !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
CURSOR_FLAG:
|
||||||
|
! *** Flag setzen *** !
|
||||||
|
OR STAT1,#B5
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
VIDEO_FLAG:
|
||||||
|
! *** Flag setzen *** !
|
||||||
|
OR STAT1,#B7
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
CLEAR_SC:
|
||||||
|
! *** Bildschirm loeschen, Cursor unveraendert *** !
|
||||||
|
|
||||||
|
CALL CLEAR_SCREEN
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
SET_PGM:
|
||||||
|
! *** set program mode *** !
|
||||||
|
OR STAT1,#B3 ! PGM-Flag setzen !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
LINE_ERASE:
|
||||||
|
! *** 'space' in Cursor-Zeile ab Cursor-Pos bis Ende *** !
|
||||||
|
ld r8,#HI ZADR_TAB
|
||||||
|
ld r9,#LO ZADR_TAB
|
||||||
|
add r9,ZEILZ ! Cursor-Zeile !
|
||||||
|
ld r15,SPALTZ
|
||||||
|
call CLEAR_L ! loeschen !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
PAGE_ERASE:
|
||||||
|
! *** 'space' in Cursor-Zeile ab Curs.-Pos. bis Schirm-Ende !
|
||||||
|
call LINE_ERASE ! 'space' ab Cursor bis Zeilen-Ende !
|
||||||
|
! rr8 enthaelt Adr. der Cursor-Zeile !
|
||||||
|
ld r7,ZEILZ ! Berechnung der Zahl der Zeilen !
|
||||||
|
inc r7
|
||||||
|
ld r6,#ZEILENZAHL
|
||||||
|
sub r6,r7 ! Anzahl !
|
||||||
|
jr ULE,PAGE_E0 ! Cursor steht in der letzen Zeile !
|
||||||
|
|
||||||
|
PAGE_E1:
|
||||||
|
incw rr8 ! naechste Zeile !
|
||||||
|
call CLEAR_LINE ! Zeile loeschen !
|
||||||
|
djnz r6,PAGE_E1
|
||||||
|
|
||||||
|
PAGE_E0:
|
||||||
|
ret ! Escape-Flag in LINE_ERASE rueckgesetzt !
|
||||||
|
|
||||||
|
|
||||||
|
LINE_DELETE:
|
||||||
|
! *** Cursor-Zeile loeschen, Cursor an Zeilenanfang *** !
|
||||||
|
clr SPALTZ ! Cursor auf Zeilenanfang !
|
||||||
|
call LOAD_CURSOR
|
||||||
|
call LINE_ERASE ! Zeile loeschen, rr8 laden !
|
||||||
|
ld r14,#ZEILENZAHL-1
|
||||||
|
sub r14,ZEILZ ! zu rollende Zeilen berechnen !
|
||||||
|
jr z,LINE_D0
|
||||||
|
call ROLL_U3 ! Eintrittspunkt ohne Zeil.-loeschen !
|
||||||
|
|
||||||
|
LINE_D0:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CHAR_INSERT:
|
||||||
|
! *** Zeichen unter Cursor nach rechts verschieben *** !
|
||||||
|
ld PARA,#1
|
||||||
|
call CH_ins
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CHAR_DEL:
|
||||||
|
! *** Cursor-Zeichen loeschen, die anderen nachschieben *** !
|
||||||
|
|
||||||
|
ld PARA,#1
|
||||||
|
call CH_del
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
LINE_INSERT:
|
||||||
|
! *** Zeile einschieben auf Cursor-Position *** !
|
||||||
|
clr SPALTZ ! Cursor auf Zeilenanfang !
|
||||||
|
call LOAD_CURSOR
|
||||||
|
ld r15,ZEILZ
|
||||||
|
call ROLL_DOWN
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END ESC_SEQUENZ
|
||||||
|
$PAGE
|
||||||
|
CURSOR_CONTROL PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Positionierung des Cursors mittels
|
||||||
|
* Escape-Seq: 'ESC=YX', Y = row, X = column
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
LD R8,CHAR ! Positionswert lesen (ASCII) !
|
||||||
|
SUB R8,#%20 ! Position in Hex !
|
||||||
|
JR PL,CUCO0 ! Fehler, wenn negativ !
|
||||||
|
LD R8,#0 ! bei Fehler Wert:=0 !
|
||||||
|
|
||||||
|
CUCO0:
|
||||||
|
TCM STAT1,#B6 ! Zeile oder Spalte? !
|
||||||
|
JR Z,CUCO1 ! Flag=1: Spalte !
|
||||||
|
CP R8,#ZEILENZAHL-1
|
||||||
|
JR ULT,CUCO2
|
||||||
|
LD R8,#ZEILENZAHL-1
|
||||||
|
|
||||||
|
CUCO2:
|
||||||
|
LD ZEILZ,R8 ! Zeilenkoordinate eintragen !
|
||||||
|
OR STAT1,#B6 ! naechster Wert ist Spaltenkoordinate !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
CUCO1: ! Spalte !
|
||||||
|
CP R8,#ZEICHENZAHL-1
|
||||||
|
JR ULT,CUCO3
|
||||||
|
LD R8,#ZEICHENZAHL-1
|
||||||
|
|
||||||
|
CUCO3:
|
||||||
|
LD SPALTZ,R8 ! Spaltenkoordinate eintragen !
|
||||||
|
AND STAT1,#NB4 LAND NB5 LAND NB6
|
||||||
|
CALL LOAD_CURSOR ! Cursor positionieren !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END CURSOR_CONTROL
|
||||||
|
$PAGE
|
||||||
|
VIDEO_CONTROL PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Setzen und Ruecksetzen der
|
||||||
|
* Video Attribute Codes
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
tm STAT2,#B4 !Video attribute on/off ?!
|
||||||
|
jr nz,VIDEO1 !off!
|
||||||
|
! Abfrage der Parameter !
|
||||||
|
CP CHAR,#'0'
|
||||||
|
JR Z,ESCG0
|
||||||
|
CP CHAR,#'1'
|
||||||
|
JP Z,ESCG1
|
||||||
|
CP CHAR,#'2'
|
||||||
|
JR Z,ESCG2
|
||||||
|
CP CHAR,#'3'
|
||||||
|
JR Z,ESCG1
|
||||||
|
CP CHAR,#'4'
|
||||||
|
JR Z,ESCG4
|
||||||
|
CP CHAR,#'5'
|
||||||
|
JR Z,ESCG5
|
||||||
|
CP CHAR,#'6'
|
||||||
|
JR Z,ESCG6
|
||||||
|
CP CHAR,#'7'
|
||||||
|
JR Z,ESCG5
|
||||||
|
CP CHAR,#'8'
|
||||||
|
JR Z,ESCG8
|
||||||
|
CP CHAR,#'9'
|
||||||
|
JR Z,ESCG9
|
||||||
|
CP CHAR,#'A'
|
||||||
|
JR Z,ESCGA
|
||||||
|
CP CHAR,#'B'
|
||||||
|
JR Z,ESCGB
|
||||||
|
CP CHAR,#'C'
|
||||||
|
JR Z,ESCGC
|
||||||
|
CP CHAR,#'D'
|
||||||
|
JR Z,ESCGD
|
||||||
|
CP CHAR,#'E'
|
||||||
|
JR Z,ESCGE
|
||||||
|
CP CHAR,#'F'
|
||||||
|
JR Z,ESCGF
|
||||||
|
CP CHAR,#'('
|
||||||
|
JR Z,ESCG0
|
||||||
|
CP CHAR,#')'
|
||||||
|
JR ESCG8
|
||||||
|
VIDEO1:
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ESCG0: ! Reset to Standard Video !
|
||||||
|
LD CHAR,#FAC
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCG2: ! Blinken ein !
|
||||||
|
LD CHAR,#FAC+FACB
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCG4: ! Reverse ein !
|
||||||
|
LD CHAR,#FAC+FACR
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCG6: ! Reverse + Blinken ein !
|
||||||
|
LD CHAR,#FAC+FACB+FACR
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCG8: ! Highlight aus !
|
||||||
|
LD CHAR,#FAC+FACH
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCGA: ! Highlight aus + Reverse ein !
|
||||||
|
LD CHAR,#FAC+FACR+FACH
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCGC: ! Unterstrich ein !
|
||||||
|
LD CHAR,#FAC+FACU
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
ESCGE: ! Unterstrich ein + Highlight aus !
|
||||||
|
LD CHAR,#FAC+FACU+FACH
|
||||||
|
JR VOUT
|
||||||
|
|
||||||
|
VOUT:
|
||||||
|
AND STAT1,#NB4 LAND NB7 ! ESC- und Video-Flag ruecksetzen !
|
||||||
|
CALL PUTA ! Ausgabe Video Attribut !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
! *** Blank Routinen *** !
|
||||||
|
|
||||||
|
ESCG1: ! G1, G3 (blank area) !
|
||||||
|
LD CHAR,#%20 ! Space !
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
ESCG5: ! G5, G7 (blank + reverse) !
|
||||||
|
LD CHAR,#FAC+FACR
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
ESCG9: ! blank + highlight aus !
|
||||||
|
LD CHAR,#FAC+FACH
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
ESCGB: ! blank + reverse + highlight (aus) !
|
||||||
|
LD CHAR,#FAC+FACR+FACH
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
ESCGD: ! blank + underline !
|
||||||
|
LD CHAR,#FAC+FACU
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
ESCGF: ! blank + underline + highlight (aus) !
|
||||||
|
LD CHAR,#FAC+FACU+FACH
|
||||||
|
JR VOUTB
|
||||||
|
|
||||||
|
VOUTB:
|
||||||
|
AND STAT1,#NB4 LAND NB7
|
||||||
|
CALL PUTA
|
||||||
|
CALL BLANK_AREA ! Feld loeschen !
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END VIDEO_CONTROL
|
||||||
|
|
||||||
|
|
||||||
|
BLANK_AREA PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Loeschen eines bezeichneten Feldes
|
||||||
|
* in einer Zeile (kein Rollen)
|
||||||
|
* Input: CHAR_ADR, SPALTZ
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
LD R8,CHAR_ADR
|
||||||
|
LD R9,CHAR_ADR+1
|
||||||
|
LD R10,#%20 ! Space !
|
||||||
|
LD R12,SPALTZ
|
||||||
|
OR STAT0,#B1 ! MCU-Zugriff !
|
||||||
|
|
||||||
|
BLANK0:
|
||||||
|
TCM STAT0,#B0 ! DMA aktiv?, wenn ja warten !
|
||||||
|
JR Z,BLANK0
|
||||||
|
|
||||||
|
INCW RR8
|
||||||
|
LDE R11,@RR8 ! lesen !
|
||||||
|
TCM R11,#B7 ! Video Control Char ? !
|
||||||
|
JR Z,BLANK1
|
||||||
|
|
||||||
|
LDE @RR8,R10 ! Blank ausgeben !
|
||||||
|
INC R12 ! Naechste Spalte !
|
||||||
|
CP R12,#ZEICHENZAHL
|
||||||
|
JR NZ,BLANK0
|
||||||
|
LD R10,#FAC ! Reset to standard Video !
|
||||||
|
LDE @RR8,R10
|
||||||
|
|
||||||
|
BLANK1:
|
||||||
|
AND STAT0,#NB1 ! MCU-Zugriff beendet !
|
||||||
|
RET
|
||||||
|
END BLANK_AREA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ESC_OUT_SEQ PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Ausgabe der Escape_Sequenzen entspr. Funktionstaste
|
||||||
|
* Es werden 1...3 Zeichen gesendet:
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
! Ueberpruefung auf richtige Werte !
|
||||||
|
TCM CHAR,#%80 ! ESC-Folge: CHAR>%80 !
|
||||||
|
JP NZ,ESC_OUT0
|
||||||
|
CP CHAR,#%80 ! keine Wirkung !
|
||||||
|
JR Z,ESC_OUT0
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
FKT_TAS:
|
||||||
|
tm STAT2,#B3 !VT100/ADM31 ?!
|
||||||
|
jp z,FKT_VT100
|
||||||
|
! Auswertung der Tasten-Codes ADM31 !
|
||||||
|
! Cursor Movement Tasten !
|
||||||
|
ld ESCH0,#FF !Forspace!
|
||||||
|
cp CHAR,#%86
|
||||||
|
jp z,FKT_AUS
|
||||||
|
ld ESCH0,#BS !Backspace!
|
||||||
|
cp CHAR,#%88
|
||||||
|
jp z,FKT_AUS
|
||||||
|
ld ESCH0,#LF !Linefeed!
|
||||||
|
cp CHAR,#%8A
|
||||||
|
jr z,FKT_AUS
|
||||||
|
ld ESCH0,#VT !Verticaltab!
|
||||||
|
cp CHAR,#%8B
|
||||||
|
jr z,FKT_AUS
|
||||||
|
ld ESCH0,#RS !Cursor home!
|
||||||
|
cp CHAR,#%8C
|
||||||
|
jr z,FKT_AUS
|
||||||
|
ld ESCH0,#BS
|
||||||
|
cp CHAR,#%9D
|
||||||
|
jr z,FKT_AUS
|
||||||
|
ld ESCH0,#%09
|
||||||
|
cp CHAR,#%89
|
||||||
|
jr z,FKT_AUS
|
||||||
|
! Funktionstasten !
|
||||||
|
LD ESCH0,#'W' ! char delete !
|
||||||
|
CP CHAR,#%8F
|
||||||
|
JR Z,ESC_SEQ_AUS
|
||||||
|
LD ESCH0,#'Q' ! char insert !
|
||||||
|
CP CHAR,#%85
|
||||||
|
JR Z,ESC_SEQ_AUS
|
||||||
|
LD ESCH0,#'R' ! line delete !
|
||||||
|
CP CHAR,#%84
|
||||||
|
JR Z,ESC_SEQ_AUS
|
||||||
|
LD ESCH0,#'E' ! line insert !
|
||||||
|
CP CHAR,#%81
|
||||||
|
JR Z,ESC_SEQ_AUS
|
||||||
|
LD ESCH0,#'Y' ! page erase !
|
||||||
|
CP CHAR,#%83
|
||||||
|
JR Z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'T'
|
||||||
|
cp CHAR,#%82
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'I' ! BACK_TAB !
|
||||||
|
cp CHAR,#%87
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
ESC_OUT0:
|
||||||
|
CLR CHAR
|
||||||
|
RET
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
|
||||||
|
ESC_SEQ_AUS:
|
||||||
|
! Senden der Escape_Sequenzen !
|
||||||
|
LD CHAR,#ESC ! Zeichen senden: ESC !
|
||||||
|
call ESC_AUS2
|
||||||
|
tm STAT2,#B3 !VT100/ADM31 ?!
|
||||||
|
jr nz,ESC_AUS3
|
||||||
|
ld CHAR,#'['
|
||||||
|
call ESC_AUS2
|
||||||
|
ESC_AUS3:
|
||||||
|
LD CHAR,ESCH0 ! Zeichen senden: x !
|
||||||
|
call ESC_AUS2
|
||||||
|
jr ESC_OUT0
|
||||||
|
|
||||||
|
! Ausgabe Cursor Movement Tasten ADM31 !
|
||||||
|
FKT_AUS:
|
||||||
|
ld CHAR,ESCH0
|
||||||
|
call ESC_AUS2
|
||||||
|
jr ESC_OUT0
|
||||||
|
|
||||||
|
ESC_AUS2:
|
||||||
|
TCM STAT0,#B3 ! on_line? !
|
||||||
|
JR Z,ESC_AUS1
|
||||||
|
CALL PUTA ! off_line !
|
||||||
|
ret
|
||||||
|
|
||||||
|
ESC_AUS1:
|
||||||
|
CALL SIO_OUT ! on_line !
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
! Auswertung Funktionstasten VT100-Terminal !
|
||||||
|
FKT_VT100:
|
||||||
|
! Cursor Movement Tasten !
|
||||||
|
ld ESCH0,#'C' !Cursor right!
|
||||||
|
cp CHAR,#%86
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'D' !Cursor left!
|
||||||
|
cp CHAR,#%88
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'B' !Cursor down!
|
||||||
|
cp CHAR,#%8A
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'A' !Cursor up!
|
||||||
|
cp CHAR,#%8B
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'H' !Cursor home!
|
||||||
|
cp CHAR,#%8C
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#BS
|
||||||
|
cp CHAR,#%9D
|
||||||
|
jr z,FKT_AUS
|
||||||
|
! Funktionstasten !
|
||||||
|
ld ESCH0,#'P' !Delete character!
|
||||||
|
cp CHAR,#%8F
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'@' !Insert character!
|
||||||
|
cp CHAR,#%85
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'M' !Delete line!
|
||||||
|
cp CHAR,#%84
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'L' !Insert line!
|
||||||
|
cp CHAR,#%81
|
||||||
|
jr z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'J' !Erasing from cursor to end of screen!
|
||||||
|
cp CHAR,#%83
|
||||||
|
jp z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'K'
|
||||||
|
cp CHAR,#%82
|
||||||
|
jp z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'Z' !Cursor backward tab!
|
||||||
|
cp CHAR,#%87
|
||||||
|
jp z,ESC_SEQ_AUS
|
||||||
|
ld ESCH0,#'I'
|
||||||
|
cp CHAR,#%89
|
||||||
|
jp z,ESC_SEQ_AUS
|
||||||
|
jp ESC_OUT0
|
||||||
|
|
||||||
|
END ESC_OUT_SEQ
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END ESCAPE_SEQUENZ
|
||||||
|
|
@ -0,0 +1,502 @@
|
||||||
|
!*******************************************************
|
||||||
|
* *
|
||||||
|
* T E R M I N A L *
|
||||||
|
* *
|
||||||
|
* mit Einchip-Mikrorechner U 882 und CRTC 8275 *
|
||||||
|
* ============================================ *
|
||||||
|
* *
|
||||||
|
* INIT Module; Version 4.2: *
|
||||||
|
* - 24 Zeilen / 80 Zeichen *
|
||||||
|
* Inhalt: *
|
||||||
|
* - Initialisierung Rechner, Bildspeicher, CRTC *
|
||||||
|
* - Interrupt-Service-Routinen *
|
||||||
|
* *
|
||||||
|
********************************************************
|
||||||
|
|
||||||
|
Bearbeiter: Heller/Kuehle / WAT/WAE
|
||||||
|
Stand: 29.09.88
|
||||||
|
|
||||||
|
Name: P8T.INIT !
|
||||||
|
|
||||||
|
|
||||||
|
INIT MODULE
|
||||||
|
|
||||||
|
|
||||||
|
CONSTANT
|
||||||
|
|
||||||
|
! 'P8T.VEREINBARUNGEN' !
|
||||||
|
|
||||||
|
! Werte !
|
||||||
|
P01EXT := %96 ! P0:=A8...A14, P1:=AD0...AD7, Stack intern !
|
||||||
|
P01TRI := %9E ! tri state: P0,P1,AS,DS,R/W !
|
||||||
|
SBUFL := 45 ! SIO-Puffer-Laenge !
|
||||||
|
ZDMA := 26 ! DMA ausschalten: 26*1.08=28 mys !
|
||||||
|
ZVSY := 160 ! VSYN: 192*1.08=172.8 mys !
|
||||||
|
|
||||||
|
! Bit Definitionen !
|
||||||
|
B0 := %1 ! bit 0 !
|
||||||
|
B1 := %2 ! bit 1 !
|
||||||
|
B2 := %4 ! bit 2 !
|
||||||
|
B3 := %8 ! bit 3 !
|
||||||
|
B4 := %10 ! bit 4 !
|
||||||
|
B5 := %20 ! bit 5 !
|
||||||
|
B6 := %40 ! bit 6 !
|
||||||
|
B7 := %80 ! bit 7 !
|
||||||
|
NB0 := %FE ! negiertes bit 0 !
|
||||||
|
NB1 := %FD ! negiertes bit 1 !
|
||||||
|
NB2 := %FB ! negiertes bit 2 !
|
||||||
|
NB3 := %F7 ! negiertes bit 3 !
|
||||||
|
NB4 := %EF ! negiertes bit 4 !
|
||||||
|
NB5 := %DF ! negiertes bit 5 !
|
||||||
|
NB6 := %BF ! negiertes bit 6 !
|
||||||
|
NB7 := %7F ! negiertes bit 7 !
|
||||||
|
|
||||||
|
! Bildparameter !
|
||||||
|
ZEILENZAHL := 24
|
||||||
|
ZEICHENZAHL := 80
|
||||||
|
|
||||||
|
! Adressen !
|
||||||
|
BRAM := %1000 ! Bildwiederholspeicher !
|
||||||
|
ZADR_TAB := %1780 ! Tabelle der Zeilenanfangsadr. !
|
||||||
|
CRT_PAR := %1C00 ! Parameter lesen / schreiben !
|
||||||
|
CRT_COM := %1C01 ! Commands schreiben !
|
||||||
|
CRTL_STAT := %1C01 ! Status lesen !
|
||||||
|
|
||||||
|
! spezielle Ausgabeadressen (nur High-Teil) !
|
||||||
|
ZG0 := %40 ! ADM31-ASCII-Zeichensatz !
|
||||||
|
ZG1 := %20 ! Alternativ-Zeichensatz !
|
||||||
|
BELL_ADR := %80 ! Signalton !
|
||||||
|
TRES := %C0 ! Schieberegister ruecksetzen !
|
||||||
|
|
||||||
|
! Display Commands !
|
||||||
|
RES_DISPL := %00
|
||||||
|
START_DISPL := %20
|
||||||
|
STOP_DISPL := %40
|
||||||
|
READ_LPEN := %60
|
||||||
|
LD_CURSOR := %80
|
||||||
|
ENABLE_INT := %A0
|
||||||
|
DISABLE_INT := %C0
|
||||||
|
PRES_COUNT := %E0
|
||||||
|
$PAGE
|
||||||
|
! Parameter fuer Display-Reset-Command !
|
||||||
|
RES1 := %4F ! 80 characters/row !
|
||||||
|
RES2 := %97 ! !
|
||||||
|
RES3 := %CC ! 13. Linie Unterstrich, 13 Linien !
|
||||||
|
RES4 := %6A ! visible video control !
|
||||||
|
!ruhender Cursor-Block!
|
||||||
|
RES5 := %4A !volles Feld blinkend!
|
||||||
|
RES6 := %7A !Unterstrich!
|
||||||
|
RES7 := %6C !changed for 4!
|
||||||
|
|
||||||
|
! Field Attribute Code !
|
||||||
|
FAC := %80 ! Field Attribute: Normal Mode !
|
||||||
|
FACH := %01 ! Highlight !
|
||||||
|
FACB := %02 ! Blink !
|
||||||
|
FACR := %10 ! Reverse video !
|
||||||
|
FACU := %20 ! Underline !
|
||||||
|
|
||||||
|
! ASCII Control Characters entsprechend ADM 31 !
|
||||||
|
NUL := %00 ! Null ^@ !
|
||||||
|
SOH := %01 ! Start of Heading ^A !
|
||||||
|
STX := %02 ! Start of Text ^B !
|
||||||
|
ETX := %03 ! End of Text ^C !
|
||||||
|
EOT := %04 ! End of Transmission ^D !
|
||||||
|
ENQ := %05 ! Inquiry (who are you) ^E !
|
||||||
|
ACK := %06 ! Acknewledge ^F !
|
||||||
|
BEL := %07 ! Bell ^G !
|
||||||
|
BS := %08 ! Backspace ^H !
|
||||||
|
HT := %09 ! Horizontal Tabulator ^I !
|
||||||
|
LF := %0A ! Line Feed ^J !
|
||||||
|
VT := %0B ! Vertical Tabulator ^K !
|
||||||
|
FF := %0C ! Forspace ^L !
|
||||||
|
CR := %0D ! Carriage Return ^M !
|
||||||
|
SO := %0E ! Shift out ^N !
|
||||||
|
SI := %0F ! Shift in ^O !
|
||||||
|
|
||||||
|
DLE := %10 ! Data Link Escape ^P !
|
||||||
|
DC1 := %11 ! Device Control ^Q !
|
||||||
|
DC2 := %12 ! ^R !
|
||||||
|
DC3 := %13 ! ^S !
|
||||||
|
DC4 := %14 ! ^T !
|
||||||
|
NAK := %15 ! Not Acknewl. ^U !
|
||||||
|
SYN := %16 ! Synchronous Idle ^V !
|
||||||
|
ETB := %17 ! End of Trans.-Block ^W !
|
||||||
|
CAN := %18 ! Cancel ^X !
|
||||||
|
EM := %19 ! End of Medium ^Y !
|
||||||
|
SBS := %1A ! Substitute ^Z !
|
||||||
|
ESC := %1B ! Escape Sequenz ^[ !
|
||||||
|
FS := %1C ! File Separator !
|
||||||
|
GS := %1D ! Group Separator ^] !
|
||||||
|
RS := %1E ! Cursor HOME ^^ !
|
||||||
|
US := %1F ! New Line ^~ !
|
||||||
|
DEL := %7F ! Delete !
|
||||||
|
$PAGE
|
||||||
|
EXTERNAL
|
||||||
|
MAIN PROCEDURE
|
||||||
|
SIO_OUT PROCEDURE
|
||||||
|
|
||||||
|
|
||||||
|
GLOBAL
|
||||||
|
$SECTION SECR REGISTER
|
||||||
|
|
||||||
|
$REL 0
|
||||||
|
! Ports, Status- und Hilfsregister: Reg.-Grp. 0 !
|
||||||
|
P0, P1, P2, P3, STAT0, STAT1, STAT2, BDR BYTE
|
||||||
|
CHAR_ADR WORD
|
||||||
|
SPALTZ, ZEILZ, CHAR, STAT3 BYTE
|
||||||
|
|
||||||
|
$REL %20
|
||||||
|
! Tastatureingabe !
|
||||||
|
VBYTE, ZBYTE BYTE
|
||||||
|
|
||||||
|
$REL %2C
|
||||||
|
! Hilfregister fuer Escape_Sequenzen !
|
||||||
|
LPOS_ADR WORD
|
||||||
|
ESCH0 BYTE
|
||||||
|
|
||||||
|
$REL %30
|
||||||
|
! SIO-Input-Puffer: Reg.-Grp. 3, 4, 5 !
|
||||||
|
SINPTR, SOUTPTR, SCOUNT BYTE
|
||||||
|
SWERT ARRAY [SBUFL BYTE]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$SECTION SEC0 PROGRAM
|
||||||
|
$REL 0
|
||||||
|
|
||||||
|
INTERRUPT ARRAY [6 WORD] := [IRP32 IRP33 IRP31 IRP30 IRT0 IRT1]
|
||||||
|
$PAGE
|
||||||
|
JP_MESSAGE PROCEDURE
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
jr INITIAL
|
||||||
|
|
||||||
|
END JP_MESSAGE
|
||||||
|
|
||||||
|
! Message: Copyright Name Version Datum !
|
||||||
|
MESSAGE array [* byte] := '(C) ZFT/KEAW 4.2 Jan88'
|
||||||
|
|
||||||
|
|
||||||
|
INITIAL PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Initialisierung :
|
||||||
|
* Ports, Register, SIO, Tastatur, CRTC
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
! Ports !
|
||||||
|
LD P01M,#P01EXT
|
||||||
|
LD P2M,#%FF ! P20...P27 Input !
|
||||||
|
LD P3,#%2F ! Anfangszustand, P35=1 !
|
||||||
|
LD P3M,#%51 ! DM aktiv !
|
||||||
|
|
||||||
|
! Timer T0 !
|
||||||
|
LD PRE0,#%0D ! PRE0:=3, modulo n, int. Clock !
|
||||||
|
|
||||||
|
! Timer T1 !
|
||||||
|
LD PRE1,#%06 ! PRE1:=1, single pass, int. Clock !
|
||||||
|
ld T1,#ZDMA ! Zeitkonstante fuer DMA-Dauer !
|
||||||
|
|
||||||
|
! Register !
|
||||||
|
LD SPL,#%80 ! init Stackpointer !
|
||||||
|
LD SPH,#%00
|
||||||
|
CLR IRQ ! no Int.request !
|
||||||
|
|
||||||
|
! Register loeschen !
|
||||||
|
SRP #%00
|
||||||
|
CLR R4
|
||||||
|
LD R5,#6
|
||||||
|
|
||||||
|
REG0:
|
||||||
|
LD @5,4
|
||||||
|
INC 5
|
||||||
|
CP 5,#%80
|
||||||
|
JR NZ,REG0
|
||||||
|
CLR R5
|
||||||
|
|
||||||
|
! Zeilenadressen-Tabelle laden !
|
||||||
|
srp #%10
|
||||||
|
ld r0,#HI ZADR_TAB
|
||||||
|
ld r1,#LO ZADR_TAB
|
||||||
|
ld r2,#HI BRAM
|
||||||
|
ld r3,#LO BRAM
|
||||||
|
ld r5,#ZEILENZAHL
|
||||||
|
|
||||||
|
ZADR1:
|
||||||
|
ld r6,r2
|
||||||
|
and r6,#%0F ! BRAM_ADR codieren !
|
||||||
|
or r6,r3 ! r6 enthaelt codierte ADR !
|
||||||
|
lde @rr0,r6 ! codierte ADR in Tabelle !
|
||||||
|
incw rr0
|
||||||
|
add r3,#ZEICHENZAHL ! naechste Adr. in rr2 !
|
||||||
|
jr nc,ZADR0 ! Uebertrag? !
|
||||||
|
inc r2
|
||||||
|
|
||||||
|
ZADR0:
|
||||||
|
djnz r5,ZADR1 ! Schleifenzaehler !
|
||||||
|
|
||||||
|
! SIO Vorbereiten !
|
||||||
|
LD SINPTR,#SWERT ! Input-Pointer laden !
|
||||||
|
LD SOUTPTR,#SWERT ! Output-Pointer laden !
|
||||||
|
LD BDR,#%02 ! Baudratenregister laden, 9600 Baud !
|
||||||
|
LD T0,BDR ! Baudrate in T0 !
|
||||||
|
OR TMR,#%03 ! T0 laden und starten !
|
||||||
|
! Scheinausgabe SIO in MAIN1 !
|
||||||
|
or STAT0,#B3 ! on_line ein !
|
||||||
|
or STAT2,#B3 !ADM31-Mode!
|
||||||
|
|
||||||
|
! IBM (XT) Tastatur und Zeichengenerator vorbereiten !
|
||||||
|
SRP #%20
|
||||||
|
ld r2,#%04
|
||||||
|
ld r3,#%84
|
||||||
|
LD R4,#ZG0 ! nur High-Adr interessant !
|
||||||
|
LDC @RR4,R5 ! Scheinausgabe zum Einschalten ZG0 !
|
||||||
|
ld r4,#TRES
|
||||||
|
ldc @rr4,r5 ! Schieberegister ruecksetzen !
|
||||||
|
|
||||||
|
! Vorbereitung Zeilenrefresh !
|
||||||
|
LD CHAR_ADR,#HI BRAM
|
||||||
|
SRP #%10
|
||||||
|
ld r0,#HI ZADR_TAB
|
||||||
|
ld r1,#LO ZADR_TAB
|
||||||
|
LD R5,#ZEILENZAHL
|
||||||
|
|
||||||
|
! CRTC initialisieren !
|
||||||
|
CALL RESET_DISPLAY
|
||||||
|
JP MAIN
|
||||||
|
|
||||||
|
|
||||||
|
END INITIAL
|
||||||
|
$PAGE
|
||||||
|
IRP31 PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Zeilenrefresh im Tristate-Zustand
|
||||||
|
* Input: rr0, aktuelle Tabellen-Adresse
|
||||||
|
* Output: rr2, aktuelle BRAM-ADR
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
PUSH RP
|
||||||
|
SRP #%10
|
||||||
|
lde r2,@rr0 ! codierte BRAM_Adr.in r2 !
|
||||||
|
ld r3,#%F0 ! Adr. decodieren zu BRAM_ADR !
|
||||||
|
and r3,r2
|
||||||
|
and r2,#%0F
|
||||||
|
or r2,#%10 ! BRAM_ADR in rr2 !
|
||||||
|
inc r1 ! rr0 zeigt auf die naechste ZADR !
|
||||||
|
lde r4,@rr2 ! Zeilen-Start-Adr. in DMA-Zaehler laden !
|
||||||
|
djnz r5,UL2
|
||||||
|
ld r5,#ZEILENZAHL
|
||||||
|
ld r1,#LO ZADR_TAB
|
||||||
|
|
||||||
|
UL2:
|
||||||
|
OR STAT0,#B0 ! STAT0_0:=1 !
|
||||||
|
LD P01M,#P01TRI ! Tristate ein !
|
||||||
|
LD IMR,#%20 ! Int. T1 freigeben !
|
||||||
|
OR TMR,#%0C ! laden und starten !
|
||||||
|
AND P3,#NB5 ! P35 := 0, DMA ein !
|
||||||
|
TCM STAT0,#B1 ! MCU-Zugriff aktiv? !
|
||||||
|
JR NZ,UL4
|
||||||
|
EI ! T1-Int freigeben !
|
||||||
|
UL5:
|
||||||
|
TCM STAT0,#B0 ! DMA noch aktiv !
|
||||||
|
JR Z,UL5
|
||||||
|
|
||||||
|
UL4:
|
||||||
|
POP RP
|
||||||
|
IRET
|
||||||
|
|
||||||
|
END IRP31
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IRT1 PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* DMA-Zugriff ausschalten
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
OR P3,#B5 ! P35:=1, DMA aus !
|
||||||
|
LD P01M,#P01EXT ! Ports normal !
|
||||||
|
AND STAT0,#NB0 ! STAT0_0:=0 !
|
||||||
|
AND IRQ,#NB2 ! 2. Int-Req. von P31 loeschen !
|
||||||
|
LD IMR,#%0F ! IRP31, IRP32, IRP33, IRP30 freigeben !
|
||||||
|
LD T1,#ZDMA ! Zeitdauer des DMA !
|
||||||
|
AND P3,#NB6 ! P36:=0, VSYN:=0 !
|
||||||
|
IRET
|
||||||
|
|
||||||
|
|
||||||
|
END IRT1
|
||||||
|
$PAGE
|
||||||
|
IRP32 PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Bildruecklauf einleiten
|
||||||
|
* Laenge des VSYN-Signals durch T1 festlegen
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
OR P3,#B6 ! P36:=1, VSYN:=1 !
|
||||||
|
ld T1,#ZVSY ! Zeitdauer VSYN !
|
||||||
|
LD IMR,#%2A ! IRT1, IRP33, IRP30 freigeben !
|
||||||
|
OR TMR,#%0C ! laden und starten !
|
||||||
|
IRET
|
||||||
|
|
||||||
|
|
||||||
|
END IRP32
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IR_REST PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Timer 0 Routine (wird nicht benutzt)
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
IRT0:
|
||||||
|
IRET
|
||||||
|
|
||||||
|
|
||||||
|
END IR_REST
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IRP33 PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Tastatur-Eingabe-Routine (P33-Int.)
|
||||||
|
* IBM (XT) Tastatur
|
||||||
|
* - Tastatur-Flags:
|
||||||
|
* - STAT0_4 = 1 nach Uebernahme des Zeichenbytes
|
||||||
|
* - STAT0_5 = 1 nach Uebernahme des Vorbytes E0
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
tcm STAT0,#B4
|
||||||
|
jr z,TINT0
|
||||||
|
push rp
|
||||||
|
srp #%20
|
||||||
|
tcm STAT0,#B5
|
||||||
|
jr z,TINT1
|
||||||
|
tcm P2,#%E0
|
||||||
|
jr nz,TINT0
|
||||||
|
ld r0,P2
|
||||||
|
or STAT0,#B5
|
||||||
|
jr TINT0
|
||||||
|
TINT1:
|
||||||
|
ld r1,P2 !Lesen von Port 2!
|
||||||
|
or STAT0,#B4
|
||||||
|
TINT0:
|
||||||
|
ld r4,#TRES
|
||||||
|
|
||||||
|
TINTW:
|
||||||
|
tcm STAT0,#B0 ! DMA aktiv?, wenn ja, warten !
|
||||||
|
jr z,TINTW
|
||||||
|
ldc @rr4,r5 ! Schieberegister ruecksetzen !
|
||||||
|
pop rp
|
||||||
|
IRET
|
||||||
|
|
||||||
|
|
||||||
|
END IRP33
|
||||||
|
$PAGE
|
||||||
|
IRP30 PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Serielle Eingabe-Routine
|
||||||
|
* Zeichen werden im SPUFFER abgelegt
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
TCM STAT0,#B7 ! Fehlerbit gesetzt? !
|
||||||
|
JR Z,SINT1
|
||||||
|
CP SIO,#NUL ! gelesenes Zeichen=00? !
|
||||||
|
JR Z,SINT1 ! Zeichen 00 ignorieren !
|
||||||
|
cp SIO,#DEL ! gelesenes Zeichen=7F? !
|
||||||
|
jr z,SINT1 ! DEL ignorieren !
|
||||||
|
|
||||||
|
LD @SINPTR,SIO ! SIO lesen !
|
||||||
|
and @SINPTR,#NB7 ! bit 7 ausblenden !
|
||||||
|
OR STAT0,#B6 ! Zeichenbit setzen !
|
||||||
|
INC SINPTR ! Pointer erhoehen !
|
||||||
|
inc SCOUNT ! Counter erhoehen !
|
||||||
|
cp SCOUNT,#SBUFL-9
|
||||||
|
jr lt,SINT2 ! Sprung, wenn r2 kleiner !
|
||||||
|
tcm STAT1,#B2 ! CRTL_S bereits gesendet? !
|
||||||
|
jr z,SINT3 ! wenn ja, Sprung !
|
||||||
|
or STAT1,#B2 ! CTRL_S-Flag setzen !
|
||||||
|
push CHAR
|
||||||
|
ld CHAR,#DC3 ! CTRL_S !
|
||||||
|
call SIO_OUT
|
||||||
|
pop CHAR
|
||||||
|
|
||||||
|
SINT3:
|
||||||
|
cp SCOUNT,#SBUFL ! Puffer Ende erreicht? !
|
||||||
|
jr nz,SINT2
|
||||||
|
or STAT0,#B7 ! Fehler-Flag setzen !
|
||||||
|
|
||||||
|
SINT2:
|
||||||
|
CP SINPTR,#SWERT+SBUFL ! Endwert ueberschritten? !
|
||||||
|
JR NZ,SINT1
|
||||||
|
LD SINPTR,#SWERT ! Inpointer ruecksetzen !
|
||||||
|
|
||||||
|
SINT1:
|
||||||
|
IRET
|
||||||
|
|
||||||
|
|
||||||
|
END IRP30
|
||||||
|
|
||||||
|
|
||||||
|
RESET_DISPLAY PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Ruecksetzen und Initialisierung des 8275
|
||||||
|
* Ruecksetzen der internen Zaehler des CRTC
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
LD R8,#HI CRT_COM
|
||||||
|
LD R9,#LO CRT_COM
|
||||||
|
LD R10,#RES_DISPL
|
||||||
|
LDE @RR8,R10 ! Ausgabe Command !
|
||||||
|
|
||||||
|
! Parameter ausgeben !
|
||||||
|
DEC R9 ! CRT_PAR ADR einstellen !
|
||||||
|
LD R11,#%4 ! Zaehler !
|
||||||
|
LD R12,#HI RES_DISPL_PAR
|
||||||
|
LD R13,#LO RES_DISPL_PAR
|
||||||
|
|
||||||
|
PARLOOP:
|
||||||
|
LDC R10,@RR12 ! Parameter holen !
|
||||||
|
LDE @RR8,R10 ! Ausgabe Parameter !
|
||||||
|
INCW RR12
|
||||||
|
DJNZ R11,PARLOOP
|
||||||
|
|
||||||
|
! Zaehler ruecksetzen !
|
||||||
|
LD R10,#PRES_COUNT
|
||||||
|
inc r9 ! rr8=Command-Addr !
|
||||||
|
LDE @RR8,R10 ! Ausgabe Command !
|
||||||
|
lde @rr8,r10 ! Wiederholung !
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END RESET_DISPLAY
|
||||||
|
|
||||||
|
|
||||||
|
RES_DISPL_PAR ARRAY [4 BYTE] := [RES1 RES2 RES3 RES7]
|
||||||
|
|
||||||
|
|
||||||
|
END INIT
|
||||||
|
|
@ -0,0 +1,886 @@
|
||||||
|
!*******************************************************
|
||||||
|
* *
|
||||||
|
* T E R M I N A L *
|
||||||
|
* *
|
||||||
|
* mit Einchip-Mikrorechner U 882 und CRTC 8275 *
|
||||||
|
* ============================================ *
|
||||||
|
* *
|
||||||
|
* HAUPT Module; Version 5.0: *
|
||||||
|
* - Anpassung an IBM (XT) Tastatur *
|
||||||
|
* - 24 Zeilen / 80 Zeichen *
|
||||||
|
* Inhalt: *
|
||||||
|
* - MAIN Procedure mit Steuerschleife *
|
||||||
|
* - UP's: PUTA, TGETCHAR, SGETCHAR, START_DISPLAY *
|
||||||
|
* SIO_OUT, BREAK *
|
||||||
|
* *
|
||||||
|
********************************************************
|
||||||
|
|
||||||
|
Bearbeiter: Heller/Kuehle / WAT/WAE
|
||||||
|
Stand: 20.01.88
|
||||||
|
|
||||||
|
Name: P8T.MAIN !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HAUPT MODULE
|
||||||
|
|
||||||
|
|
||||||
|
CONSTANT
|
||||||
|
! 'Z8T.VEREINBARUNGEN' !
|
||||||
|
$LISTOFF
|
||||||
|
|
||||||
|
! Werte !
|
||||||
|
P01EXT := %96 ! P0:=A8...A14, P1:=AD0...AD7, Stack intern !
|
||||||
|
P01TRI := %9E ! tri state: P0,P1,AS,DS,R/W !
|
||||||
|
SBUFL := 45 ! SIO-Puffer-Laenge !
|
||||||
|
|
||||||
|
! Bit Definitionen !
|
||||||
|
B0 := %1 ! bit 0 !
|
||||||
|
B1 := %2 ! bit 1 !
|
||||||
|
B2 := %4 ! bit 2 !
|
||||||
|
B3 := %8 ! bit 3 !
|
||||||
|
B4 := %10 ! bit 4 !
|
||||||
|
B5 := %20 ! bit 5 !
|
||||||
|
B6 := %40 ! bit 6 !
|
||||||
|
B7 := %80 ! bit 7 !
|
||||||
|
NB0 := %FE ! negiertes bit 0 !
|
||||||
|
NB1 := %FD ! negiertes bit 1 !
|
||||||
|
NB2 := %FB ! negiertes bit 2 !
|
||||||
|
NB3 := %F7 ! negiertes bit 3 !
|
||||||
|
NB4 := %EF ! negiertes bit 4 !
|
||||||
|
NB5 := %DF ! negiertes bit 5 !
|
||||||
|
NB6 := %BF ! negiertes bit 6 !
|
||||||
|
NB7 := %7F ! negiertes bit 7 !
|
||||||
|
|
||||||
|
! Bildparameter !
|
||||||
|
ZEILENZAHL := 24
|
||||||
|
ZEICHENZAHL := 80
|
||||||
|
|
||||||
|
! Adressen !
|
||||||
|
BRAM := %1000 ! Bildwiederholspeicher !
|
||||||
|
ZADR_TAB := %1780 ! Tabelle der Zeilenanfangsadr. !
|
||||||
|
CRT_PAR := %1C00 !Parameter lesen / schreiben !
|
||||||
|
CRT_COM := %1C01 ! Commands schreiben !
|
||||||
|
CRTL_STAT := %1C01 ! Status lesen !
|
||||||
|
ZG0 := %4000 ! ASCII-Zeichensatz !
|
||||||
|
ZG1 := %2000 ! Alternativ-Zeichensatz !
|
||||||
|
BELL_ADR := %8000 ! Akustischer Signalgeber !
|
||||||
|
|
||||||
|
! Display Commands !
|
||||||
|
RES_DISPL := %00
|
||||||
|
START_DISPL := %20
|
||||||
|
STOP_DISPL := %40
|
||||||
|
READ_LPEN := %60
|
||||||
|
LD_CURSOR := %80
|
||||||
|
ENABLE_INT := %A0
|
||||||
|
DISABLE_INT := %C0
|
||||||
|
PRES_COUNT := %E0
|
||||||
|
|
||||||
|
! Parameter fuer Display-Reset-Command !
|
||||||
|
RES1 := %4F ! 80 characters/row !
|
||||||
|
RES2 := %97 ! !
|
||||||
|
RES3 := %0B ! !
|
||||||
|
RES4 := %6C ! !
|
||||||
|
|
||||||
|
! Field Attribute Code !
|
||||||
|
FAC := %80 ! Field Attribute: Normal Mode !
|
||||||
|
FACH := %01 ! Highlight !
|
||||||
|
FACB := %02 ! Blink !
|
||||||
|
FACR := %10 ! Reverse video !
|
||||||
|
FACU := %20 ! Underline !
|
||||||
|
|
||||||
|
! ASCII Control Characters entsprechend ADM 31 !
|
||||||
|
NUL := %00 ! Null ^@ !
|
||||||
|
SOH := %01 ! Start of Heading ^A !
|
||||||
|
STX := %02 ! Start of Text ^B !
|
||||||
|
ETX := %03 ! End of Text ^C !
|
||||||
|
EOT := %04 ! End of Transmission ^D !
|
||||||
|
ENQ := %05 ! Inquiry (who are you) ^E !
|
||||||
|
ACK := %06 ! Acknewledge ^F !
|
||||||
|
BEL := %07 ! Bell ^G !
|
||||||
|
BS := %08 ! Backspace ^H !
|
||||||
|
HT := %09 ! Horizontal Tabulator ^I !
|
||||||
|
LF := %0A ! Line Feed ^J !
|
||||||
|
VT := %0B ! Vertical Tabulator ^K !
|
||||||
|
FF := %0C ! Forspace ^L !
|
||||||
|
CR := %0D ! Carriage Return ^M !
|
||||||
|
SO := %0E ! Shift out ^N !
|
||||||
|
SI := %0F ! Shift in ^O !
|
||||||
|
|
||||||
|
DLE := %10 ! Data Link Escape ^P !
|
||||||
|
DC1 := %11 ! Device Control ^Q !
|
||||||
|
DC2 := %12 ! ^R !
|
||||||
|
DC3 := %13 ! ^S !
|
||||||
|
DC4 := %14 ! ^T !
|
||||||
|
NAK := %15 ! Not Acknewl. ^U !
|
||||||
|
SYN := %16 ! Synchronous Idle ^V !
|
||||||
|
ETB := %17 ! End of Trans.-Block ^W !
|
||||||
|
CAN := %18 ! Cancel ^X !
|
||||||
|
EM := %19 ! End of Medium ^Y !
|
||||||
|
SBS := %1A ! Substitute ^Z !
|
||||||
|
ESC := %1B ! Escape Sequenz ^[ !
|
||||||
|
FS := %1C ! File Separator !
|
||||||
|
GS := %1D ! Group Separator ^] !
|
||||||
|
RS := %1E ! Cursor HOME ^^ !
|
||||||
|
US := %1F ! New Line ^~ !
|
||||||
|
$LISTON
|
||||||
|
ZESCF :=26 !Zaehler ESC-Folge!
|
||||||
|
PARA :=254 !Parameter fuer n;row;column!
|
||||||
|
$PAGE
|
||||||
|
EXTERNAL
|
||||||
|
CHAR_ADRESSE PROCEDURE
|
||||||
|
ADR_DEC PROCEDURE
|
||||||
|
READ_ADR PROCEDURE
|
||||||
|
WR_ADR PROCEDURE
|
||||||
|
WRITE_CHAR PROCEDURE
|
||||||
|
CURSOR_POS PROCEDURE
|
||||||
|
LOAD_CURSOR PROCEDURE
|
||||||
|
ROLL PROCEDURE
|
||||||
|
CLEAR_LINE PROCEDURE
|
||||||
|
CLEAR_SCREEN PROCEDURE
|
||||||
|
ESC_SEQUENZ PROCEDURE
|
||||||
|
ESC_OUT_SEQ PROCEDURE
|
||||||
|
BREAK PROCEDURE
|
||||||
|
ESC_VT100 PROCEDURE
|
||||||
|
C_left LABEL
|
||||||
|
C_rigth LABEL
|
||||||
|
C_ft LABEL
|
||||||
|
P0, P1, P2, P3, STAT0, STAT1, STAT2 BYTE
|
||||||
|
CHAR_ADR, LPOS_ADR WORD
|
||||||
|
SPALTZ, ZEILZ, CHAR, BDR, STAT3 BYTE
|
||||||
|
VBYTE, ZBYTE BYTE
|
||||||
|
SINPTR, SOUTPTR, SCOUNT BYTE
|
||||||
|
SWERT ARRAY [SBUFL BYTE]
|
||||||
|
|
||||||
|
|
||||||
|
GLOBAL
|
||||||
|
LINE_FEED CARRIAGE_RETURN LABEL
|
||||||
|
TAB LABEL
|
||||||
|
BACK_TAB LABEL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$SECTION SEC1 PROGRAM
|
||||||
|
|
||||||
|
MAIN PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Terminal - Steuerschleife
|
||||||
|
* Input: Tastatur (TGETCHAR), bzw. SIO
|
||||||
|
* Output: Bildschirm (PUTA), bzw. SIO
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
CALL CLEAR_SCREEN ! loeschen + FAC am Zeilenende setzen !
|
||||||
|
CALL LOAD_CURSOR ! Cursor auf Anfangsposition setzen !
|
||||||
|
LD IMR,#%01 ! IRP32 -> VTRC freigeben !
|
||||||
|
CALL START_DISPLAY ! CRTC starten !
|
||||||
|
EI
|
||||||
|
LD SIO,#%00 ! Scheinausgabe SIO !
|
||||||
|
|
||||||
|
! Ausgabe Terminalgenerierung ADM31 oder VT100 umschaltbar ueber F1
|
||||||
|
Ausgabe Generierung Video Attribute umschaltbar ueber F2!
|
||||||
|
TOUT1:
|
||||||
|
tm STAT0,#B3 !online/offline ?!
|
||||||
|
jr nz,TOUT2 !online!
|
||||||
|
and STAT2,#NB5 !set war offline!
|
||||||
|
jr TOUT3
|
||||||
|
TOUT2:
|
||||||
|
or STAT2,#B5 !set war online!
|
||||||
|
TOUT3:
|
||||||
|
and STAT0,#NB3 !set offline!
|
||||||
|
call CURSOR_HOME
|
||||||
|
call CLEAR_SCREEN
|
||||||
|
tm STAT2,#B3 !ADM31/VT100 ?!
|
||||||
|
jr nz,TOUT4 !ADM31!
|
||||||
|
ld r6,#HI VT1
|
||||||
|
ld r7,#LO VT1
|
||||||
|
jr TOUT5
|
||||||
|
TOUT4:
|
||||||
|
ld r6,#HI ADM
|
||||||
|
ld r7,#LO ADM
|
||||||
|
TOUT5:
|
||||||
|
ldc r8,@rr6
|
||||||
|
ld CHAR,r8
|
||||||
|
cp CHAR,#'='
|
||||||
|
jr z,TOUT6
|
||||||
|
cp CHAR,#'#'
|
||||||
|
jr z,TOUT7
|
||||||
|
call PUTA
|
||||||
|
incw rr6
|
||||||
|
jr TOUT5
|
||||||
|
TOUT6:
|
||||||
|
tm STAT2,#B4 !Video Attribute on/off ?!
|
||||||
|
jr nz,TOUT8 !off!
|
||||||
|
ld r6,#HI VAN
|
||||||
|
ld r7,#LO VAN
|
||||||
|
jr TOUT5
|
||||||
|
TOUT8:
|
||||||
|
ld r6,#HI VAF !on!
|
||||||
|
ld r7,#LO VAF
|
||||||
|
jr TOUT5
|
||||||
|
TOUT7:
|
||||||
|
tm STAT2,#B5 !war on/off ?!
|
||||||
|
jr nz,TOUT9
|
||||||
|
and STAT0,#NB3 !set offline!
|
||||||
|
jr MAIN0
|
||||||
|
TOUT9:
|
||||||
|
or STAT0,#B3 !set online!
|
||||||
|
MAIN0:
|
||||||
|
TM STAT0,#B4 ! Zeichen im TPUFFER? !
|
||||||
|
JR NZ,MAIN1 ! wenn ja, Sprung !
|
||||||
|
TM STAT0,#B3 ! on_line? !
|
||||||
|
JR Z,MAIN0 ! wenn nein, Warteschleife !
|
||||||
|
TM STAT0,#B6 ! Zeichen im SPUFFER? !
|
||||||
|
JR Z,MAIN0 ! wenn nein, Warteschleife !
|
||||||
|
|
||||||
|
! Input ueber SIO im on_line Mode !
|
||||||
|
CALL SGETCHAR ! Zeichen aus SPUFFER in CHAR !
|
||||||
|
CALL PUTA ! Auswertung des Zeichens !
|
||||||
|
JR MAIN0 ! Warteschleife !
|
||||||
|
|
||||||
|
MAIN1:
|
||||||
|
! Input ueber Tastatur !
|
||||||
|
CALL TGETCHAR ! Zeichen aus TPUFFER in CHAR
|
||||||
|
dabei Tastaturanpassung !
|
||||||
|
CP CHAR,#%F0 ! on/off Taste? !
|
||||||
|
JR NZ,MAIN10
|
||||||
|
|
||||||
|
! Umschaltung on / off !
|
||||||
|
CLR CHAR ! neutralen Wert in CHAR !
|
||||||
|
TM STAT0,#B3
|
||||||
|
JR NZ,OFFLINE
|
||||||
|
OR STAT0,#B3 ! on_line ein !
|
||||||
|
JR MAIN0
|
||||||
|
OFFLINE:
|
||||||
|
AND STAT0,#NB3 ! off_line ein !
|
||||||
|
JR MAIN0
|
||||||
|
|
||||||
|
MAIN10:
|
||||||
|
CP CHAR,#%F1 ! Break-Taste? !
|
||||||
|
JR NZ,MAIN11
|
||||||
|
CALL BREAK ! Breakfunktion ausfuehren !
|
||||||
|
JR MAIN0
|
||||||
|
|
||||||
|
! Umschaltung VT100 <---> ADM31 ueber Taste MOD
|
||||||
|
********************************************* !
|
||||||
|
MAIN11:
|
||||||
|
cp CHAR,#%90
|
||||||
|
jr nz,MAIN14
|
||||||
|
tm STAT2,#B3 !VT100/ADM31 ?!
|
||||||
|
jr nz,ADM31
|
||||||
|
! Umschaltung VT100 ---> ADM31 !
|
||||||
|
or STAT2,#B3
|
||||||
|
jp TOUT1
|
||||||
|
! Umschaltung ADM31 ---> VT100 !
|
||||||
|
ADM31:
|
||||||
|
and STAT2,#NB3
|
||||||
|
jp TOUT1
|
||||||
|
|
||||||
|
! Umschaltung Video Attribute on <---> off ueber Taste VIDEO
|
||||||
|
********************************************************** !
|
||||||
|
MAIN14:
|
||||||
|
cp CHAR,#%A0
|
||||||
|
jr nz,MAIN13
|
||||||
|
tm STAT2,#B4 !Video Attribute on/off ?!
|
||||||
|
jr nz,V_off
|
||||||
|
or STAT2,#B4 !Video attributes off!
|
||||||
|
jp TOUT1
|
||||||
|
V_off:
|
||||||
|
and STAT2,#NB4 !Video attributes on!
|
||||||
|
jp TOUT1
|
||||||
|
MAIN13:
|
||||||
|
TCM CHAR,#B7 ! CHAR_7=1? !
|
||||||
|
JR NZ,MAIN12 ! wenn ja, Escape-Sequenz ausgeben !
|
||||||
|
CALL ESC_OUT_SEQ
|
||||||
|
JR MAIN0
|
||||||
|
|
||||||
|
MAIN12:
|
||||||
|
! on_line oder off_line Mode? !
|
||||||
|
TM STAT0,#B3 ! on_line? !
|
||||||
|
JR NZ,MAIN2 ! wenn ja, SIO_out !
|
||||||
|
|
||||||
|
! Output auf Bildschirm im off_line Mode !
|
||||||
|
CALL PUTA
|
||||||
|
JR MAIN0 ! Warteschleife !
|
||||||
|
|
||||||
|
MAIN2:
|
||||||
|
! Output ueber SIO im on_line Mode !
|
||||||
|
CALL SIO_OUT
|
||||||
|
JR MAIN0 ! Warteschleife !
|
||||||
|
|
||||||
|
END MAIN
|
||||||
|
|
||||||
|
|
||||||
|
ADM array [* byte] := 'ADM31/9600 baud/='
|
||||||
|
VT1 array [* byte] := 'VT100/9600 baud/='
|
||||||
|
VAN array [* byte] := 'Video Attr. on%R%L#'
|
||||||
|
VAF array [* byte] := 'Video Attr. off%R%L#'
|
||||||
|
$PAGE
|
||||||
|
|
||||||
|
PUTA PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Zeichen in CHAR auswerten
|
||||||
|
* Cursor setzen, Bildram beschreiben
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
! Abfrage auf Program Mode (PGM) !
|
||||||
|
!------------------------------------------------------!
|
||||||
|
! Im PGM werden alle Zeichen direkt ohne interne Verarbeitung
|
||||||
|
angezeigt. Einschalten mit ESC U, aus mit ESC u bzw. ESC X !
|
||||||
|
TCM STAT1,#B3 ! PGM-Flag setzen !
|
||||||
|
JR NZ,PUTA1
|
||||||
|
CP CHAR,#ESC ! Escape-Zeichen !
|
||||||
|
JR NZ,PUTA2
|
||||||
|
OR STAT1,#B4 ! Escape_Flag setzen !
|
||||||
|
JR PUTA0
|
||||||
|
|
||||||
|
PUTA2:
|
||||||
|
TCM STAT1,#B4 ! Escape_Flag gesetzt? !
|
||||||
|
jr NZ,PUTA0
|
||||||
|
and STAT1,#NB4 ! ESC-Flag ruecksetzen !
|
||||||
|
cp CHAR,#'X' ! clear PGM mit ESC X !
|
||||||
|
jr z,CLEAR_PGM
|
||||||
|
cp CHAR,#'u' ! clear PGM mit ESC u !
|
||||||
|
jr nz,PUTA0
|
||||||
|
|
||||||
|
CLEAR_PGM:
|
||||||
|
and STAT1,#NB3 ! PGM-Flag ruecksetzen !
|
||||||
|
jr PUTA0
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
PUTA1:
|
||||||
|
! Normal Mode !
|
||||||
|
TCM STAT1,#B4 ! Escape-Flag gesetzt ? !
|
||||||
|
JP Z,ESC_FLG
|
||||||
|
|
||||||
|
CP CHAR,#%20 ! Control oder sichtbares Zeichen? !
|
||||||
|
JR ULT,PUTA_CONTROL
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
PUTA0:
|
||||||
|
! Behandlung sichtbarer Zeichen !
|
||||||
|
CALL CHAR_ADRESSE ! aktuelle Bildramadr. berechnen !
|
||||||
|
LD CHAR_ADR,R12 ! Berechnete Adresse ablegen !
|
||||||
|
LD CHAR_ADR+1,R13
|
||||||
|
CALL CURSOR_POS ! Cursor berechnen und setzen !
|
||||||
|
CALL ROLL ! Rollen, falls Rollflag gesetzt !
|
||||||
|
LD R8,CHAR_ADR
|
||||||
|
LD R9,CHAR_ADR+1
|
||||||
|
LD R13,CHAR
|
||||||
|
CALL WRITE_CHAR ! Zeichen in Bildram eintragen !
|
||||||
|
RET
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
PUTA_CONTROL:
|
||||||
|
! Abfrage der CTRL-Zeichen !
|
||||||
|
CP CHAR,#CR ! CTRL M !
|
||||||
|
JR Z,CARRIAGE_RETURN
|
||||||
|
CP CHAR,#LF ! CTRL J !
|
||||||
|
JR Z,LINE_FEED
|
||||||
|
CP CHAR,#BS ! CTRL H !
|
||||||
|
JR Z,BACK_SPACE
|
||||||
|
CP CHAR,#VT ! CTRL K !
|
||||||
|
JR Z,VERT_TAB
|
||||||
|
CP CHAR,#FF ! CTRL L !
|
||||||
|
JR Z,FOR_SPACE
|
||||||
|
CP CHAR,#ESC ! CTRL [ !
|
||||||
|
JP Z,ESC_SEQ
|
||||||
|
CP CHAR,#RS ! CTRL ^ !
|
||||||
|
JP Z,CURSOR_HOME
|
||||||
|
cp CHAR,#HT ! CTRL I !
|
||||||
|
jr z,TAB
|
||||||
|
CP CHAR,#BEL ! CTRL G !
|
||||||
|
JP Z,BELL
|
||||||
|
RET
|
||||||
|
!------------------------------------------------------!
|
||||||
|
|
||||||
|
|
||||||
|
! Bearbeitung der Steuerzeichen !
|
||||||
|
|
||||||
|
CARRIAGE_RETURN:
|
||||||
|
! *** Cursor auf linken Rand *** !
|
||||||
|
|
||||||
|
CLR SPALTZ
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
LINE_FEED:
|
||||||
|
! *** Cursor eine Zeile nach unten *** !
|
||||||
|
|
||||||
|
INC ZEILZ
|
||||||
|
CP ZEILZ,#ZEILENZAHL
|
||||||
|
JR NZ,NEUE_ZEILE
|
||||||
|
LD ZEILZ,#ZEILENZAHL-1 ! Cursor bleibt nach Rollen
|
||||||
|
in der letzen Zeile !
|
||||||
|
OR STAT0,#B2 ! Rollflag setzen !
|
||||||
|
CALL ROLL ! Rollen, falls Rollflag gesetzt !
|
||||||
|
|
||||||
|
NEUE_ZEILE:
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
BACK_SPACE:
|
||||||
|
! *** Cursor ein Zeichen nach links *** !
|
||||||
|
tm STAT2,#B3 !ADM31-/VT100-Terminal ?!
|
||||||
|
jr nz,BACK_SPACE_ADM31
|
||||||
|
! VT100-Terminal !
|
||||||
|
ld PARA,#1
|
||||||
|
call C_left
|
||||||
|
ret
|
||||||
|
! ADM31-Terminal !
|
||||||
|
BACK_SPACE_ADM31:
|
||||||
|
|
||||||
|
DEC SPALTZ
|
||||||
|
|
||||||
|
BACK_SPACE1: ! Entry fuer BACK-TAB !
|
||||||
|
cp SPALTZ,#ZEICHENZAHL
|
||||||
|
jr ult,BSP0
|
||||||
|
LD SPALTZ,#ZEICHENZAHL-1
|
||||||
|
DEC ZEILZ
|
||||||
|
JR PL,BSP0
|
||||||
|
CLR ZEILZ ! Cursor bleibt unveraendert !
|
||||||
|
CLR SPALTZ ! in der linken oberen Ecke !
|
||||||
|
|
||||||
|
BSP0:
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BACK_TAB:
|
||||||
|
! *** ESC I: Cursor eine Tab-Pos. zurueck *** !
|
||||||
|
dec SPALTZ
|
||||||
|
and SPALTZ,#%F8 ! Tab-Position !
|
||||||
|
jr BACK_SPACE1
|
||||||
|
|
||||||
|
|
||||||
|
TAB:
|
||||||
|
! *** Cursor auf Tab-Position *** !
|
||||||
|
tm STAT2,#B3 !ADM31-/VT100-Terminal ?!
|
||||||
|
jr nz,TAB_ADM31
|
||||||
|
! VT100-Terminal !
|
||||||
|
ld PARA,#1
|
||||||
|
call C_ft
|
||||||
|
ret
|
||||||
|
! ADM31-Terminal !
|
||||||
|
TAB_ADM31:
|
||||||
|
add SPALTZ,#%08
|
||||||
|
and SPALTZ,#%F8 ! Tab-Position !
|
||||||
|
jr FOR_SPACE1
|
||||||
|
$PAGE
|
||||||
|
VERT_TAB:
|
||||||
|
! *** Cursor eine Zeile nach oben *** !
|
||||||
|
|
||||||
|
DEC ZEILZ
|
||||||
|
JR PL,VT0
|
||||||
|
CLR ZEILZ ! Cursor bleibt in der 1.Zeile,
|
||||||
|
wenn er sie erreicht hat !
|
||||||
|
VT0:
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
FOR_SPACE:
|
||||||
|
! *** Cursor ein Zeichen nach rechts *** !
|
||||||
|
tm STAT2,#B3 !ADM31-/VT100-Terminal ?!
|
||||||
|
jr nz,FOR_SPACE_ADM31
|
||||||
|
! VT100-Terminal !
|
||||||
|
ld PARA,#1
|
||||||
|
call C_rigth
|
||||||
|
ret
|
||||||
|
! ADM31-Terminal!
|
||||||
|
FOR_SPACE_ADM31:
|
||||||
|
|
||||||
|
INC SPALTZ
|
||||||
|
|
||||||
|
FOR_SPACE1: ! Entry fuer TAB-Funktion !
|
||||||
|
CP SPALTZ,#ZEICHENZAHL
|
||||||
|
JR ULT,FF0
|
||||||
|
CLR SPALTZ
|
||||||
|
JR LINE_FEED ! ZEILZ erhoehen, rollen !
|
||||||
|
|
||||||
|
FF0:
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
CURSOR_HOME:
|
||||||
|
! *** Cursor wird auf Pos. 1,1 gesetzt *** !
|
||||||
|
|
||||||
|
LD ZEILZ,#0
|
||||||
|
LD SPALTZ,#0
|
||||||
|
CALL LOAD_CURSOR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
ESC_SEQ:
|
||||||
|
! *** ESC-Flag setzen *** !
|
||||||
|
|
||||||
|
OR STAT1,#B4
|
||||||
|
clr ZESCF !ZESCF=0!
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
BELL:
|
||||||
|
! *** akustisches Signal *** !
|
||||||
|
PUSH RP
|
||||||
|
SRP #%20
|
||||||
|
LD R8,#HI BELL_ADR
|
||||||
|
LD R9,#LO BELL_ADR
|
||||||
|
LDC @RR8,R9 ! Scheinausgabe zur Impulserzeug. !
|
||||||
|
POP RP
|
||||||
|
RET
|
||||||
|
|
||||||
|
! Behandlung ESC-Folgen
|
||||||
|
Bit 3 in STAT2: 0 ---> VT100-Terminal
|
||||||
|
1 ---> ADM31-Terminal !
|
||||||
|
ESC_FLG:
|
||||||
|
tm STAT2,#B3
|
||||||
|
jp nz,ESC_SEQUENZ !ADM31-Terminal!
|
||||||
|
jp ESC_VT100 !VT100-Terminal!
|
||||||
|
|
||||||
|
END PUTA
|
||||||
|
$PAGE
|
||||||
|
TGETCHAR PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Spezielle Anpassung an IBM (XT) Tastatur
|
||||||
|
* Input: ZBYTE Abtastcode
|
||||||
|
* Output: CHAR ASCII-Zeichen
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
push rp
|
||||||
|
srp #%20
|
||||||
|
tcm r1,#B7 !Taste mit Vorbyte E1 ?!
|
||||||
|
jr z,TGET0
|
||||||
|
tcm r0,#B0
|
||||||
|
jr z,TGET2
|
||||||
|
jr TGET3
|
||||||
|
TGET0:
|
||||||
|
ld r6,r1
|
||||||
|
clr r1
|
||||||
|
tcm r0,#B0
|
||||||
|
jr z,TGET3
|
||||||
|
ld r1,r6
|
||||||
|
sub r1,#B7
|
||||||
|
add r3,r1
|
||||||
|
jr nc,TGET1
|
||||||
|
inc r2
|
||||||
|
TGET1:
|
||||||
|
ldc r1,@rr2 !Wert aus SHIFT_Tab!
|
||||||
|
! NORMAL-STATUS !
|
||||||
|
ld r2,#HI NORMAL_Tab
|
||||||
|
ld r3,#LO NORMAL_Tab
|
||||||
|
jr TGET3
|
||||||
|
TGET2
|
||||||
|
ld r6,r1
|
||||||
|
clr r1
|
||||||
|
tcm r6,#%40
|
||||||
|
jr nz,TGET3
|
||||||
|
cp r6,#%7B
|
||||||
|
jr gt,TGET3
|
||||||
|
and r6,#%1F
|
||||||
|
ld r1,r6
|
||||||
|
jr TGET3
|
||||||
|
TGET3:
|
||||||
|
tcm r0,#%08
|
||||||
|
jr nz,TGET7
|
||||||
|
tcm r0,#%02
|
||||||
|
jr nz,TGET3
|
||||||
|
cp r1,#%41
|
||||||
|
jr lt,TGET3
|
||||||
|
cp r1,#%5A
|
||||||
|
jr gt,TGET3
|
||||||
|
add r1,#%20
|
||||||
|
TGET3:
|
||||||
|
ld CHAR,r1
|
||||||
|
tcm r0,#%04
|
||||||
|
jr nz,TGET5
|
||||||
|
tcm STAT1,#%01
|
||||||
|
jr z,TGET6
|
||||||
|
or STAT1,#%01
|
||||||
|
ld r4,#%020
|
||||||
|
ld r5,#%00
|
||||||
|
ldc @rr4,r5
|
||||||
|
jr TGET6
|
||||||
|
TGET5:
|
||||||
|
tcm STAT1,#%01
|
||||||
|
jr nz,TGET6
|
||||||
|
! Zeichensatz 1 (amerikanisch) !
|
||||||
|
and STAT1,#NB0
|
||||||
|
ld r4,#HI ZG0
|
||||||
|
ld r5,#LO ZG0
|
||||||
|
ldc @rr4,r5
|
||||||
|
TGET6:
|
||||||
|
and STAT0,#NB4 land NB5
|
||||||
|
pop rp
|
||||||
|
ret
|
||||||
|
TGET7:
|
||||||
|
tm STAT1,#%01
|
||||||
|
jr z,TGET3
|
||||||
|
tm r0,#%02
|
||||||
|
jr z,TGET8
|
||||||
|
cp r1,#%7A
|
||||||
|
jr ule,TGET3
|
||||||
|
cp r1,#%7E
|
||||||
|
jr nc,TGET3
|
||||||
|
sub r1,#%20
|
||||||
|
jr TGET3
|
||||||
|
TGET8:
|
||||||
|
cp r1,#%5A
|
||||||
|
jr ule,TGET3
|
||||||
|
cp r1,#%5E
|
||||||
|
jr nc,TGET3
|
||||||
|
add r1,#%20
|
||||||
|
jr TGET3
|
||||||
|
END TGETCHAR
|
||||||
|
|
||||||
|
$PAGE
|
||||||
|
!
|
||||||
|
Abtastcode Normal ASCII SHIFT ASCII
|
||||||
|
Dez/Hex
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
0 00 + 2B + 2B
|
||||||
|
1 01 ESC 1B ESC 1B
|
||||||
|
2 02 1 31 Ausr.Z. 21
|
||||||
|
3 03 2 32 " 22
|
||||||
|
4 04 3 33 @ Par* 40
|
||||||
|
5 05 4 34 $ 24
|
||||||
|
6 06 5 35 % 25
|
||||||
|
7 07 6 36 & 26
|
||||||
|
8 08 7 37 / 2F
|
||||||
|
9 09 8 38 ( 28
|
||||||
|
10 0A 9 39 ) 29
|
||||||
|
11 0B 0 30 = 3D
|
||||||
|
12 0C ~ sz* 7E ? 3F
|
||||||
|
13 0D ' 27 ` 60
|
||||||
|
14 0E DEL 7F DEL 7F
|
||||||
|
15 0F BTAB 09 BTAB 09
|
||||||
|
|
||||||
|
16 10 q 71 Q 51
|
||||||
|
17 11 w 77 W 57
|
||||||
|
18 12 e 65 E 45
|
||||||
|
19 13 r 72 R 52
|
||||||
|
20 14 t 74 T 54
|
||||||
|
21 15 z 7A Z 5A
|
||||||
|
22 16 u 75 U 55
|
||||||
|
23 17 i 69 I 49
|
||||||
|
24 18 o 6F O 4F
|
||||||
|
25 19 p 70 P 50
|
||||||
|
26 1A ] ue* 5D } Ue* 7D
|
||||||
|
27 1B + 2B * 2A
|
||||||
|
28 1C CR 0D CR 0D
|
||||||
|
29 1D TAB 82 TAB 82
|
||||||
|
30 1E a 61 A 41
|
||||||
|
31 1F s 73 S 53
|
||||||
|
|
||||||
|
32 20 d 64 D 44
|
||||||
|
33 21 f 66 F 46
|
||||||
|
34 22 g 67 G 47
|
||||||
|
35 23 h 68 H 48
|
||||||
|
36 24 j 6A J 4A
|
||||||
|
37 25 k 6B K 4B
|
||||||
|
38 26 l 6C L 4C
|
||||||
|
39 27 oe* 5C | Oe* 7C
|
||||||
|
40 28 [ ae* 5B { Ae* 7B
|
||||||
|
41 29 BS 08 BS 08
|
||||||
|
42 2A SHIFT 80 SHIFT 80
|
||||||
|
43 2B # 23 ^ 5E
|
||||||
|
44 2C y 79 Y 59
|
||||||
|
45 2D x 78 X 58
|
||||||
|
46 2E c 63 C 43
|
||||||
|
47 2F v 76 V 56
|
||||||
|
|
||||||
|
48 30 b 62 B 42
|
||||||
|
49 31 n 6E N 4E
|
||||||
|
50 32 m 6D M 4D
|
||||||
|
51 33 , 2C ; 3B
|
||||||
|
52 34 . 2E : 3A
|
||||||
|
53 35 - 2D _ 5F
|
||||||
|
54 36 SHIFT 80
|
||||||
|
55 37 * 2A
|
||||||
|
56 38 CTRL 80
|
||||||
|
57 39 SP 20
|
||||||
|
58 3A CAPS L. 80
|
||||||
|
59 3B SI/S0 F2
|
||||||
|
60 3C MOD F3
|
||||||
|
61 3D VIDEO F4
|
||||||
|
62 3E BREAK F1
|
||||||
|
63 3F F1 80
|
||||||
|
|
||||||
|
64 40 F2 80
|
||||||
|
65 41 F3 80
|
||||||
|
66 32 F4 80
|
||||||
|
67 43 F5 80
|
||||||
|
68 44 F6 80
|
||||||
|
69 45 CE 08
|
||||||
|
70 46 F10 80
|
||||||
|
71 47 7 37
|
||||||
|
72 48 8 38
|
||||||
|
73 49 9 39
|
||||||
|
74 4A - 5F
|
||||||
|
75 4B 4 34
|
||||||
|
76 4C 5 35
|
||||||
|
77 4D 6 36
|
||||||
|
78 4E = 3D
|
||||||
|
79 4F 1 31
|
||||||
|
|
||||||
|
80 50 2 32
|
||||||
|
81 51 3 33
|
||||||
|
82 52 0 30
|
||||||
|
83 53 , 2C
|
||||||
|
84 54 OFF F0
|
||||||
|
85 55 80
|
||||||
|
86 56 < 3C > 3E
|
||||||
|
87 57 F7 80
|
||||||
|
88 58 F8 80
|
||||||
|
|
||||||
|
* Zeichengenerator ZG1 (Umlaute)
|
||||||
|
!
|
||||||
|
NORMAL_Tab array [85 byte] :=
|
||||||
|
[%00 %00 %81 %F1 %00 %00 %86 %87 %88 %89 %8A %8B %8C %09 %F0 %00
|
||||||
|
%00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %1B %00 %9D %0D %00
|
||||||
|
%80 %82 %81 %85 %00 %00 %00 %00 %00 %00 %00 %00 %2C %00 %00 %00
|
||||||
|
%30 %31 %32 %33 %34 %35 %36 %37 %38 %39 %00 %2E %00 %2D %00 %00
|
||||||
|
%83 %80 %84 %00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %8F %08 %80
|
||||||
|
%2B %90 %A0 %80 %80]
|
||||||
|
|
||||||
|
|
||||||
|
$PAGE
|
||||||
|
START_DISPLAY PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* CRTC starten
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
LD R8,#HI CRT_COM
|
||||||
|
LD R9,#LO CRT_COM
|
||||||
|
LD R10,#START_DISPL
|
||||||
|
LDE @RR8,R10
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END START_DISPLAY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SGETCHAR PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Zeichen wird aus Sio-Puffer gelesen
|
||||||
|
* und in Zelle CHAR abgelegt
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
dec SCOUNT ! Counter erniedrigen !
|
||||||
|
cp SCOUNT,#0
|
||||||
|
jr nz,SGET1 ! Sprung wenn Counter > 0 !
|
||||||
|
tcm STAT1,#B2 ! Wurde CTRL_S gesendet? !
|
||||||
|
jr nz,SGET2
|
||||||
|
ld CHAR,#DC1 ! CTRL_Q !
|
||||||
|
call SIO_OUT ! CTRL_Q senden !
|
||||||
|
and STAT1,#NB2 ! CTRL_S-Flag ruecksetzen !
|
||||||
|
|
||||||
|
SGET2:
|
||||||
|
AND STAT0,#NB6
|
||||||
|
AND STAT0,#NB7
|
||||||
|
|
||||||
|
SGET1:
|
||||||
|
LD CHAR,@SOUTPTR ! Zeichen lesen !
|
||||||
|
INC SOUTPTR ! Outpointer erhoehen !
|
||||||
|
CP SOUTPTR,#SWERT+SBUFL ! Endwert ueberschritten? !
|
||||||
|
JR NZ,SGET0
|
||||||
|
LD SOUTPTR,#SWERT ! Init-Wert !
|
||||||
|
|
||||||
|
SGET0:
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END SGETCHAR
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SIO_OUT PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
* Ausgabe ueber SIO in on_line Mode
|
||||||
|
* Es werden nur ASCII-Zeichen %01...%7F ausgegeben
|
||||||
|
* Das NUL-Zeichen %00 wird unterdrueckt.
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
CP CHAR,#%00 ! NUL-Zeichen? !
|
||||||
|
JR Z,SIO0 ! wenn ja, Aussprung !
|
||||||
|
|
||||||
|
SIO1:
|
||||||
|
TM IRQ,#B4 ! Sender bereit !
|
||||||
|
JR Z,SIO1 ! warten auf Sendebereitschaft !
|
||||||
|
LD SIO,CHAR ! Zeichen senden !
|
||||||
|
AND IRQ,#NB4 ! TX-Flag ruecksetzen !
|
||||||
|
|
||||||
|
SIO0:
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END SIO_OUT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BREAK PROCEDURE
|
||||||
|
!*******************************************************
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Break-Funktion ausfuehren:
|
||||||
|
* Senden %00 fuer die Dauer der halbierten Baudrate
|
||||||
|
*
|
||||||
|
*******************************************************!
|
||||||
|
ENTRY
|
||||||
|
|
||||||
|
TCM STAT0,#B3 ! nur bei on_line wirksam !
|
||||||
|
JR NZ,BREAK0
|
||||||
|
CP CHAR,#%F1 ! nochmalige Pruefung !
|
||||||
|
JR NZ,BREAK0
|
||||||
|
CLR CHAR ! NUL in CHAR !
|
||||||
|
PUSH RP
|
||||||
|
SRP #%20 ! Reg-Gr. 2 !
|
||||||
|
LD R7,BDR ! aktuelle Baudrate holen !
|
||||||
|
ADD R7,R7 ! Baudrate halbieren !
|
||||||
|
LD T0,R7 ! neue Zeitkonst. in T0 !
|
||||||
|
OR TMR,#%03 ! T0 laden und starten !
|
||||||
|
|
||||||
|
BREAK2:
|
||||||
|
TM IRQ,#B4 ! Sender bereit !
|
||||||
|
JR Z,BREAK2 ! warten auf Sendebereitschaft !
|
||||||
|
LD SIO,CHAR ! Zeichen senden !
|
||||||
|
AND IRQ,#NB4 ! TX-Flag ruecksetzen !
|
||||||
|
|
||||||
|
BREAK1:
|
||||||
|
TM IRQ,#B4 ! Senden beendet? !
|
||||||
|
JR Z,BREAK1
|
||||||
|
LD T0,BDR ! aktuelle Baudrate wieder laden !
|
||||||
|
OR TMR,#%03 ! T0 laden und starten !
|
||||||
|
POP RP
|
||||||
|
|
||||||
|
BREAK0:
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
END BREAK
|
||||||
|
|
||||||
|
END HAUPT
|
||||||
Loading…
Reference in New Issue