AORG >3000 REF VMBW,VWTR,KSCAN SCHNIT EQU >1540 * RS232/3 CHRCRU EQU >1000 * CHAR-DEFINITIONEN DSRROM EQU >0 * CS DSR-ROM SPACE BYTE >20 * BLANK-CHAR FLASH BYTE >00 * FLASH-COLOR TITLE BYTE >0F * TITLE-SCREEN-TASTE CNTRL BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>9D BYTE >98,>97,>93,>B2,>9F,>8F,>8C,>9B BYTE >83,>85,>84,>B3,>9E,>89,>8B,>80 BYTE >96,>92,>86,>B4,>B7,>95,>8A,>8D BYTE >82,>94,>87,>B5,>B6,>99,>88,>8E BYTE >9A,>91,>81,>B1,>B0,>90,>9C,>BB FCTN BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>05 BYTE >0A,>7E,>08,>04,>0F,>27,>C2,>B9 BYTE >60,>0B,>09,>07,>06,>3F,>C1,>B8 BYTE >7F,>5B,>7B,>02,>01,>5F,>C0,>C3 BYTE >BE,>5D,>7D,>0E,>0C,>C6,>BF,>C4 BYTE >5C,>B9,>7C,>03,>BC,>22,>BD,>BA SHIFT BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>2B BYTE >58,>57,>53,>40,>28,>4F,>4C,>3E BYTE >43,>45,>44,>23,>2A,>49,>4B,>3C BYTE >56,>52,>46,>24,>26,>55,>4A,>4D BYTE >42,>54,>47,>25,>5E,>59,>48,>4E BYTE >5A,>51,>41,>21,>29,>50,>3A,>2D NORM BYTE >FF,>FF,>FF,>FF,>FF,>0D,>20,>3D BYTE >78,>77,>73,>32,>39,>6F,>6C,>2E BYTE >63,>65,>64,>33,>38,>69,>6B,>2C BYTE >76,>72,>66,>34,>37,>75,>6A,>6D BYTE >62,>74,>67,>35,>36,>79,>68,>6E BYTE >7A,>71,>61,>31,>30,>70,>3B,>2F EVEN JMPLST DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA BCKSPC DATA HTAB DATA LNFEED DATA VTAB DATA CLS DATA CARRET DATA NUL DATA NUL DATA NUL DATA NUL DATA DCTRL2 DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL DATA NUL REGDAT DATA >0004,>0170,>0203,>032F * 80 ZEICHEN KARTE DATA >0402,>07F1,>088A,>0982 DATA >0A00,>0CF5,>0DF0,>0E00 DATA >0F00,>1000,>122D,>1300 DATA >1700,>0000 TEXT0 TEXT ' ' BLANK TEXT ' ' TEXT ' 1: 1200 Baud ' TEXT ' 2: 9600 Baud ' TEXT ' 3: 19200 Baud ' TEXT ' 4: 38400 Baud ' TEXT ' ' TEXT ' 8 Datenbits, No Parrity, 1 Stop' TEXT ' ' EVEN OLDKEY BSS >2 MYWS BSS >20 *-----------------------------+ * MAIN-PROG FOLLOW ! *-----------------------------+ START LWPI MYWS LI 0,>0040 MOVB 0,@>8C02 SWPB 0 MOVB 0,@>8C02 LI 2,>870 CLR MOVB @SPACE,@>8C00 DEC 2 JNE CLR LI 0,>4000 MOVB 0,@>8C02 LI 1,TEXT0 MOVB 0,@>8C02 LI 2,>100 TXLOP MOVB *1+,@>8C00 DEC 2 JNE TXLOP CLR @>8374 TASTE BLWP @KSCAN MOVB @>837C,@>837C JEQ TASTE MOVB @>8375,1 SRL 1,8 CI 1,>31 JLT TASTE CI 1,>34 JGT TASTE AI 1,>FFCF SLA 1,1 BL @RS232 * INIT DER RS232/1 LI 1,REGDAT * 80-ZEICHEN-DISPLAY REGLOP MOV *1+,0 JEQ REGFIN BLWP @VWTR JMP REGLOP * KEINE ZUWEISUNG NACH >83D4, ALLE INT'S GESPERRT REGFIN LI 0,>004A MOVB 0,@>8C02 SWPB 0 MOVB 0,@>8C02 LI 2,>10E COLCLR MOVB @FLASH,@>8C00 * COLOR'S LOESCHEN DEC 2 JNE COLCLR LI 12,CHRCRU * CHAR'S HOLEN SBO DSRROM LI 0,>1000 LI 1,>4BF8 LI 2,>800 BLWP @VMBW A 2,1 LI 2,>8 DCHARL MOV *1+,0 * DEUTSCHE UMLAUTE JEQ DCHARE BLWP @VMBW A 2,1 JMP DCHARL DCHARE SBZ DSRROM LI 13,>A000 * SCHREIB-POINTER LI 14,>A000 * LESE-POINTER BL @CLS * BILDSCHIRM LOESCHEN *-----------------------------+ MAXTIME BIS ZUM NAECHSTEN RX-PART 200uS TSCAN1 LI 12,SCHNIT ! MAXIMALE BAUDRATE RELATIV GENAU 38400 BAUD TB 21 ! JNE SCAN ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ SCAN ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE SCAN ! LI 13,>A000 ! SCAN CLR 12 ! SBO 21 ! ALPHA-LOCK AUS LI 1,>5 ! FUENF TASTEN REIHEN CLR 5 ! CLR 7 ! SCANLP LI 12,>24 ! SWPB 1 ! LDCR 1,3 ! SWPB 1 ! LI 12,>6 ! SETO 4 ! STCR 4,8 ! INV 4 ! MOV 1,1 ! JNE NOLAST ! MOVB 4,7 ! LETZTE REIHE CONTROL-KEYS IN R7 SICHERN, ABER ANDI 4,>0F00 ! KEIN REALE TASTE NOLAST MOV 4,4 ! JEQ KSEND ! ZEICHEN VON TASTATUR EMPFANGEN? -> NEIN MOV 5,5 ! JNE KSEND ! FALLS ZEICHEN SCHON EMPFANGEN, KEINE WEITEREN SETO 5 ! ERSTE ZEICHEN EMPFANGEN MOV 1,6 ! SLA 6,3 ! DEC 6 ! BIT INC 6 ! BITS AUSSELKTIEREN SLA 4,1 ! JNC BIT ! MOV 1,1 ! NACH EMPFANGEN ZEICHEN LOOP VERKUERZEN! JEQ KSEND ! LI 1,>1 ! NOCH EINE REIHE FUER CONTROL-KEYS! (LETZTE) KSEND LI 12,SCHNIT ! RS232-LESE-ROUTINE TB 21 ! JNE KSEND1 ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ KSEND1 ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE KSEND1 ! LI 13,>A000 ! KSEND1 DEC 1 ! NAECHSTE LOOP JOC SCANLP ! VORZEICHEN-WECHSEL? *-----------------------------+ MOV 5,5 JNE GETKEY * EINE TASTE SETO @OLDKEY JMP READLB GETKEY C 6,@OLDKEY JEQ READLB * GLEICHE TASTE MOV 6,@OLDKEY LI 1,CNTRL SLA 7,2 JOC KEYOK LI 1,FCTN SRL 7,15 JOC KEYOK LI 1,SHIFT DEC 7 JEQ KEYOK LI 1,NORM KEYOK A 6,1 MOVB *1,1 * HIER JETZT RICHTIGE TASTE CLR 12 SBZ 21 MOV 1,6 TB 7 JEQ NOALPH SRL 6,8 CI 6,>61 JLT NOALPH CI 6,>7A JGT NOALPH AI 1,>E000 NOALPH SBO 21 CB 1,@TITLE JNE NOTITL BLWP @>0000 NOTITL LI 12,SCHNIT *-----------------------------+ SBO 16 ! SEND2 TB 22 ! JNE SEND2 ! SEND LDCR 1,8 ! SBZ 16 ! TB 21 ! RECEIVE JNE READLB ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ READLB ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE READLB ! LI 13,>A000 ! READLB C 13,14 ! MAXIMALE ZEIT SEIT LETZTEM RX -> 73 uS JEQ TSCAN2 ! MOVB *14+,1 ! POP DATA CI 14,>FFFE ! JNE NEXT ! LI 14,>A000 ! NEXT CB 1,@SPACE ! JHE ASCKEY ! B @CTRL ! ASCKEY BL @CHECK ! MAXIMAL VERBRAUCHTE ZEIT -> 103 uS MOV 2,0 ! MAXIMALE ZEIT AUS CHECK -> 127 uS A 3,0 ! ORI 0,>4000 ! SWPB 0 ! MOVB 0,@>8C02 ! SWPB 0 ! MOVB 0,@>8C02 ! INC 3 ! MOVB 1,@>8C00 ! TSCAN2 B @TSCAN1 ! MAXIMALE ZEIT -> 175 uS *-----------------------------+ CHECK TB 21 ! JNE CHECK0 ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ CHECK0 ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE CHECK0 ! LI 13,>A000 ! CHECK0 CI 3,>FFFF ! JGT CHECK1 ! LI 3,>4F ! AI 2,>FFB0 ! CHECK1 CI 3,>50 ! JLT CHECK3 ! CLR 3 ! AI 2,>50 ! CHECK3 CI 2,>820 ! JLT CHECK4 ! SCROLL LI 2,>820 ! >300 BIS >31F IST EINE BLANKLINE! LI 3,>0050 ! LI 4,>4000 ! SCRLOP TB 21 ! JNE NOSCR ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ NOSCR ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE NOSCR ! MAXIMALE ZEIT BIS RETURN 127 uS! LI 13,>A000 ! NOSCR SWPB 3 ! MOVB 3,@>8C02 ! SWPB 3 ! MOVB 3,@>8C02 ! INC 3 ! MOVB @>8800,6 ! SWPB 4 ! MOVB 4,@>8C02 ! SWPB 4 ! MOVB 4,@>8C02 ! INC 4 ! MOVB 6,@>8C00 ! DEC 2 ! JNE SCRLOP ! LI 2,>7D0 ! CLR 3 ! CHECK4 RT ! *-----------------------------+ CTRL SRL 1,7 ! MAXIMAL VERBRAUCHTE ZEIT -> 103 uS ANDI 1,>3E ! AI 1,JMPLST ! MOV *1,10 ! BL *10 ! +-> OHNE SUBROUTINE! BL @CHECK ! MAXIMAL ZEIT -> 143 + Subx uS (RX IN CHECK) B @TSCAN1 ! MAXIMAL VERBRAUCHTE ZEIT -> 127 uS *-----------------------------+ NUL RT ! *-----------------------------+ BACK BLWP @>0000 ! ZEITEN FUER SUBROUTINES : *-----------------------------+ BCKSPC MOV 2,0 ! NUL 4 uS Realativer Offset A 3,0 ! BCKSPC 58 uS " DEC 0 ! HTAB 7 uS " ORI 0,>4000 ! LNFEED 9 uS " SWPB 0 ! VTAB 9 uS " MOVB 0,@>8C02 ! CARRET 7 uS " SWPB 0 ! CLS 67 uS Absolut! Rx in CLS! MOVB 0,@>8C02 ! DCTRL2 84 us Absolut! Rx in DCTRL2! DEC 3 ! MOVB @SPACE,@>8C00 ! RT ! *-----------------------------+ HTAB INC 3 ! RT ! *-----------------------------+ LNFEED AI 2,>50 ! RT ! *-----------------------------+ VTAB AI 2,>FFB0 ! RT ! *-----------------------------+ CARRET CLR 3 ! RT ! *-----------------------------+ CLS LI 0,>0040 ! MOVB 0,@>8C02 ! SWPB 0 ! MOVB 0,@>8C02 ! LI 2,>820 ! CLSLOP TB 21 ! AUFRUF SPAETESTENS NACH 178 uS JNE NOCLS ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ NOCLS ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE NOCLS ! LI 13,>A000 ! NOCLS MOVB @SPACE,@>8C00 ! DEC 2 ! JNE CLSLOP ! CLR 3 ! RT ! *-----------------------------+ DCTRL2 TB 21 ! DEVICE-CONTROL 2, WIRD HIER BENUTZT UM CURSOR ZU JNE DCTRLN ! POSITIONIEREN STCR *13,8 ! SBZ 18 ! HIER IST KEIN ABBRUCH MOEGLICH, ES MUESSEN ZWEI TB 9 ! BYTES FOLGEN!!! JEQ DCTRLN ! INC 13 ! CI 13,>FFFE ! JNE DCTRLN ! LI 13,>A000 ! DCTRLN C 13,14 ! QUEUE EMPTY? ->WARTEN! JEQ DCTRL2 ! MOVB *14+,3 ! HIER MUSS DATA EXISTIEREN! SRL 3,8 ! CI 14,>FFFE ! JNE DCTRLW ! LI 14,>A000 ! DCTRLW TB 21 ! ZEICHEN VORHANDEN? JNE DCTRLC ! STCR *13,8 ! PUSH DATA ON FIFO SBZ 18 ! TB 9 ! PARITY OK ? JEQ DCTRLC ! INC 13 ! SCHREIB-POINTER +1 CI 13,>FFFE ! JNE DCTRLC ! LI 13,>A000 ! DCTRLC C 13,14 ! QUEUE EMPTY? JEQ DCTRLW ! MOVB *14+,1 ! CI 14,>FFFE ! JNE DCTRLE ! LI 14,>A000 ! DCTRLE SRL 1,8 ! R2 BERECHNEN LI 0,>50 ! MPY 0,1 ! RT ! *-----------------------------+------------------------------------------------+ BAUD DATA >01A1 * 1200 FEHLER 0.08 % ! DATA >0034 * 9600 FEHLER 0.16 % ! DATA >001A * 19200 FEHLER 0.16 % ! DATA >000D * 38400 FEHLER 0.16 % ! RS232 LI 12,SCHNIT ! SBO 31 * ALLE BITS 14,13,12,11 AN! ! LI 15,>8300 * 8 DATENBITS PARRITY=NONE 1 STOPBIT //4M-BIT =0 ! LDCR 15,8 ! SBZ 13 ! LDCR @BAUD(1),12 ! RT ! *==============================================================================+ END START
© Dr. Henry Koplien