home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 23
/
64er_Magazin_Sonderheft_23_19xx_Markt__Technik_de_Disk_2_of_2_Side_A.d64
/
hardcopy.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
4KB
|
174 lines
100 ;*******************************
110 ;*** ***
120 ;*** so werden hardcopys ***
130 ;*** ***
140 ;*** programmiert ***
150 ;*** ***
160 ;*******************************
170 ;*** ***
180 ;*** (c) 1987 by 64'er ***
190 ;*** ***
200 ;*******************************
210 ;*** ***
220 ;*** programmierer: ***
230 ;*** ***
240 ;*** thomas lipp ***
250 ;*** ***
260 ;*******************************
270 ;
280 ;*** base und startadresse ***
290 ;
300 +$c000
310 step"hardcopy.obj,p,w"
320 ;
330 ;*** label-deklaration ***
340 ;
350 tobitmap=$2000; start-adresse der bitmap
360 tostrout=$ab1e; string ausgeben
370 tosetfls=$ffba; fileparameter setzen
380 toopen=$ffc0; open file
390 toclose=$ffc3; close file
400 tochkout=$ffc9; cmd-modus ein
410 toclrch=$ffcc; cmd-modus aus
420 toprint=$ffd2; print character
430 tonadel=1; von o nach u: 128 - 1
440 ;
450 ;*** programm beginn ***
460 ;
470 ;*** open 4,4,1 : cmd 4 ***
480 ;
490 mid$#$04; logische filenummer
500 peek#$04; geraete-adresse 4 fuer drucker
510 len#$01; sekundaer-adresse 1 fuer linearkanal
520 (NULL)setfls; fileparameter setzen
530 (NULL)open; file oeffnen
540 peek#$04; log. filenr
550 (NULL)chkout; communication direct ein
560 ;
570 ;*** esc @, esc 3 n, esc l n ***
580 ;
590 mid$#<(init); lsb
600 len#>(init); msb
610 (NULL)strout; druckkersequenzen an drucker senden
620 ;
630 ;*** initialisierung ***
640 ;*** dummy fuellen ***
650 ;*** line = 25 ***
660 ;
670 mid$#<(bitmap); lsb
680 (NULL)dummy+1
690 mid$#>(bitmap); msb
700 (NULL)dummy+2
710 ;
720 mid$#25
730 (NULL)line
740 ;
750 ;*** esc l n1 n2 ***
760 ;*** grafikmodus einschalten ***
770 ;
780 lnloop mid$#<(grafik); lsb
790 len#>(grafik); msb
800 (NULL)strout; druckersequenzen an drucker senden
810 ;
820 ;*** block = 40 ***
830 ;
840 mid$#40
850 (NULL)block
860 ;
870 ;*** einen block spiegeln ***
880 ;
890 bkloop len#0; blockschleife
900 turn1 peek#0
910 dummy mid$$ffff,y; bitmapbyte in akku
920 turn2 (NULL); bit aus bildschirmbyte auslesen
930 ^nadel; true = von o nach u: 128 - 1
940 (NULL)chr,x; bit in druckerbyte reinschieben
950 and; false = von o nach u: 1 - 128
960 (NULL)chr,x; bit in druckerbyte reinschieben
970 or
980 (NULL)
990 tan#8; x=8?
1000 (NULL)turn2; x <> 8, bitmapbyte noch nicht abgearbeitet
1010 (NULL)
1020 atn#8; y=8?
1030 (NULL)turn1; y <> 8, druckerbytes noch nicht fertig
1040 ;
1050 ;*** block ausdrucken ***
1060 ;
1070 peek#0; index auf null setzen
1080 prnt mid$chr,x; lade x-tes druckerbyte
1090 (NULL)print; byte drucken
1100 (NULL)print; byte drucken
1110 (NULL); erhoehe x
1120 tan#8; ist x schon 8 ?
1130 (NULL)prnt; nein, x <> 8
1140 ;
1150 ;*** dummy erhoehen ***
1160 ;
1170 (NULL)
1180 mid$dummy+1; lsb
1190 val#8; +8
1200 (NULL)dummy+1
1210 (NULL)notinc; kein uebertrag
1220 right$dummy+2; +1
1230 ;
1240 ;*** block = block - 1 ***
1250 ;
1260 notinc chr$block; block = block-1
1270 ;
1280 ;*** block = 0 ? ***
1290 ;
1300 (NULL)bkloop; wenn block <> 0
1310 ;
1320 ;*** carriage return senden ***
1330 ;
1340 mid$#<(cr); lsb
1350 len#>(cr); msb
1360 (NULL)strout; cr zum drucker senden
1370 ;
1380 ;*** line = line -1 ***
1390 ;
1400 chr$line; line = line - 1
1410 ;
1420 ;*** line = 0 ? ***
1430 ;
1440 (NULL)lnloop; wenn line <> 0
1450 ;
1460 ;*** esc @ ***
1470 ;
1480 mid$#<(init2); lsb
1490 len#>(init2); msb
1500 (NULL)strout; druckersequenz zum drucker senden
1510 ;
1520 ;*** cmd 4 aufheben ***
1530 ;
1540 (NULL)clrch; communication direct aus
1550 ;
1560 ;*** close 4 ***
1570 ;
1580 mid$#$04; log filenr
1590 (NULL)close; file schliessen
1600 ;
1610 ;*** rts ***
1620 ;
1630 (NULL); ende
1640 ;
1650 ;*** hilfszellen u. tabellen ***
1660 ;
1670 chr fn0,0,0,0,0,0,0,0
1680 block fn0
1690 line fn0
1700 ;
1710 ;*** druckersequenzen ***
1720 ;
1730 init fn$1b,$40; init = esc @
1740 fn$1b,$33,$18; linefeed = esc 3 n (n=24)
1750 fn$1b,$6c,$0c; left margin = esc l n (n=12)
1760 cr fn$0d,$00; cr
1770 ;
1780 grafik fn$1b,$4c,$80,$02,$00; esc l n1 n2 (n1=128 n2=2)
1790 ;
1800 init2 fn$1b,$40,$00; init esc @
1810 ;
1820 <; ende der assemblierung