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 >
Commodore BASIC  |  2022-10-26  |  8KB  |  310 lines

  1. 1000 open2,8,2,"hardcopy.obj,p,w"
  2. 1010 sys9*4096
  3. 1020 ;*********************************
  4. 1030 ;*      lowscreenhardcopy        *
  5. 1040 ;*            incl.              *
  6. 1050 ;*   grafik- und reverszeichen   *
  7. 1060 ;*     epson/wiesemann & komp.   *
  8. 1070 ;*         version 1.2           *
  9. 1080 ;*    harald meyer 21.05.1985    *
  10. 1090 ;*********************************
  11. 1100 .opt o2  ; code auf disk
  12. 1110 *= $c000 ; startadresse
  13. 1120 ; routinen des betriebssytems
  14. 1130 ;**********************************
  15. 1140 ;
  16. 1150 open    = $ffc0 ; file oeffnen
  17. 1160 setnam  = $ffbd ; filenamen setzen
  18. 1170 setfls  = $ffba ; fileparameter
  19. 1180 print   = $ffd2 ; zeichen ausgeben
  20. 1190 clrch   = $ffcc ; bildsch.-ausgabe
  21. 1200 chkout  = $ffc9 ; ausgabegeraet
  22. 1210 close   = $ffc3 ; file schliessen
  23. 1220 stop    = $ffe1 ; stopvektor
  24. 1230 irqend  = $ea31 ; kernal-irq-rout.
  25. 1240 lovideo = $d018 ; videoram lo
  26. 1250 chrgen1 = $d000 ; 1.zeichensatz
  27. 1260 chrgen2 = $d800 ; 2.zeichensatz
  28. 1270 ;
  29. 1280 ; benoetigte speicherzellen
  30. 1290 ; *********************************
  31. 1300 ;
  32. 1310 cursor  = 204   ; cursor aus/an
  33. 1320 irqvek  = $0314 ; ieq-vektor
  34. 1330 taste   = $c5   ; letzte taste
  35. 1340 f1      = 4     ; f1-matrixnummer
  36. 1350 cr      = 13    ; carriage return
  37. 1360 esc     = 27    ; escape
  38. 1370 adresse = $f8   ; zeichenadresse
  39. 1380 zeichen = $d6   ; zeichencode
  40. 1390 viram   = $15   ; zeichenadresse
  41. 1400 zrom    = $f9   ; zeichengenerator
  42. 1410 maske   = $9d   ; bit-abfrage
  43. 1420 ;
  44. 1430 ; interrupt initialisieren
  45. 1440 ; *********************************
  46. 1450 ;
  47. 1460 sei             ; irq verhindern
  48. 1470 lda #<start     ; irq vektor auf
  49. 1480 ldy #>start     ; dieses programm
  50. 1490 sta irqvek
  51. 1500 sty irqvek+1
  52. 1510 cli             ; irq freigeben
  53. 1520 rts             ; init. ende
  54. 1530 ;
  55. 1540 ;
  56. 1550 ; f1 gedrueckt, dann start
  57. 1560 ; *********************************
  58. 1570 ;
  59. 1580 start lda taste ; tastenabfrage
  60. 1590 cmp #f1         ; taste = f1 "?"
  61. 1600 bne l1          ; nein, dann ende
  62. 1610 lda #00         ; tastendruck
  63. 1620 sta taste       ; loeschen
  64. 1630 jsr hdcopy      ; programmbeginn
  65. 1640 l1  jmp irqend  ; zum kernal-irq
  66. 1650 ;
  67. 1660 ;
  68. 1670 ; zeropage retten
  69. 1680 ; *********************************
  70. 1690 ;
  71. 1700 hdcopy ldx #$ff ; byte 255-0
  72. 1710 l2  lda 0,x     ; laden
  73. 1720 sta memory,x    ; und speichern
  74. 1730 dex             ; naechstes byte
  75. 1740 bne l2          ; x=0, dann ende
  76. 1750 lda #01
  77. 1760 sta cursor      ;ausschalten
  78. 1770 ;
  79. 1780 ;
  80. 1790 ; druckerfile oeffen und
  81. 1800 ; zeilenabstand initialisieren
  82. 1810 ; *********************************
  83. 1820 lda #126     ; filenummer
  84. 1830 ldx #4       ; geraeteadresse
  85. 1840 ldy #1       ; sekundaeradresse
  86. 1850 jsr setfls   ; parameter setzen
  87. 1860 lda #0       ; kein filenamen
  88. 1870 jsr setnam   ; namen setzen
  89. 1880 jsr open     ; file oeffnen
  90. 1890 ldx #126     ; alle
  91. 1900 jsr chkout   ; ausgaben auf #126
  92. 1910 ;
  93. 1920 ; drucker auf einzeiligen abstand
  94. 1930 lda #esc     ; esc-sequenz-beginn
  95. 1940 jsr print    ; chr$(27) an drucker
  96. 1950 lda #"3"     ; "3"+chr$(24)
  97. 1960 jsr print
  98. 1970 lda #24
  99. 1980 jsr print    ; an drucker
  100. 1990 ;
  101. 2000 ; zeiger auf videoram
  102. 2010 ; ********************************
  103. 2020 ;
  104. 2030 videoram lda #$00
  105. 2040 ldy $288     ; videoramadressen
  106. 2050 sta viram    ; uebergeben
  107. 2060 sty viram+1
  108. 2070 ;
  109. 2080 ;
  110. 2090 ; zeichen vom screen holen,
  111. 2100 ; charaktergenerator lesen und
  112. 2110 ; zeichenmatrix zusammensetzen
  113. 2120 ; *********************************
  114. 2130 ;
  115. 2140 ldx #25      ; zeilenanzahl
  116. 2150 ;
  117. 2160 ; ausgabeschleife
  118. 2170 ; *********************************
  119. 2180 ;
  120. 2190 ausg jsr stop; stoptaste abfragen
  121. 2200 beq hdende   ; gedrueckt,dann ende
  122. 2210 ;
  123. 2220 ; ist zeile leer "?"
  124. 2230 ; *********************************
  125. 2240 ;
  126. 2250 ldy #39
  127. 2260 l9 lda (viram),y
  128. 2270 cmp #32
  129. 2280 bne l10
  130. 2290 dey
  131. 2300 bpl l9
  132. 2310 lda #cr
  133. 2320 jsr print
  134. 2330 jmp l11
  135. 2340 ;
  136. 2350 ; chrgen-adresse holen
  137. 2360 ; gross/klein oder gross/grafic
  138. 2370 ; *********************************
  139. 2380 ;
  140. 2390 l10 jsr chrtest ;schriftmodus-test
  141. 2400 ;
  142. 2410 ; druckzeile vorbereiten
  143. 2420 ; *********************************
  144. 2430 ;
  145. 2440 ldy #7            ; 6 codes
  146. 2450 l3  lda grafik,y  ; esc-sequenz
  147. 2460 jsr print         ; senden
  148. 2470 dey               ; naechster code
  149. 2480 bne l3            ; fertig "?"
  150. 2490 ;
  151. 2500 ; neue zeile beginnen
  152. 2510 ; *********************************
  153. 2520 ;
  154. 2530 ldy #0  ; zeile von neuem
  155. 2540 ;
  156. 2550 ; zeile abarbeiten, 2. schleife
  157. 2560 ; zeichen holen und im up bearbei.
  158. 2570 ; *********************************
  159. 2580 ; zeichen v. bildsch. holen
  160. 2590 l5  lda #0   ; zeichen von
  161. 2600 lda (viram),y; bildschirm holen
  162. 2610 sta zeichen  ; merken
  163. 2620 jsr auswert  ; bearbeiten
  164. 2630 iny          ; spalte erhoehen
  165. 2640 cpy #40      ; zeilenende "?"
  166. 2650 bne l5       ; bildsch.-ende "?"
  167. 2660 ;
  168. 2670 ; neue zeile vorbereiten
  169. 2680 ; *********************************
  170. 2690 ;
  171. 2700 l11 lda #40; 40 spalten
  172. 2710 clc    ; zeiger auf naechste zeile
  173. 2720 adc viram    ; neue zeile setzen
  174. 2730 sta viram
  175. 2740 bcc l12
  176. 2750 inc viram + 1
  177. 2760 l12 dex       ; zeilen erniedrigen
  178. 2770 bne ausg      ; screen zu ende "?"
  179. 2780 hdende lda #13; zum ende cr an
  180. 2790 jsr print     ; drucker senden
  181. 2800 ;
  182. 2810 ; fertig, dann file schliessen
  183. 2820 ; *********************************
  184. 2830 ;
  185. 2840 lda #126 ; filenummer
  186. 2850 jsr close; druckerdatei schliessen
  187. 2860 jsr clrch; cmd auf screen
  188. 2870 ;
  189. 2880 ;
  190. 2890 ; zeropage wiederherstellen
  191. 2900 ; *********************************
  192. 2910 ;
  193. 2920 ldx #$ff        ; zeropage
  194. 2930 l4  lda memory,x; wieder
  195. 2940 sta $00,x       ; herstellen
  196. 2950 dex
  197. 2960 bne l4
  198. 2970 ;
  199. 2980 rts             ; hardcopy ende
  200. 2990 ;
  201. 3000 ;
  202. 3010 ;
  203. 3020 ;
  204. 3030 ; charaktergenerator lesen
  205. 3040 ; *********************************
  206. 3050 ;
  207. 3060 auswert pha;  register retten
  208. 3070 txa
  209. 3080 pha
  210. 3090 tya
  211. 3100 pha
  212. 3110 ;
  213. 3120 ; adresse im charakterram berech.
  214. 3130 ; = zeichencode * 8
  215. 3140 ; *********************************
  216. 3150 ;
  217. 3160 lda zeichen; zeichencode laden
  218. 3170 sta adresse; adresse im zeichen-
  219. 3180 lda #0     ; rom feststellen
  220. 3190 sta adresse+1
  221. 3200 asl adresse; zeichencode
  222. 3210 rol adresse+1
  223. 3220 asl adresse
  224. 3230 rol adresse+1
  225. 3240 asl adresse
  226. 3250 rol adresse+1 ; mal 8
  227. 3260 lda adresse+1
  228. 3270 clc             ; und
  229. 3280 adc zrom+1    ; romadresse
  230. 3290 sta adresse+1 ; addieren
  231. 3300 ;
  232. 3310 ; charaktergen. lesen und zeichen-
  233. 3320 ; matrix fuer drucker aufbereiten
  234. 3330 ; *********************************
  235. 3340 ;
  236. 3350 ldx $01        ; speicherselekt
  237. 3360 lda #%10000000 ; bit-maske
  238. 3370 sta maske      ; speichern
  239. 3380 l14 lda #$00   ; code
  240. 3390 pha            ; loeschen
  241. 3400 ldy #7         ; 8 bytes abfragen
  242. 3410 ;
  243. 3420 ; chr-ram einschalten & byte lesen
  244. 3430 ; *********************************
  245. 3440 ;
  246. 3450 l15 sei     ; irq sperren
  247. 3460 lda #01:and #251        ; zeichen-rom
  248. 3470 sta $01     ; selektieren
  249. 3480 lda (adresse),y ; code holen
  250. 3490 and maske       ; maskenvergleich
  251. 3500 ;
  252. 3510 ; chr-rom wieder einschalten
  253. 3520 ; *********************************
  254. 3530 ;
  255. 3540 stx $01     ; norm speicherkonf.
  256. 3550 cli         ; wieder herstellen
  257. 3560 beq l6
  258. 3570 pla         ; code laden und
  259. 3580 clc         ; code laden und
  260. 3590 adc nwert,y ; bitwert zu code add.
  261. 3600 pha         ; und merken
  262. 3610 l6  dey     ; naechstes byte
  263. 3620 bpl l15     ; 8 bits gelesen "?"
  264. 3630 pla         ; ja, dann
  265. 3640 jsr print   ; an drucker
  266. 3650 lsr maske   ; maske erhoehen
  267. 3660 bcc l14     ; naechste punktzeile
  268. 3670 ;
  269. 3680 ; register wieder holen
  270. 3690 ; *********************************
  271. 3700 ;
  272. 3710 pla ; register wieder holen
  273. 3720 tay
  274. 3730 pla
  275. 3740 tax
  276. 3750 pla
  277. 3760 rts
  278. 3770 ;
  279. 3780 ; anfangsadresse des charakterrams
  280. 3790 ; feststellen und merken
  281. 3800 ; *********************************
  282. 3810 ;
  283. 3820 chrtest lda #$00
  284. 3830 sta zrom     ; zeichensatzadr. lo
  285. 3840 lda lovideo  ; zeichensatz-page
  286. 3850 and #%00000010
  287. 3860 bne l16
  288. 3870 lda #>chrgen1         ;$d000
  289. 3880 sta zrom + 1
  290. 3890 .byt $2c
  291. 3900 l16 lda #>chrgen2     ;$d800
  292. 3910 sta zrom + 1
  293. 3920 rts           ; zum hauptprogramm
  294. 3930 ;
  295. 3940 ;
  296. 3950 ;
  297. 3960 ;tabelle 320 bitmusterdaten
  298. 3970 grafik .byt 0,$01,$40
  299. 3980 ;
  300. 3990 ;epson auf einzelnadelansteuerung
  301. 4000 .byt 4,"*",esc,cr,24
  302. 4010 ;
  303. 4020 ;tabelle fuer bit-wertigkeiten
  304. 4030 nwert .byt 128,64,32,16,8,4,2,1
  305. 4040 ;
  306. 4050 ;zeichensatz startadressen
  307. 4060 memory .byt 0
  308. 4070 .end
  309. 4080 sys49152
  310.