1000 OPEN2,8,2,"HARDCOPY.OBJ,P,W" 1010 SYS9*4096 1020 ;********************************* 1030 ;* LOWSCREENHARDCOPY * 1040 ;* INCL. * 1050 ;* GRAFIK- UND REVERSZEICHEN * 1060 ;* EPSON/WIESEMANN & KOMP. * 1070 ;* VERSION 1.2 * 1080 ;* HARALD MEYER 21.05.1985 * 1090 ;********************************* 1100 .OPT O2 ; CODE AUF DISK 1110 *= $C000 ; STARTADRESSE 1120 ; ROUTINEN DES BETRIEBSSYTEMS 1130 ;********************************** 1140 ; 1150 OPEN = $FFC0 ; FILE OEFFNEN 1160 SETNAM = $FFBD ; FILENAMEN SETZEN 1170 SETFLS = $FFBA ; FILEPARAMETER 1180 PRINT = $FFD2 ; ZEICHEN AUSGEBEN 1190 CLRCH = $FFCC ; BILDSCH.-AUSGABE 1200 CHKOUT = $FFC9 ; AUSGABEGERAET 1210 CLOSE = $FFC3 ; FILE SCHLIESSEN 1220 STOP = $FFE1 ; STOPVEKTOR 1230 IRQEND = $EA31 ; KERNAL-IRQ-ROUT. 1240 LOVIDEO = $D018 ; VIDEORAM LO 1250 CHRGEN1 = $D000 ; 1.ZEICHENSATZ 1260 CHRGEN2 = $D800 ; 2.ZEICHENSATZ 1270 ; 1280 ; BENOETIGTE SPEICHERZELLEN 1290 ; ********************************* 1300 ; 1310 CURSOR = 204 ; CURSOR AUS/AN 1320 IRQVEK = $0314 ; IEQ-VEKTOR 1330 TASTE = $C5 ; LETZTE TASTE 1340 F1 = 4 ; F1-MATRIXNUMMER 1350 CR = 13 ; CARRIAGE RETURN 1360 ESC = 27 ; ESCAPE 1370 ADRESSE = $F8 ; ZEICHENADRESSE 1380 ZEICHEN = $D6 ; ZEICHENCODE 1390 VIRAM = $15 ; ZEICHENADRESSE 1400 ZROM = $F9 ; ZEICHENGENERATOR 1410 MASKE = $9D ; BIT-ABFRAGE 1420 ; 1430 ; INTERRUPT INITIALISIEREN 1440 ; ********************************* 1450 ; 1460 SEI ; IRQ VERHINDERN 1470 LDA #START ; DIESES PROGRAMM 1490 STA IRQVEK 1500 STY IRQVEK+1 1510 CLI ; IRQ FREIGEBEN 1520 RTS ; INIT. ENDE 1530 ; 1540 ; 1550 ; F1 GEDRUECKT, DANN START 1560 ; ********************************* 1570 ; 1580 START LDA TASTE ; TASTENABFRAGE 1590 CMP #F1 ; TASTE = F1 "?" 1600 BNE L1 ; NEIN, DANN ENDE 1610 LDA #00 ; TASTENDRUCK 1620 STA TASTE ; LOESCHEN 1630 JSR HDCOPY ; PROGRAMMBEGINN 1640 L1 JMP IRQEND ; ZUM KERNAL-IRQ 1650 ; 1660 ; 1670 ; ZEROPAGE RETTEN 1680 ; ********************************* 1690 ; 1700 HDCOPY LDX #$FF ; BYTE 255-0 1710 L2 LDA 0,X ; LADEN 1720 STA MEMORY,X ; UND SPEICHERN 1730 DEX ; NAECHSTES BYTE 1740 BNE L2 ; X=0, DANN ENDE 1750 LDA #01 1760 STA CURSOR ;AUSSCHALTEN 1770 ; 1780 ; 1790 ; DRUCKERFILE OEFFEN UND 1800 ; ZEILENABSTAND INITIALISIEREN 1810 ; ********************************* 1820 LDA #126 ; FILENUMMER 1830 LDX #4 ; GERAETEADRESSE 1840 LDY #1 ; SEKUNDAERADRESSE 1850 JSR SETFLS ; PARAMETER SETZEN 1860 LDA #0 ; KEIN FILENAMEN 1870 JSR SETNAM ; NAMEN SETZEN 1880 JSR OPEN ; FILE OEFFNEN 1890 LDX #126 ; ALLE 1900 JSR CHKOUT ; AUSGABEN AUF #126 1910 ; 1920 ; DRUCKER AUF EINZEILIGEN ABSTAND 1930 LDA #ESC ; ESC-SEQUENZ-BEGINN 1940 JSR PRINT ; CHR$(27) AN DRUCKER 1950 LDA #"3" ; "3"+CHR$(24) 1960 JSR PRINT 1970 LDA #24 1980 JSR PRINT ; AN DRUCKER 1990 ; 2000 ; ZEIGER AUF VIDEORAM 2010 ; ******************************** 2020 ; 2030 VIDEORAM LDA #$00 2040 LDY $288 ; VIDEORAMADRESSEN 2050 STA VIRAM ; UEBERGEBEN 2060 STY VIRAM+1 2070 ; 2080 ; 2090 ; ZEICHEN VOM SCREEN HOLEN, 2100 ; CHARAKTERGENERATOR LESEN UND 2110 ; ZEICHENMATRIX ZUSAMMENSETZEN 2120 ; ********************************* 2130 ; 2140 LDX #25 ; ZEILENANZAHL 2150 ; 2160 ; AUSGABESCHLEIFE 2170 ; ********************************* 2180 ; 2190 AUSG JSR STOP; STOPTASTE ABFRAGEN 2200 BEQ HDENDE ; GEDRUECKT,DANN ENDE 2210 ; 2220 ; IST ZEILE LEER "?" 2230 ; ********************************* 2240 ; 2250 LDY #39 2260 L9 LDA (VIRAM),Y 2270 CMP #32 2280 BNE L10 2290 DEY 2300 BPL L9 2310 LDA #CR 2320 JSR PRINT 2330 JMP L11 2340 ; 2350 ; CHRGEN-ADRESSE HOLEN 2360 ; GROSS/KLEIN ODER GROSS/GRAFIC 2370 ; ********************************* 2380 ; 2390 L10 JSR CHRTEST ;SCHRIFTMODUS-TEST 2400 ; 2410 ; DRUCKZEILE VORBEREITEN 2420 ; ********************************* 2430 ; 2440 LDY #7 ; 6 CODES 2450 L3 LDA GRAFIK,Y ; ESC-SEQUENZ 2460 JSR PRINT ; SENDEN 2470 DEY ; NAECHSTER CODE 2480 BNE L3 ; FERTIG "?" 2490 ; 2500 ; NEUE ZEILE BEGINNEN 2510 ; ********************************* 2520 ; 2530 LDY #0 ; ZEILE VON NEUEM 2540 ; 2550 ; ZEILE ABARBEITEN, 2. SCHLEIFE 2560 ; ZEICHEN HOLEN UND IM UP BEARBEI. 2570 ; ********************************* 2580 ; ZEICHEN V. BILDSCH. HOLEN 2590 L5 LDA #0 ; ZEICHEN VON 2600 LDA (VIRAM),Y; BILDSCHIRM HOLEN 2610 STA ZEICHEN ; MERKEN 2620 JSR AUSWERT ; BEARBEITEN 2630 INY ; SPALTE ERHOEHEN 2640 CPY #40 ; ZEILENENDE "?" 2650 BNE L5 ; BILDSCH.-ENDE "?" 2660 ; 2670 ; NEUE ZEILE VORBEREITEN 2680 ; ********************************* 2690 ; 2700 L11 LDA #40; 40 SPALTEN 2710 CLC ; ZEIGER AUF NAECHSTE ZEILE 2720 ADC VIRAM ; NEUE ZEILE SETZEN 2730 STA VIRAM 2740 BCC L12 2750 INC VIRAM + 1 2760 L12 DEX ; ZEILEN ERNIEDRIGEN 2770 BNE AUSG ; SCREEN ZU ENDE "?" 2780 HDENDE LDA #13; ZUM ENDE CR AN 2790 JSR PRINT ; DRUCKER SENDEN 2800 ; 2810 ; FERTIG, DANN FILE SCHLIESSEN 2820 ; ********************************* 2830 ; 2840 LDA #126 ; FILENUMMER 2850 JSR CLOSE; DRUCKERDATEI SCHLIESSEN 2860 JSR CLRCH; CMD AUF SCREEN 2870 ; 2880 ; 2890 ; ZEROPAGE WIEDERHERSTELLEN 2900 ; ********************************* 2910 ; 2920 LDX #$FF ; ZEROPAGE 2930 L4 LDA MEMORY,X; WIEDER 2940 STA $00,X ; HERSTELLEN 2950 DEX 2960 BNE L4 2970 ; 2980 RTS ; HARDCOPY ENDE 2990 ; 3000 ; 3010 ; 3020 ; 3030 ; CHARAKTERGENERATOR LESEN 3040 ; ********************************* 3050 ; 3060 AUSWERT PHA; REGISTER RETTEN 3070 TXA 3080 PHA 3090 TYA 3100 PHA 3110 ; 3120 ; ADRESSE IM CHARAKTERRAM BERECH. 3130 ; = ZEICHENCODE * 8 3140 ; ********************************* 3150 ; 3160 LDA ZEICHEN; ZEICHENCODE LADEN 3170 STA ADRESSE; ADRESSE IM ZEICHEN- 3180 LDA #0 ; ROM FESTSTELLEN 3190 STA ADRESSE+1 3200 ASL ADRESSE; ZEICHENCODE 3210 ROL ADRESSE+1 3220 ASL ADRESSE 3230 ROL ADRESSE+1 3240 ASL ADRESSE 3250 ROL ADRESSE+1 ; MAL 8 3260 LDA ADRESSE+1 3270 CLC ; UND 3280 ADC ZROM+1 ; ROMADRESSE 3290 STA ADRESSE+1 ; ADDIEREN 3300 ; 3310 ; CHARAKTERGEN. LESEN UND ZEICHEN- 3320 ; MATRIX FUER DRUCKER AUFBEREITEN 3330 ; ********************************* 3340 ; 3350 LDX $01 ; SPEICHERSELEKT 3360 LDA #%10000000 ; BIT-MASKE 3370 STA MASKE ; SPEICHERN 3380 L14 LDA #$00 ; CODE 3390 PHA ; LOESCHEN 3400 LDY #7 ; 8 BYTES ABFRAGEN 3410 ; 3420 ; CHR-RAM EINSCHALTEN & BYTE LESEN 3430 ; ********************************* 3440 ; 3450 L15 SEI ; IRQ SPERREN 3460 LDA #01:AND #251 ; ZEICHEN-ROM 3470 STA $01 ; SELEKTIEREN 3480 LDA (ADRESSE),Y ; CODE HOLEN 3490 AND MASKE ; MASKENVERGLEICH 3500 ; 3510 ; CHR-ROM WIEDER EINSCHALTEN 3520 ; ********************************* 3530 ; 3540 STX $01 ; NORM SPEICHERKONF. 3550 CLI ; WIEDER HERSTELLEN 3560 BEQ L6 3570 PLA ; CODE LADEN UND 3580 CLC ; CODE LADEN UND 3590 ADC NWERT,Y ; BITWERT ZU CODE ADD. 3600 PHA ; UND MERKEN 3610 L6 DEY ; NAECHSTES BYTE 3620 BPL L15 ; 8 BITS GELESEN "?" 3630 PLA ; JA, DANN 3640 JSR PRINT ; AN DRUCKER 3650 LSR MASKE ; MASKE ERHOEHEN 3660 BCC L14 ; NAECHSTE PUNKTZEILE 3670 ; 3680 ; REGISTER WIEDER HOLEN 3690 ; ********************************* 3700 ; 3710 PLA ; REGISTER WIEDER HOLEN 3720 TAY 3730 PLA 3740 TAX 3750 PLA 3760 RTS 3770 ; 3780 ; ANFANGSADRESSE DES CHARAKTERRAMS 3790 ; FESTSTELLEN UND MERKEN 3800 ; ********************************* 3810 ; 3820 CHRTEST LDA #$00 3830 STA ZROM ; ZEICHENSATZADR. LO 3840 LDA LOVIDEO ; ZEICHENSATZ-PAGE 3850 AND #%00000010 3860 BNE L16 3870 LDA #>CHRGEN1 ;$D000 3880 STA ZROM + 1 3890 .BYT $2C 3900 L16 LDA #>CHRGEN2 ;$D800 3910 STA ZROM + 1 3920 RTS ; ZUM HAUPTPROGRAMM 3930 ; 3940 ; 3950 ; 3960 ;TABELLE 320 BITMUSTERDATEN 3970 GRAFIK .BYT 0,$01,$40 3980 ; 3990 ;EPSON AUF EINZELNADELANSTEUERUNG 4000 .BYT 4,"*",ESC,CR,24 4010 ; 4020 ;TABELLE FUER BIT-WERTIGKEITEN 4030 NWERT .BYT 128,64,32,16,8,4,2,1 4040 ; 4050 ;ZEICHENSATZ STARTADRESSEN 4060 MEMORY .BYT 0 4070 .END 4080 SYS49152