home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1986 January
/
64er_Magazin_86-01_1986_Markt__Technik_de.d64
/
hardcopy.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
8KB
|
310 lines
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 ; irq vektor auf
1480 ldy #>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