add Version 5.0

This commit is contained in:
Oliver Lehmann 2009-08-13 08:44:48 +00:00
parent 72ee4c0862
commit baef93966a
3 changed files with 240 additions and 135 deletions

View File

@ -385,8 +385,9 @@ ENTRY
CP CHAR,#'(' CP CHAR,#'('
JR Z,ESCG0 JR Z,ESCG0
CP CHAR,#')' CP CHAR,#')'
JR ESCG8 JR z,ESCG8
VIDEO1: VIDEO1:
and STAT1,#NB4 land NB7 !ESC- und Video-Flag ruecksetzen!
RET RET
@ -522,53 +523,50 @@ ENTRY
JR Z,ESC_OUT0 JR Z,ESC_OUT0
!------------------------------------------------------! !------------------------------------------------------!
cp CHAR,#%C2 !00 ?!
jr nz,FKT_TAS !nein!
ld CHAR,#'0'
call ESC_AUS2
ld ESCH0,#'0'
jp FKT_AUS
FKT_TAS: FKT_TAS:
tm STAT2,#B3 !VT100/ADM31 ?! tm STAT2,#B3 !VT100/ADM31 ?!
jp z,FKT_VT100 jp z,FKT_VT100
! Auswertung der Tasten-Codes ADM31 ! ! Auswertung der Tasten-Codes ADM31 !
! Cursor Movement Tasten ! ! Cursor Movement Tasten !
ld ESCH0,#FF !Forspace! ld ESCH0,#FF !Forspace!
cp CHAR,#%86 cp CHAR,#%CD
jp z,FKT_AUS jp z,FKT_AUS
ld ESCH0,#BS !Backspace! ld ESCH0,#BS !Backspace!
cp CHAR,#%88 cp CHAR,#%CB
jp z,FKT_AUS jp z,FKT_AUS
ld ESCH0,#LF !Linefeed! ld ESCH0,#LF !Linefeed!
cp CHAR,#%8A cp CHAR,#%D0
jr z,FKT_AUS jr z,FKT_AUS
ld ESCH0,#VT !Verticaltab! ld ESCH0,#VT !Verticaltab!
cp CHAR,#%8B cp CHAR,#%C8
jr z,FKT_AUS jr z,FKT_AUS
ld ESCH0,#RS !Cursor home! ld ESCH0,#RS !Cursor home!
cp CHAR,#%8C cp CHAR,#%CF
jr z,FKT_AUS
ld ESCH0,#BS
cp CHAR,#%9D
jr z,FKT_AUS
ld ESCH0,#%09
cp CHAR,#%89
jr z,FKT_AUS jr z,FKT_AUS
! Funktionstasten ! ! Funktionstasten !
LD ESCH0,#'W' ! char delete ! LD ESCH0,#'W' ! char delete !
CP CHAR,#%8F CP CHAR,#%D2
JR Z,ESC_SEQ_AUS JR Z,ESC_SEQ_AUS
LD ESCH0,#'Q' ! char insert ! LD ESCH0,#'Q' ! char insert !
CP CHAR,#%85 CP CHAR,#%C9
JR Z,ESC_SEQ_AUS JR Z,ESC_SEQ_AUS
LD ESCH0,#'R' ! line delete ! LD ESCH0,#'R' ! line delete !
CP CHAR,#%84 CP CHAR,#%D3
JR Z,ESC_SEQ_AUS JR Z,ESC_SEQ_AUS
LD ESCH0,#'E' ! line insert ! LD ESCH0,#'E' ! line insert !
CP CHAR,#%81 CP CHAR,#%D1
JR Z,ESC_SEQ_AUS JR Z,ESC_SEQ_AUS
LD ESCH0,#'Y' ! page erase ! LD ESCH0,#'Y' ! page erase !
CP CHAR,#%83 CP CHAR,#%C7
JR Z,ESC_SEQ_AUS JR Z,ESC_SEQ_AUS
ld ESCH0,#'T'
cp CHAR,#%82
jr z,ESC_SEQ_AUS
ld ESCH0,#'I' ! BACK_TAB ! ld ESCH0,#'I' ! BACK_TAB !
cp CHAR,#%87 cp CHAR,#%81
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
!------------------------------------------------------! !------------------------------------------------------!
@ -614,47 +612,38 @@ ESC_AUS1:
FKT_VT100: FKT_VT100:
! Cursor Movement Tasten ! ! Cursor Movement Tasten !
ld ESCH0,#'C' !Cursor right! ld ESCH0,#'C' !Cursor right!
cp CHAR,#%86 cp CHAR,#%CD
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'D' !Cursor left! ld ESCH0,#'D' !Cursor left!
cp CHAR,#%88 cp CHAR,#%CB
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'B' !Cursor down! ld ESCH0,#'B' !Cursor down!
cp CHAR,#%8A cp CHAR,#%D0
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'A' !Cursor up! ld ESCH0,#'A' !Cursor up!
cp CHAR,#%8B cp CHAR,#%C8
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'H' !Cursor home! ld ESCH0,#'H' !Cursor home!
cp CHAR,#%8C cp CHAR,#%CF
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#BS
cp CHAR,#%9D
jr z,FKT_AUS
! Funktionstasten ! ! Funktionstasten !
ld ESCH0,#'P' !Delete character! ld ESCH0,#'P' !Delete character!
cp CHAR,#%8F cp CHAR,#%D2
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'@' !Insert character! ld ESCH0,#'@' !Insert character!
cp CHAR,#%85 cp CHAR,#%C9
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'M' !Delete line! ld ESCH0,#'M' !Delete line!
cp CHAR,#%84 cp CHAR,#%D3
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'L' !Insert line! ld ESCH0,#'L' !Insert line!
cp CHAR,#%81 cp CHAR,#%D1
jr z,ESC_SEQ_AUS jr z,ESC_SEQ_AUS
ld ESCH0,#'J' !Erasing from cursor to end of screen! ld ESCH0,#'J' !Erasing from cursor to end of screen!
cp CHAR,#%83 cp CHAR,#%C7
jp z,ESC_SEQ_AUS
ld ESCH0,#'K'
cp CHAR,#%82
jp z,ESC_SEQ_AUS jp z,ESC_SEQ_AUS
ld ESCH0,#'Z' !Cursor backward tab! ld ESCH0,#'Z' !Cursor backward tab!
cp CHAR,#%87 cp CHAR,#%81
jp z,ESC_SEQ_AUS
ld ESCH0,#'I'
cp CHAR,#%89
jp z,ESC_SEQ_AUS jp z,ESC_SEQ_AUS
jp ESC_OUT0 jp ESC_OUT0

View File

@ -5,7 +5,8 @@
* mit Einchip-Mikrorechner U 882 und CRTC 8275 * * mit Einchip-Mikrorechner U 882 und CRTC 8275 *
* ============================================ * * ============================================ *
* * * *
* INIT Module; Version 4.2: * * INIT Module; Version 5.0: *
* - Anpassung an IBM (XT) Tastatur *
* - 24 Zeilen / 80 Zeichen * * - 24 Zeilen / 80 Zeichen *
* Inhalt: * * Inhalt: *
* - Initialisierung Rechner, Bildspeicher, CRTC * * - Initialisierung Rechner, Bildspeicher, CRTC *
@ -31,7 +32,7 @@ P01EXT := %96 ! P0:=A8...A14, P1:=AD0...AD7, Stack intern !
P01TRI := %9E ! tri state: P0,P1,AS,DS,R/W ! P01TRI := %9E ! tri state: P0,P1,AS,DS,R/W !
SBUFL := 45 ! SIO-Puffer-Laenge ! SBUFL := 45 ! SIO-Puffer-Laenge !
ZDMA := 26 ! DMA ausschalten: 26*1.08=28 mys ! ZDMA := 26 ! DMA ausschalten: 26*1.08=28 mys !
ZVSY := 160 ! VSYN: 192*1.08=172.8 mys ! ZVSY := 192 ! VSYN: 192*1.08=172.8 mys !
! Bit Definitionen ! ! Bit Definitionen !
B0 := %1 ! bit 0 ! B0 := %1 ! bit 0 !
@ -86,7 +87,7 @@ RES4 := %6A ! visible video control !
!ruhender Cursor-Block! !ruhender Cursor-Block!
RES5 := %4A !volles Feld blinkend! RES5 := %4A !volles Feld blinkend!
RES6 := %7A !Unterstrich! RES6 := %7A !Unterstrich!
RES7 := %6C !changed for 4! RES7 := %5A !Unterstrich blinkend!
! Field Attribute Code ! ! Field Attribute Code !
FAC := %80 ! Field Attribute: Normal Mode ! FAC := %80 ! Field Attribute: Normal Mode !
@ -137,7 +138,7 @@ EXTERNAL
GLOBAL GLOBAL
$SECTION SECR REGISTER $SECTION REGISTER
$REL 0 $REL 0
! Ports, Status- und Hilfsregister: Reg.-Grp. 0 ! ! Ports, Status- und Hilfsregister: Reg.-Grp. 0 !
@ -161,7 +162,7 @@ $REL %30
$SECTION SEC0 PROGRAM $SECTION PROGRAM
$REL 0 $REL 0
INTERRUPT ARRAY [6 WORD] := [IRP32 IRP33 IRP31 IRP30 IRT0 IRT1] INTERRUPT ARRAY [6 WORD] := [IRP32 IRP33 IRP31 IRP30 IRT0 IRT1]
@ -174,7 +175,7 @@ ENTRY
END JP_MESSAGE END JP_MESSAGE
! Message: Copyright Name Version Datum ! ! Message: Copyright Name Version Datum !
MESSAGE array [* byte] := '(C) ZFT/KEAW 4.2 Jan88' MESSAGE array [* byte] := '(C) ZFT/KEAW 5.0 Dec88'
INITIAL PROCEDURE INITIAL PROCEDURE
@ -250,8 +251,6 @@ ZADR0:
! IBM (XT) Tastatur und Zeichengenerator vorbereiten ! ! IBM (XT) Tastatur und Zeichengenerator vorbereiten !
SRP #%20 SRP #%20
ld r2,#%04
ld r3,#%84
LD R4,#ZG0 ! nur High-Adr interessant ! LD R4,#ZG0 ! nur High-Adr interessant !
LDC @RR4,R5 ! Scheinausgabe zum Einschalten ZG0 ! LDC @RR4,R5 ! Scheinausgabe zum Einschalten ZG0 !
ld r4,#TRES ld r4,#TRES
@ -383,22 +382,89 @@ IRP33 PROCEDURE
*******************************************************! *******************************************************!
ENTRY ENTRY
tcm STAT0,#B4
jr z,TINT0
push rp push rp
srp #%20 srp #%20
tcm STAT0,#B5
jr z,TINT1 or STAT3,#B4 !Eigentest!
tcm P2,#%E0
jr nz,TINT0 tm STAT0,#B4 !Zeichen verarbeitet ?!
ld r0,P2 jp nz,TINT0 !nein!
ld r1,P2 !Lesen von Port 2!
rr r1 !Verschieben D0->D7 ... D7->D6!
cp ZBYTE,#%E1 !Vorbyte E1 ?!
jr nz,TINT14 !nein!
or STAT3,#B7
jr TINT0
TINT14:
cp ZBYTE,#%E0 !Vorbyte E0 ?!
jr nz,TINT1 !nein!
or STAT0,#B5 or STAT0,#B5
jr TINT0 jr TINT0
TINT1: TINT1:
ld r1,P2 !Lesen von Port 2! tm ZBYTE,#B7 !Scan-/Break-Code ?!
jr nz,TINT2 !Break-Code!
! Scan-Code !
cp ZBYTE,#%2A !SHIFT-Taste ?!
jr nz,TINT4 !nein!
or STAT3,#B2 !SHIFT-STATUS ein!
jr TINT8
TINT4:
cp ZBYTE,#%3A !CAPS-LOCK-Taste ?!
jr nz,TINT5 !nein!
tm STAT3,#B0 !war CAPS-LOCK-STATUS ein ?!
jr nz,TINT15 !ja!
or STAT3,#B0 !CAPS-LOCK-STATUS ein!
jr TINT8
TINT15:
and STAT3,#NB0 !CAPS-LOCK-STATUS aus!
jr TINT8
TINT5:
cp ZBYTE,#%38 !CTRL-Taste ?!
jr nz,TINT6 !nein!
and STAT0,#NB5
or STAT3,#B1 !CTRL-STATUS ein!
jr TINT8
TINT6:
tm STAT3,#B7 !war Vorbyte E1 ?!
jr z,TINT7 !nein!
tm STAT3,#B6 !1. Zeichen nach E1 ?!
jr nz,TINT7
or STAT3,#B6
ld r0,r1 !1. Zeichen nach E1!
jr TINT0
TINT7:
or STAT0,#B4 or STAT0,#B4
jr TINT0
! Break-Code !
TINT2:
and STAT0,#NB5
cp ZBYTE,#%AA !SHIFT-Taste ?!
jr nz,TINT11 !nein!
and STAT3,#NB2 !SHIFT-STATUS aus!
jr TINT8
TINT11:
cp ZBYTE,#%B8 !CTRL-Taste ?!
jr nz,TINT12 !nein!
and STAT3,#NB1 !CTRL-STATUS aus!
jr TINT8
TINT12:
cp ZBYTE,#%FC !Error Tastatur ?!
jr nz,TINT13 !nein!
or STAT3,#B5 !ERROR-STATUS ein!
jr TINT8
TINT13:
cp ZBYTE,#%AA !Okay Tastatur ?!
jr nz,TINT8 !nein!
and STAT3,#NB5 !ERROR-STATUS aus!
TINT8:
and STAT3,#NB6 land NB7
TINT0: TINT0:
ld r4,#TRES ld r4,#TRES
TINTW: TINTW:
tcm STAT0,#B0 ! DMA aktiv?, wenn ja, warten ! tcm STAT0,#B0 ! DMA aktiv?, wenn ja, warten !

View File

@ -206,6 +206,8 @@ TOUT5:
cp CHAR,#'=' cp CHAR,#'='
jr z,TOUT6 jr z,TOUT6
cp CHAR,#'#' cp CHAR,#'#'
jr z,TOUT10
cp CHAR,#'<'
jr z,TOUT7 jr z,TOUT7
call PUTA call PUTA
incw rr6 incw rr6
@ -220,6 +222,14 @@ TOUT8:
ld r6,#HI VAF !on! ld r6,#HI VAF !on!
ld r7,#LO VAF ld r7,#LO VAF
jr TOUT5 jr TOUT5
TOUT10:
tm STAT3,#B4 !Eigentest ?!
jr z,TOUT10 !nein!
tm STAT3,#B5 !Error Tastatur ?!
jr z,TOUT7 !nein!
ld r6,#HI ERR
ld r7,#LO ERR
jr TOUT5
TOUT7: TOUT7:
tm STAT2,#B5 !war on/off ?! tm STAT2,#B5 !war on/off ?!
jr nz,TOUT9 jr nz,TOUT9
@ -266,7 +276,7 @@ MAIN10:
! Umschaltung VT100 <---> ADM31 ueber Taste MOD ! Umschaltung VT100 <---> ADM31 ueber Taste MOD
********************************************* ! ********************************************* !
MAIN11: MAIN11:
cp CHAR,#%90 cp CHAR,#%F3
jr nz,MAIN14 jr nz,MAIN14
tm STAT2,#B3 !VT100/ADM31 ?! tm STAT2,#B3 !VT100/ADM31 ?!
jr nz,ADM31 jr nz,ADM31
@ -281,7 +291,7 @@ ADM31:
! Umschaltung Video Attribute on <---> off ueber Taste VIDEO ! Umschaltung Video Attribute on <---> off ueber Taste VIDEO
********************************************************** ! ********************************************************** !
MAIN14: MAIN14:
cp CHAR,#%A0 cp CHAR,#%F4
jr nz,MAIN13 jr nz,MAIN13
tm STAT2,#B4 !Video Attribute on/off ?! tm STAT2,#B4 !Video Attribute on/off ?!
jr nz,V_off jr nz,V_off
@ -315,8 +325,9 @@ END MAIN
ADM array [* byte] := 'ADM31/9600 baud/=' ADM array [* byte] := 'ADM31/9600 baud/='
VT1 array [* byte] := 'VT100/9600 baud/=' VT1 array [* byte] := 'VT100/9600 baud/='
VAN array [* byte] := 'Video Attr. on%R%L#' VAN array [* byte] := 'Video Attr. on (c)zft/keaw%R%L#'
VAF array [* byte] := 'Video Attr. off%R%L#' VAF array [* byte] := 'Video Attr. off (c)zft/keaw%R%L#'
ERR array [* byte] := 'Error Tastatur<'
$PAGE $PAGE
PUTA PROCEDURE PUTA PROCEDURE
@ -561,88 +572,119 @@ ENTRY
push rp push rp
srp #%20 srp #%20
tcm r1,#B7 !Taste mit Vorbyte E1 ?! tm STAT3,#B7 !Taste mit Vorbyte E1 ?!
jr z,TGET0 jr z,TGET0 !nein!
tcm r0,#B0 and ZBYTE,#NB4
jr z,TGET2 jp TGETV
jr TGET3
TGET0: TGET0:
ld r6,r1 tm STAT0,#B5 !Taste mit Vorbyte E0 ?!
clr r1 jp nz,TGETV !ja!
tcm r0,#B0 tm STAT3,#B2 !SHIFT-STATUS ein ?!
jr z,TGET3 jr z,TGET1 !nein!
ld r1,r6 ! SHIFT-STATUS !
sub r1,#B7 cp ZBYTE,#%35 !Abtastcode 00H ... 35H ?!
jr ule,TGET2 !ja!
cp ZBYTE,#%56 !Abtastcode 56H ?!
jr nz,TGET1 !nein!
ld ZBYTE,#'>' !ZBYTE='>'!
jp TGETE
TGET2:
ld r2,#HI SHIFT_Tab
ld r3,#LO SHIFT_Tab
add r3,r1 add r3,r1
jr nc,TGET1 adc r2,#0
inc r2
TGET1:
ldc r1,@rr2 !Wert aus SHIFT_Tab! ldc r1,@rr2 !Wert aus SHIFT_Tab!
tm STAT3,#B0 !CAPS-LOCK-STATUS ein ?!
jr z,TGET3 !nein!
cp ZBYTE,#'A' !Grossbuchstaben A ... Z ?!
jr ult,TGET3 !nein!
cp ZBYTE,#'Z'
jr ugt,TGET3 !nein!
or ZBYTE,#B5 !Grossbuchstaben ---> Kleinbuchstaben!
jr TGET3
! NORMAL-STATUS ! ! NORMAL-STATUS !
TGET1:
ld r2,#HI NORMAL_Tab ld r2,#HI NORMAL_Tab
ld r3,#LO NORMAL_Tab ld r3,#LO NORMAL_Tab
jr TGET3 add r3,r1
TGET2 adc r2,#0
ld r6,r1 ldc r1,@rr2 !Wert aus NORMAL_Tab!
clr r1 tm STAT3,#B0 !CAPS-LOCK-STATUS ein ?!
tcm r6,#%40 jr z,TGET3 !nein!
jr nz,TGET3 cp ZBYTE,#'a' !Kleinbuchstaben a ... z ?!
cp r6,#%7B jr ult,TGET3 !nein!
jr gt,TGET3 cp ZBYTE,#'z'
and r6,#%1F jr ugt,TGET3 !nein!
ld r1,r6 and ZBYTE,#NB5 !Kleinbuchstaben ---> Grossbuchstaben!
jr TGET3
TGET3: TGET3:
tcm r0,#%08 tm STAT3,#B1 !CTRL-STATUS ein ?!
jr nz,TGET7 jr z,TGET5 !nein!
tcm r0,#%02 cp ZBYTE,#'@' !CTRL-Zeichen @ ... DEL ?!
jr nz,TGET3 jr ult,TGETE !nein!
cp r1,#%41 cp ZBYTE,#%7F
jr lt,TGET3 jr ugt,TGET5 !nein!
cp r1,#%5A and ZBYTE,#NB5 land NB6 !CTRL-Zeichen!
jr gt,TGET3 jr TGETE
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: TGET5:
tcm STAT1,#%01 cp ZBYTE,#%F2 !ALT-Taste ?!
jr nz,TGET6 jr nz,TGET8 !nein!
! Umschaltung Zeichensaetze !
tm STAT1,#B0
jr z,TGET6
! Zeichensatz 1 (amerikanisch) ! ! Zeichensatz 1 (amerikanisch) !
and STAT1,#NB0 and STAT1,#NB0
ld r4,#HI ZG0 ld r4,#HI ZG0
ld r5,#LO ZG0 ld r5,#LO ZG0
ldc @rr4,r5 jr TGET7
! Zeichensatz 2 (Umlaute) !
TGET6: TGET6:
or STAT1,#B0
ld r4,#HI ZG1
ld r5,#LO ZG1
TGET7:
ldc @rr4,r5
ld ZBYTE,#%80
jr TGETE
! Behandlung Umlaute !
TGET8:
tm STAT1,#B0 !Zeichensatz 2 ?!
jr z,TGETE !nein!
tm STAT3,#B0 !CAPS-LOCK-STATUS ein ?!
jr nz,TGETE !ja!
cp ZBYTE,#'[' !Zeichen [ ] ?!
jr ult,TGETE !nein!
cp ZBYTE,#']'
jr ugt,TGET9 !nein!
add r1,#%20 !ZBYTE=ZBYTE+20H!
jr TGETE
TGET9:
cp ZBYTE,#'{' !Zeichen { | } ?!
jr ult,TGETE !nein!
cp ZBYTE,#'}'
jr ugt,TGETE !nein!
sub r1,#%20 !ZBYTE=ZBYTE-20H!
jr TGETE
! Behandlung Taste mit Vorbyte E0 ... !
TGETV:
or ZBYTE,#B7
cp ZBYTE,#%9C !ENTER ?!
jr nz,TGETV1 !nein!
ld r1,#CR
jr TGETE
TGETV1:
cp ZBYTE,#%B5
jr nz,TGETE
ld r1,#'/'
TGETE:
ld CHAR,r1 !CHAR=ZBYTE!
and STAT0,#NB4 land NB5 and STAT0,#NB4 land NB5
and STAT3,#NB6 land NB7
pop rp pop rp
ret 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 END TGETCHAR
$PAGE $PAGE
@ -749,13 +791,21 @@ Dez/Hex
* Zeichengenerator ZG1 (Umlaute) * Zeichengenerator ZG1 (Umlaute)
! !
NORMAL_Tab array [85 byte] :=
[%00 %00 %81 %F1 %00 %00 %86 %87 %88 %89 %8A %8B %8C %09 %F0 %00 NORMAL_Tab array [89 byte] :=
%00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %1B %00 %9D %0D %00 [%2B %1B %31 %32 %33 %34 %35 %36 %37 %38 %39 %30 %7E %27 %7F %81
%80 %82 %81 %85 %00 %00 %00 %00 %00 %00 %00 %00 %2C %00 %00 %00 %71 %77 %65 %72 %74 %7A %75 %69 %6F %70 %5D %2B %0D %09 %61 %73
%30 %31 %32 %33 %34 %35 %36 %37 %38 %39 %00 %2E %00 %2D %00 %00 %64 %66 %67 %68 %6A %6B %6C %5C %5B %08 %80 %23 %79 %78 %63 %76
%83 %80 %84 %00 %00 %00 %00 %00 %00 %00 %00 %00 %00 %8F %08 %80 %62 %6E %6D %2C %2E %2D %80 %2A %80 %20 %80 %F2 %F3 %F4 %F1 %80
%2B %90 %A0 %80 %80] %80 %80 %80 %80 %80 %08 %80 %37 %38 %39 %2D %34 %35 %36 %3D %31
%32 %33 %30 %2C %F0 %80 %3C %80 %80]
SHIFT_Tab array [54 byte] :=
[%2B %1B %21 %22 %40 %24 %25 %26 %2F %28 %29 %3D %3F %60 %7F %81
%51 %57 %45 %52 %54 %5A %55 %49 %4F %50 %7D %2A %0D %09 %41 %53
%44 %46 %47 %48 %4A %4B %4C %7C %7B %08 %00 %5E %59 %58 %43 %56
%42 %4E %4D %3B %3A %5F]
$PAGE $PAGE