>-----!---------------!------------------------------R AUTO OSCLI("ESCOFF") REM >>> alten Treiber deaktivieren <<< REM Downloaded from Tim's Amstrad NC User's Site REM http://www.ncus.org.uk DIM CODE 50 REM //Speicher fr Maschinenkode reservieren REM //DIM definiert Pointer auf Array of char FOR I%=0 TO 2 STEP 2 REM //Assemblerl„ufe (2 PASS, % def. Integer-Var.) P%=CODE REM //ORG-Pointer bergeben [ OPT I% ;Assembler-Pass-Option einstellen XOR A OUT &60,A ;Interruptquellen sperren LD HL,rout ;Quelladresse alter NMI-Kode LD DE,&38 ;NMI-Adresse LD BC,ende-rout ;Kodeblockl„nge LDIR ;Kode kopieren LD A,&FF OUT &60,A ;alle Interruptquellen freigeben RET ;alter Interruptkode aktiv .rout PUSH AF ;NMI-Kode (erste 3 Byte) LD A,(&B003) .ende ] NEXT I% REM //Ende der Assembler-Pass-Schleife CALL CODE ;Routine ausfhren REM >>> residenten Speicherblock fr Treiber reservieren <<< DIM CODE 50 P%=CODE [ OPT 2 .bhdl DEFW 0 ; Blockhandle DEFW 0 LD DE,&400 CALL &B881 ; HEAPALLOC LD (bhdl),HL PUSH HL EX DE,HL LD BC,1 CALL &B887 ; HEAPLOCK POP DE CALL &B87E ; HEAPADRESS EXX LD HL,0 RET ] BLC%=USR(CODE+4) : REM Blockpointer HDL=!CODE : REM Blockhandle RTL=&A5 : REM right/left UPD=&A6 : REM up/down PRINT" EPSON-Emulator fuer die Schreibmaschine" PRINT" PRAESIDENT electronic 6000 i" PRINT" (robotronS3004-kompatibel)" PRINT" (c)1994 by Carsten Mller" PRINT" email: carsten.mueller@relax-online.de" PRINT"Installation auf Adresse &";~BLC%;"? J/(N):"; INPUT A$ REM HDL muss gueltiges Memory-Handle enthalten IF NOT((A$="j")OR(A$="J")) PROCHEAPFREE:END FOR I%=0 TO 2 STEP 2 P%=BLC% [ OPT I% ;>-----!---------------!----------------------------R .bhdl DEFW HDL ; Blockhandle XOR A OUT &60,A LD HL,rout LD DE,&38 LD BC,ende-rout LDIR LD A,&FF OUT &60,A RET .rout PUSH AF CALL vera .ende .vera PUSH AF XOR A OUT &60,A ; alle INTs sperren LD A,&C9 LD (rout),A ; huuuuhiiihihi POP AF LD (stpo),SP LD SP,stac+&10 PUSH AF IN A,&90 ;Interruptquelle feststellen BIT 2,A JR NZ ver0 POP AF PUSH BC PUSH DE PUSH HL CALL drvr POP HL POP DE POP BC PUSH AF LD A,&F7 OUT &90,A ;clear Interrupt .ver0 POP AF LD SP,(stpo) LD A,&FF OUT &60,A ; INTs wieder zulassen LD A,&F5 ; PUSH AF (RET wieder beseitigen) LD (rout),A LD A,(&B003) RET ; Verkettung zur Original-ISR ;>--!---------!--------!----------------------------R ; EPSON-Emulation fr die Schreibmaschine ; PRŽSIDENT6000i(robotron DDR) ; Version 2.0 ; folgende Codes werden ausgewertet: ; 1B 4B nn ESC K nn Graf.-Mode (wird ohne Auswer- ; tung als ESC K 0006 ignoriert) ; 1B 2D n ESC - n Unterstreichmodus ein/aus ; 1B 52 n ESC R n Zeichensatzumschaltung ; 1B 40 ESC @ Druckerinitialisierung ; 1B 45 ESC E Fettschrift ein ; 1B 46 ESC F Fettschrift aus ; 1B 4D ESC M 12 Zeichen je Zoll (Elite) ; 1B 50 ESC P 10 Zeichen je Zoll (Pica) ; 08 BS backspace ; 0A LF linefeed ; 0D CR carriage return ;>-----!---------------!----------------------------R .drvr LD D,A LD A,3 OUT &40,A ; /RxD=1, /CTS=1 LD B,7 ; "Fehlstart" NOP-berbrcken .rept LD A,204 .wrte SUB 1 JR NZ wrte DJNZ rept LD A,D LD HL,stat BIT 2,(HL) ; 2nd? JR Z nex0 LD HL,(pufz) ; *Puffermanager* LD (HL),A INC HL LD (pufz),HL LD HL,xmal DEC (HL) RET NZ LD HL,stat RES 2,(HL) ; reset 2nd-flag LD HL,bpuf ; *2. Befehlsdecoder* LD A,(HL) INC HL CP &2D ; Unterstreichmodus? (ESC - n) JR NZ bfl2 LD A,(HL) AND 1 LD HL,stat RES 0,(HL) OR (HL) ; Unterstr.-flag set/reset LD (HL),A RET .bfl2 CP &52 ; neuer Zeichensatz? (ESC R n) JR NZ bfl3 LD A,(HL) INC A LD HL,zsz0 LD BC,12 JR nzs2 .nzs1 ADD HL,BC .nzs2 DEC A JR NZ nzs1 LD DE,ctab LD BC,trgt .nzs3 LD A,(BC) CP &FF RET Z PUSH BC LD C,A LD B,0 EX DE,HL ADD HL,BC EX DE,HL POP BC LDI JR nzs3 .bfl3 CP &4B ; ESC K? RET NZ JP sret .nex0 BIT 3,(HL) ; ESC-flag testen JR Z nex1 LD (bpuf),A ; *Klassifikator* LD BC,stat-cdes LD HL,cdes CPIR XOR A OR B ; BC=0? OR C JR Z snst ; Einfach-ESC selektieren LD A,&60 CPIR LD A,(HL) SUB &60 LD (xmal),A LD HL,bpuf+1 LD (pufz),HL LD HL,stat SET 2,(HL) ; 2nd-flag setzen RES 3,(HL) ; reset ESC-flag RET .nex1 CP &1B ; ESC? JR NZ conv LD HL,stat SET 3,(HL) ; ESC-flag setzen RET .snst LD A,(bpuf) LD HL,stat ; *1. Befehlsdecoder* RES 3,(HL) ; reset ESC-flag CP &4D ; 12 Z. je Zoll JR NZ nex5 LD A,&88 JR dret .nex5 CP &50 ; 10 Z. je Zoll JR NZ nex6 LD A,&87 JR dret .nex6 CP &40 ; Druckerreset JR NZ nex7 LD (HL),0 LD HL,init ; Initialisierung JR sequ .nex7 CP &45 ; fett ein JR NZ nex8 SET 1,(HL) RET .nex8 CP &46 ; fett aus RET NZ RES 1,(HL) RET .conv BIT 7,A ; 7BIT-Filter RET NZ LD HL,ctab ; ASCII->6000i LD B,0 LD C,A ADD HL,BC LD A,(HL) LD D,A LD HL,stat CP &9F ; Zeilenvorschub (0A) JR Z dret CP &78 ; Wagenrcklauf (0D) JR Z dret CP &72 ; Backspace (08) JR Z dret OR A ; NUL (00) JR Z dret CP &71 ; Space (20) JR NZ nex9 BIT 0,(HL) JR Z sret .nex9 BIT 1,(HL) ; fett-flag testen JR Z ustr LD HL,fett CALL sequ .ustr LD A,(stat) BIT 0,A ; Unterstr.-flag testen JR Z lstc LD A,&A9 CALL outc LD A,&01 ; Unterstrich CALL outc .lstc LD A,D CALL druc .sret LD A,&80 ; Randl”ser f. rechten Rand CALL outc LD A,&71 ; Wagenvorschub .dret CALL outc RET .sequ LD A,(HL) .nex2 CP &5A JR NZ nex3 LD A,D PUSH HL CALL druc POP HL .nex3 CALL NZ outc INC HL LD A,(HL) OR A JR NZ nex2 RET .druc LD HL,extd-2 ; Tabelle des extended charset .ext0 INC HL INC HL AND (HL) JR Z ext1 ; JR falls kein Sonderzeichen LD A,D CP (HL) INC HL JR NZ ext0 LD C,(HL) INC HL LD B,(HL) LD H,B LD L,C JR sequ .ext1 LD A,&A9 CALL outc LD A,D .outc CPL ; Ausgabezeichen in A LD C,A ; /Druckz. nach Reg. C LD A,3 OUT &40,A ; /RxD=1, /CTS=1 .look IN A,&A0 ; /RTS=0? AND 2 JR NZ look LD A,2 OUT &40,A ; Startbit, /CTS=1 LD A,201 .dlay SUB 1 JR NZ dlay LD B,9 .next LD A,C CPL AND 1 OR 2 ; /CTS=1 OUT &40,A LD A,201 .dela SUB 1 JR NZ dela SRL C DJNZ next RET ;-------------------------------------------------- .stpo DEFW 0 ; alter Stackpointer .char DEFB 0 ; konvertiertes Druckzeichen .fett DEFB &A5 ; ff. Fettdrucksequenz DEFB &FF DEFB &5A ; Ersetzer f. Druckzeichen DEFB &A5 DEFB &01 NOP ; termination .cdes DEFB &53 ; ESC X +1 DEFB &57 DEFB &21 DEFB &2D DEFB &03 DEFB &41 DEFB &4A DEFB &6A DEFB &4E DEFB &43 DEFB &51 DEFB &31 DEFB &52 DEFB &55 DEFB &78 DEFB &60 ; Blockende DEFB &61 ; Ueberzahl+&60 DEFB &42 ; ESC X +2 DEFB &44 DEFB &60 ; wie oben DEFB &62 ; -"- DEFB &4B ; ESC X +8 DEFB &60 ; wie oben DEFB &68 ; -"- .stat DEFB 0 ; 3/esc 2/scnd 1/fett 0/ustr .xmal DEFB 0 .pufz DEFW 0 .bpuf DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 .init DEFB &95 ; Resetsequenz DEFB &80 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &72 DEFB &71 DEFB &7E DEFB &87 NOP .chr1 DEFB UPD ; < DEFB &11 DEFB RTL DEFB &03 DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &FB DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &FC DEFB &29 DEFB UPD DEFB &FA DEFB RTL DEFB &03 DEFB &29 DEFB UPD DEFB &FE NOP .chr2 DEFB UPD ; > DEFB &11 DEFB RTL DEFB &FD DEFB &29 DEFB RTL DEFB &03 DEFB UPD DEFB &FB DEFB &29 DEFB UPD DEFB &FC DEFB RTL DEFB &03 DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &FA DEFB &2B DEFB UPD DEFB &FE NOP .chr3 DEFB RTL ; [ DEFB &FC DEFB &A9 DEFB &27 DEFB RTL DEFB &04 DEFB UPD DEFB &11 DEFB &A9 DEFB &62 DEFB UPD DEFB &DA DEFB &A9 DEFB &62 DEFB UPD DEFB &15 NOP .chr4 DEFB RTL ; ] DEFB &04 DEFB &A9 DEFB &27 DEFB RTL DEFB &FC DEFB UPD DEFB &11 DEFB &A9 DEFB &62 DEFB UPD DEFB &DA DEFB &A9 DEFB &62 DEFB UPD DEFB &15 NOP .chr5 DEFB UPD ; { DEFB &1A DEFB RTL DEFB &03 DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &F7 DEFB &A9 DEFB &17 DEFB UPD DEFB &FB DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &FC DEFB &29 DEFB RTL DEFB &03 DEFB UPD DEFB &F9 DEFB &A9 DEFB &17 DEFB UPD DEFB &FA DEFB &29 DEFB UPD DEFB &05 NOP .chr6 DEFB UPD ; } DEFB &1A DEFB RTL DEFB &FD DEFB &29 DEFB RTL DEFB &03 DEFB UPD DEFB &F7 DEFB &A9 DEFB &17 DEFB UPD DEFB &FB DEFB &29 DEFB UPD DEFB &FC DEFB RTL DEFB &03 DEFB &2B DEFB RTL DEFB &FD DEFB UPD DEFB &F9 DEFB &A9 DEFB &17 DEFB UPD DEFB &FA DEFB &2B DEFB UPD DEFB &05 NOP .chr7 DEFB RTL ; ~ DEFB &FC DEFB &29 DEFB RTL DEFB &05 DEFB &2B DEFB &29 DEFB RTL DEFB &FF NOP .chr8 DEFB RTL DEFB &FE DEFB UPD DEFB &02 DEFB &2B DEFB UPD DEFB &05 DEFB RTL DEFB &02 DEFB &2B DEFB UPD DEFB &05 DEFB RTL DEFB &02 DEFB &2B DEFB UPD DEFB &05 DEFB RTL DEFB &02 DEFB &2B DEFB UPD DEFB &EF DEFB RTL DEFB &FC NOP .chr9 DEFB &A9 DEFB &20 DEFB UPD DEFB &0A DEFB RTL DEFB &01 DEFB &A9 DEFB &39 DEFB RTL DEFB &02 DEFB UPD DEFB &FD DEFB &A9 DEFB &17 DEFB UPD DEFB &F9 DEFB RTL DEFB &FD NOP .extd DEFB &68 ; < DEFW chr1 DEFB &69 ; > DEFW chr2 DEFB &6A ; [ DEFW chr3 DEFB &6B ; ] DEFW chr4 DEFB &6C ; { DEFW chr5 DEFB &6D ; } DEFW chr6 DEFB &6E ; ~ DEFW chr7 DEFB &6F ; \ DEFW chr8 DEFB &73 ; @ DEFW chr9 NOP DEFB &FF ; termination DEFB &00 DEFB &00 DEFB &00 DEFB &1A DEFB &01 DEFB &00 DEFB &00 DEFB &00 DEFB &1A DEFB &1B DEFB &00 .trgt DEFB &23 ; Zieltabelle (absteigend) .zsz0 DEFB &41 ; Korrekturzeichensaetze DEFB &48 DEFB &73 DEFB &6A DEFB &6F DEFB &6B DEFB &19 DEFB &2B DEFB &6C DEFB &27 DEFB &6D DEFB &6E .zsz1 DEFB &41 DEFB &48 DEFB &71 DEFB &39 DEFB &45 DEFB &3D DEFB &19 DEFB &2B DEFB &44 DEFB &71 DEFB &46 DEFB &71 .zsz2 DEFB &41 DEFB &48 DEFB &3D DEFB &3F DEFB &3C DEFB &3A DEFB &19 DEFB &2B DEFB &65 DEFB &66 DEFB &67 DEFB &47 .zsz3 DEFB &06 DEFB &48 DEFB &73 DEFB &6A DEFB &6F DEFB &6B DEFB &19 DEFB &2B DEFB &6C DEFB &27 DEFB &6D DEFB &6E .zsz4 DEFB &41 DEFB &48 DEFB &73 DEFB &71 DEFB &71 DEFB &30 DEFB &19 DEFB &2B DEFB &71 DEFB &71 DEFB &71 DEFB &6E .zsz5 DEFB &41 DEFB &71 DEFB &71 DEFB &3F DEFB &3C DEFB &30 DEFB &3A DEFB &44 DEFB &65 DEFB &66 DEFB &71 DEFB &67 .zsz6 DEFB &41 DEFB &48 DEFB &73 DEFB &39 DEFB &6F DEFB &44 DEFB &19 DEFB &71 DEFB &71 DEFB &71 DEFB &46 DEFB &71 .zsz7 DEFB &71 DEFB &48 DEFB &73 DEFB &05 DEFB &71 DEFB &71 DEFB &19 DEFB &2B DEFB &71 DEFB &71 DEFB &6D DEFB &6E .zsz8 DEFB &41 DEFB &48 DEFB &73 DEFB &6A DEFB &71 DEFB &6B DEFB &19 DEFB &2B DEFB &6C DEFB &27 DEFB &6D DEFB &6E .ctab DEFB 0 ; Umcodiertabelle DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 116 DEFB 114 DEFB 121 DEFB 159 DEFB 118 DEFB 124 DEFB 120 DEFB 0 DEFB 0 DEFB 0 DEFB 149 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 0 DEFB 120 DEFB 0 DEFB 113 DEFB 66 DEFB 67 DEFB 65 DEFB 72 DEFB 4 DEFB 2 DEFB 41 DEFB 29 DEFB 31 DEFB 27 DEFB 37 DEFB 100 DEFB 98 DEFB 99 DEFB 64 DEFB 13 DEFB 17 DEFB 16 DEFB 15 DEFB 14 DEFB 12 DEFB 11 DEFB 10 DEFB 9 DEFB 8 DEFB 19 DEFB 59 DEFB 104 DEFB 46 DEFB 105 DEFB 53 DEFB 7 DEFB 48 DEFB 24 DEFB 32 DEFB 20 DEFB 52 DEFB 62 DEFB 28 DEFB 18 DEFB 33 DEFB 50 DEFB 36 DEFB 44 DEFB 22 DEFB 42 DEFB 30 DEFB 47 DEFB 26 DEFB 54 DEFB 51 DEFB 55 DEFB 40 DEFB 34 DEFB 45 DEFB 38 DEFB 49 DEFB 56 DEFB 63 DEFB 61 DEFB 58 DEFB 25 DEFB 1 DEFB 43 DEFB 97 DEFB 78 DEFB 87 DEFB 83 DEFB 90 DEFB 73 DEFB 96 DEFB 85 DEFB 5 DEFB 75 DEFB 80 DEFB 77 DEFB 74 DEFB 92 DEFB 94 DEFB 91 DEFB 82 DEFB 89 DEFB 88 DEFB 86 DEFB 93 DEFB 79 DEFB 76 DEFB 95 DEFB 81 DEFB 84 DEFB 101 DEFB 102 DEFB 103 DEFB 71 DEFB 0 DEFB 0 DEFB 0 .stac ] NEXT I% CALL BLC%+2 OSCLI("ESCON") END DEF PROCHEAPFREE DIM CODE 10 P%=CODE [ OPT 2 LD DE,HDL CALL &B884 ; HEAPFREE RET ] IF HDL<>0 CALL CODE IF HDL=0 PRINT" Zuwenig unterer Speicher!" PRINT" Treiber nicht installiert." OSCLI("ESCON") ENDPROC