diff --git a/firmware/TERMINAL/p8t.esc.s b/firmware/TERMINAL/p8t.esc.s index b281e43..f62be6c 100644 --- a/firmware/TERMINAL/p8t.esc.s +++ b/firmware/TERMINAL/p8t.esc.s @@ -385,8 +385,9 @@ ENTRY CP CHAR,#'(' JR Z,ESCG0 CP CHAR,#')' - JR ESCG8 + JR z,ESCG8 VIDEO1: + and STAT1,#NB4 land NB7 !ESC- und Video-Flag ruecksetzen! RET @@ -522,53 +523,50 @@ ENTRY 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: tm STAT2,#B3 !VT100/ADM31 ?! jp z,FKT_VT100 ! Auswertung der Tasten-Codes ADM31 ! ! Cursor Movement Tasten ! ld ESCH0,#FF !Forspace! - cp CHAR,#%86 + cp CHAR,#%CD jp z,FKT_AUS ld ESCH0,#BS !Backspace! - cp CHAR,#%88 + cp CHAR,#%CB jp z,FKT_AUS ld ESCH0,#LF !Linefeed! - cp CHAR,#%8A + cp CHAR,#%D0 jr z,FKT_AUS ld ESCH0,#VT !Verticaltab! - cp CHAR,#%8B + cp CHAR,#%C8 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 + cp CHAR,#%CF jr z,FKT_AUS ! Funktionstasten ! LD ESCH0,#'W' ! char delete ! - CP CHAR,#%8F + CP CHAR,#%D2 JR Z,ESC_SEQ_AUS LD ESCH0,#'Q' ! char insert ! - CP CHAR,#%85 + CP CHAR,#%C9 JR Z,ESC_SEQ_AUS LD ESCH0,#'R' ! line delete ! - CP CHAR,#%84 + CP CHAR,#%D3 JR Z,ESC_SEQ_AUS LD ESCH0,#'E' ! line insert ! - CP CHAR,#%81 + CP CHAR,#%D1 JR Z,ESC_SEQ_AUS LD ESCH0,#'Y' ! page erase ! - CP CHAR,#%83 + CP CHAR,#%C7 JR Z,ESC_SEQ_AUS - ld ESCH0,#'T' - cp CHAR,#%82 - jr z,ESC_SEQ_AUS ld ESCH0,#'I' ! BACK_TAB ! - cp CHAR,#%87 + cp CHAR,#%81 jr z,ESC_SEQ_AUS !------------------------------------------------------! @@ -614,47 +612,38 @@ ESC_AUS1: FKT_VT100: ! Cursor Movement Tasten ! ld ESCH0,#'C' !Cursor right! - cp CHAR,#%86 + cp CHAR,#%CD jr z,ESC_SEQ_AUS ld ESCH0,#'D' !Cursor left! - cp CHAR,#%88 + cp CHAR,#%CB jr z,ESC_SEQ_AUS ld ESCH0,#'B' !Cursor down! - cp CHAR,#%8A + cp CHAR,#%D0 jr z,ESC_SEQ_AUS ld ESCH0,#'A' !Cursor up! - cp CHAR,#%8B + cp CHAR,#%C8 jr z,ESC_SEQ_AUS ld ESCH0,#'H' !Cursor home! - cp CHAR,#%8C + cp CHAR,#%CF jr z,ESC_SEQ_AUS - ld ESCH0,#BS - cp CHAR,#%9D - jr z,FKT_AUS ! Funktionstasten ! ld ESCH0,#'P' !Delete character! - cp CHAR,#%8F + cp CHAR,#%D2 jr z,ESC_SEQ_AUS ld ESCH0,#'@' !Insert character! - cp CHAR,#%85 + cp CHAR,#%C9 jr z,ESC_SEQ_AUS ld ESCH0,#'M' !Delete line! - cp CHAR,#%84 + cp CHAR,#%D3 jr z,ESC_SEQ_AUS ld ESCH0,#'L' !Insert line! - cp CHAR,#%81 + cp CHAR,#%D1 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 + cp CHAR,#%C7 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 + cp CHAR,#%81 jp z,ESC_SEQ_AUS jp ESC_OUT0 diff --git a/firmware/TERMINAL/p8t.init.s b/firmware/TERMINAL/p8t.init.s index 338bf27..b27393e 100644 --- a/firmware/TERMINAL/p8t.init.s +++ b/firmware/TERMINAL/p8t.init.s @@ -5,7 +5,8 @@ * 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 * * Inhalt: * * - 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 ! SBUFL := 45 ! SIO-Puffer-Laenge ! 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 ! B0 := %1 ! bit 0 ! @@ -86,7 +87,7 @@ RES4 := %6A ! visible video control ! !ruhender Cursor-Block! RES5 := %4A !volles Feld blinkend! RES6 := %7A !Unterstrich! -RES7 := %6C !changed for 4! +RES7 := %5A !Unterstrich blinkend! ! Field Attribute Code ! FAC := %80 ! Field Attribute: Normal Mode ! @@ -137,7 +138,7 @@ EXTERNAL GLOBAL -$SECTION SECR REGISTER +$SECTION REGISTER $REL 0 ! Ports, Status- und Hilfsregister: Reg.-Grp. 0 ! @@ -161,7 +162,7 @@ $REL %30 -$SECTION SEC0 PROGRAM +$SECTION PROGRAM $REL 0 INTERRUPT ARRAY [6 WORD] := [IRP32 IRP33 IRP31 IRP30 IRT0 IRT1] @@ -174,7 +175,7 @@ ENTRY END JP_MESSAGE ! 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 @@ -250,8 +251,6 @@ ZADR0: ! 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 @@ -383,22 +382,89 @@ IRP33 PROCEDURE *******************************************************! 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 STAT3,#B4 !Eigentest! + + tm STAT0,#B4 !Zeichen verarbeitet ?! + 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 jr TINT0 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 + 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: - ld r4,#TRES + ld r4,#TRES TINTW: tcm STAT0,#B0 ! DMA aktiv?, wenn ja, warten ! diff --git a/firmware/TERMINAL/p8t.main.s b/firmware/TERMINAL/p8t.main.s index b2b7f73..fe22448 100644 --- a/firmware/TERMINAL/p8t.main.s +++ b/firmware/TERMINAL/p8t.main.s @@ -206,6 +206,8 @@ TOUT5: cp CHAR,#'=' jr z,TOUT6 cp CHAR,#'#' + jr z,TOUT10 + cp CHAR,#'<' jr z,TOUT7 call PUTA incw rr6 @@ -220,6 +222,14 @@ TOUT8: ld r6,#HI VAF !on! ld r7,#LO VAF 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: tm STAT2,#B5 !war on/off ?! jr nz,TOUT9 @@ -266,7 +276,7 @@ MAIN10: ! Umschaltung VT100 <---> ADM31 ueber Taste MOD ********************************************* ! MAIN11: - cp CHAR,#%90 + cp CHAR,#%F3 jr nz,MAIN14 tm STAT2,#B3 !VT100/ADM31 ?! jr nz,ADM31 @@ -281,7 +291,7 @@ ADM31: ! Umschaltung Video Attribute on <---> off ueber Taste VIDEO ********************************************************** ! MAIN14: - cp CHAR,#%A0 + cp CHAR,#%F4 jr nz,MAIN13 tm STAT2,#B4 !Video Attribute on/off ?! jr nz,V_off @@ -315,8 +325,9 @@ 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#' +VAN array [* byte] := 'Video Attr. on (c)zft/keaw%R%L#' +VAF array [* byte] := 'Video Attr. off (c)zft/keaw%R%L#' +ERR array [* byte] := 'Error Tastatur<' $PAGE PUTA PROCEDURE @@ -561,88 +572,119 @@ ENTRY push rp srp #%20 - tcm r1,#B7 !Taste mit Vorbyte E1 ?! - jr z,TGET0 - tcm r0,#B0 - jr z,TGET2 - jr TGET3 + tm STAT3,#B7 !Taste mit Vorbyte E1 ?! + jr z,TGET0 !nein! + and ZBYTE,#NB4 + jp TGETV TGET0: - ld r6,r1 - clr r1 - tcm r0,#B0 - jr z,TGET3 - ld r1,r6 - sub r1,#B7 + tm STAT0,#B5 !Taste mit Vorbyte E0 ?! + jp nz,TGETV !ja! + tm STAT3,#B2 !SHIFT-STATUS ein ?! + jr z,TGET1 !nein! +! SHIFT-STATUS ! + 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 - jr nc,TGET1 - inc r2 -TGET1: + adc r2,#0 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 ! +TGET1: 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 + add r3,r1 + adc r2,#0 + ldc r1,@rr2 !Wert aus NORMAL_Tab! + tm STAT3,#B0 !CAPS-LOCK-STATUS ein ?! + jr z,TGET3 !nein! + cp ZBYTE,#'a' !Kleinbuchstaben a ... z ?! + jr ult,TGET3 !nein! + cp ZBYTE,#'z' + jr ugt,TGET3 !nein! + and ZBYTE,#NB5 !Kleinbuchstaben ---> Grossbuchstaben! 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 + tm STAT3,#B1 !CTRL-STATUS ein ?! + jr z,TGET5 !nein! + cp ZBYTE,#'@' !CTRL-Zeichen @ ... DEL ?! + jr ult,TGETE !nein! + cp ZBYTE,#%7F + jr ugt,TGET5 !nein! + and ZBYTE,#NB5 land NB6 !CTRL-Zeichen! + jr TGETE TGET5: - tcm STAT1,#%01 - jr nz,TGET6 + cp ZBYTE,#%F2 !ALT-Taste ?! + jr nz,TGET8 !nein! + +! Umschaltung Zeichensaetze ! + tm STAT1,#B0 + jr z,TGET6 ! Zeichensatz 1 (amerikanisch) ! and STAT1,#NB0 ld r4,#HI ZG0 ld r5,#LO ZG0 - ldc @rr4,r5 + jr TGET7 +! Zeichensatz 2 (Umlaute) ! 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 STAT3,#NB6 land NB7 + 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 @@ -749,13 +791,21 @@ Dez/Hex * 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] + +NORMAL_Tab array [89 byte] := + [%2B %1B %31 %32 %33 %34 %35 %36 %37 %38 %39 %30 %7E %27 %7F %81 + %71 %77 %65 %72 %74 %7A %75 %69 %6F %70 %5D %2B %0D %09 %61 %73 + %64 %66 %67 %68 %6A %6B %6C %5C %5B %08 %80 %23 %79 %78 %63 %76 + %62 %6E %6D %2C %2E %2D %80 %2A %80 %20 %80 %F2 %F3 %F4 %F1 %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