Hardcopy für Typenraddrucker (TA-GABI 9009 mit IFD 1)

Dieses Programm ermöglicht es endlich auch den vielen Besitzern des TA Typenraddruckers Gabriele 9009 Hardcopys zu drucken! Es funktioniert mit der Interface-Box IFD 1.

Das Programm wurde mit dem Hisoft Assembler geschrieben, kann aber im Prinzip an jeden anderen, insbesondere an unseren Public-Domain Assembler, angepasst werden, da keine speziellen Bibliotheks-Funktionen verwendet werden. Das fertige Programm wird als COPY.TOS (oder COPY. PRG falls es im Auto Ordner gestartet werden soll) abgespeichert. Ist die Routine im Speicher, können Sie über Alternate + Help die Hardcopy starten. Ein erneutes Drücken von Alt/ Help bricht die Hardcopy ab. Hier müssen Sie allerdings warten, bis der Puffer Ihrer Interface-Box leer ist.

Bild 1: Hardcopy des Desktops

Zur Funktion des Programms

Wird das Programm aus dem Desktop oder dem Auto-Ordner gestartet, überprüft es erst, ob es sich schon im Speicher befindet. In diesem Fall zeigt der 7. Eintrag der VBL-queue auf die Startadresse. Wir müssen also nur eine festgelegte Adresse innerhalb unseres Programms abfragen, und erfahren so, ob das Programm schon Speicherresident geladen ist. Die Aufgabe dieser sogenannten Magic-number übernimmt hier das Langwort ab Label progr + 2. Ist das Programm schon geladen worden, verabschiedet sich das Programm mit entsprechender Meldung. Starten Sie es aber zum ersten Mal und bestätigen die Frage „resident halten“ mit „J“ oder „j“, wird die eigentliche Copy-Routine ab Label progr mit Hilfe der Gemdos-Funktion $31 resident gehalten und die Startadresse in die VBL-queue eingetragen. An die Stelle „progr“ wird ab jetzt gesprungen, wenn Sie Alternate + Help bestätigen.

Wollen Sie nun eine Hardcopy machen, wird als erstes überprüft, ob Sie einen Farbmonitor angeschlossen haben. Da mit dem Drucker im Farbmodus keine brauchbaren Graustufen (über die Anschlagstärke) möglich sind, wird in diesem Falle einfach abgebrochen.

Wenn Sie in der hohen Auflösung arbeiten und die IFD1 „online“ ist, steht der Hardcopy nichts mehr im Wege.

Die Routine „initco“ stellt den Grafic-Modus der Schreibmaschine ein. Dies geschieht mit der Funktion ESC „3“, die in Ihrer IFD 1 Bedienungsanleitung auf Seite 46 näher beschrieben ist.

Nun werden ymax Zeilen ab Zeile ymin gedruckt. Das Unterprogramm „Zeile“ übernimmt die Abfrage, ob einzelne Bildpunkte gesetzt sind oder nicht. Entsprechend wird ein „.“ oder ein Space gedruckt. Die Bildschirmabfrage geschieht mit Hilfe der Line A Routine A002. Am Ende der Zeile wird ein LF und ein CR ausgegeben, und der Drucker erneut in den Grafic-Modus gebracht (CR löscht diesen!). In jeder Zeile werden xmax Punkte ab Punkt xmin gedruckt.

Sie können diese Routine in ein von Ihnen erstelltes GEM-Programm einbauen, um den zu druckenden Bereich z. B. mit dem GEM-Gummi-faden ausschneiden zu können. Sie brauchen hierzu lediglich den Teil ab „docopy“, in welchem Sie die Zeile „move.w -1, $4ee“ entfernen, als Unterprogramm in Ihr eigenes Programm einzubauen. Die Koordinaten übergeben Sie in xmin bis ymax.

Nur für Geduldige

Nicht verleugnen wollen wir die Zeit, die eine Hardcopy auf der Gabi 9009 benötigt. Bild 1 quälte die Maschine ca. zwei Stunden.

Bild 2 hingegen gab sich mit 70 Minuten zufrieden. Es ist bei einer Typenradmaschine auch nicht anders zu erwarten, denn jedes Pixel bedarf eines Anschlages. Also: je weniger Punkte desto schneller.

Noch einen Tip zum Schluß: Verwenden Sie bitte normales Nylon-und kein Carbon-Farbband für Hardcopys. Da Sie eine Hardcopy in DIN A4 Format erhalten, empfehle ich DIN A3 Zeichenblock Papier zu verwenden.

Uli Herrmann

Bild 2: Hardcopy eines Platinenlayouts

* Programmlänge berechnen
init    move.l  4(sp),a0        * Basepage
        move.l  #$100,d6        * Basepage-length
        add.l   12(a0),d6       * + Programm-length


* Test ob bereits resident
check   clr.l (sp)      * in supervisor-mode
        move.w  #32,-(sp)
        trap    #1
        addq.1  #6,sp
        move.l  d0,d5       * alter ssp
        move. 1 $456,a5     * adress of vblqueue
        move.l  28(a5),a0   * adress of copy routine
        cmp.1   #$03121964,2(a0)    * test  ob schon resident
        beq.s   alres       * ist schon resident
        lea     amsg,a0     * meldung --> a0
        bsr.s   print       * print "resident halten?"
        bsr.s   input       * auf j oder n warten
        bne.s   batg        * wenn nein, dann terminate
        move.l  #progr,28(a5)   * copy vector an stelle 7 in vblqueue
        bsr.s   userm       * in usermode zurck
        clr.w   -(sp)
        move.l  d6,-(sp)    * program-length
        move.w  #$31,-(sp)  * keep process
        trap    #1          * gemdos does it

alres   lea     rmsg,a0     * text "bereits resident"
        bsr.s   print
        bsr.s   input       * warte auf taste
batg    bsr.s   userm
        clr.w   -(sp)       * terminate
        trap    #1

input   move.w  #1,-(sp)
        trap    #1
        addq .1 #2,sp
        ori.w   #$20,d0     * klein machen
        cmpi.b  #'j',d0     * ist es 'J'
        bne.s   no
yes     clr.w   d0          * return with zero
no      rts

print   move.l  a0,-(sp)    * adress of string
        move.w  #9,-(sp)
        trap    #1
        addq.l  #6,sp
        rts
userm   move.l  d5,-(sp)    * old Supervisor stack
        move.w  #32,-(sp)   * in user-mode zurck
        trap    #1
        addq.l  #6,sp
        rts

* folgende routine wird bei ALT/HELP aufgerufen

progr   bra.s   copy
        dc.1    $03121964   * Kennung der routine
copy    tst.w   $4ee        * test dmpflg
        beq.s   docopy      * ist 0 wenn ALT/HELP gedr. wurde
        rts                 * schade

docopy  movem.l d0-d7/a0-a6,-(sp)
        move.l  a7,a4       * sp for error return
        dc.w    $a000       * 1 ine -A Variables
        move.w  0(a0),d0    * v_planes
        lsr.w   #1,d0       * high_res mode (eine Möglichkeit)
        bcc.s   donot       * no highres mode - no copy
        move.l  12(a0),a0   * x/y-Koordinaten
        movea.l a0,a6
        bsr.s   initco      * printnr in grafic mode
        move.w  ymin,ycor   * minimum y position
        move.w  ymax,d3     * maximum y position
loop3   bsr.s   zeile       * plot 1 line
        bsr.s   nxtlne
        add.w   #1,ycor     * next line
        tst.w   $4ee        * ALT/HELP
        bne.s   donot       * Ende
        dbf     d3,loop3    * bis alle Zeilen fertig
donot   move.w  #-1,$4ee    * Copy-Flag wieder vorbereiten
        movem.l (sp)+,d0-d7/a0-a6 
        rts

zeile   move.w  xmin,xcor   * minimum x position
        move.w  xmax,d4     * maximum x position
loop1   movea.l a6,a0       * adress of x/y line A
        move.w  xcor,0(a0)  * x coordinate
        move.w  ycor,2(a0)  * y coordinate
        dc.w    $a002       * Punkt testen
        tst.w   d0          * gesetzt?
        beq     nodot       * nein
        bsr.s   dot         * ja
nodot   bsr     space       * immer im Grafic mode
        add.w   #1,xcor     * next position
        dbf     d4,loop1    * und so weiter bis Zeile fertig
        rts

initco  move.l  #inita,a5 
loop2   cmp.w   #$ff,(a5) 
        beq.s   goback
        move.w  (a5)+,d0
        bsr.s   prtout
        bra.s   loop2
goback  rts
nxtlne  move.l  #lntab,a5 
        bra.s   loop2
dot     move.w  #".",d0
        bra.s   prtout
space   move.w  #" ",d0 
prtout  move.w d0,-(sp) 
        move.w  #0,-(sp)
        move.w  #3,-(sp)
        trap    #13
        addq.1  #6,sp
        tst.w   d0          * alles klar?
        bne.s   prtok       * ja
        move.1  a4,a7
        bra     donot       * lieber abbrechen
prtok   rts

        even
lntab   dc.w    10,13
inita   dc.w    27,"3",$ff
xeor    ds.w    1
ycor    ds.w    1
amsg    dc.b    $1b,'E','COPY geladen, Resident halten (J/N) ?',0
        even
rmsg    dc.b    $1b,'E','COPY bereits resident !!! ',0
        even
xmin    dc.w    0
xmax    dc.w    639
ymin    dc.w    0
ymax    dc.w    399
end

1   'OMIKRON-Basic Lader zu Hardcopyroutine Gabi 9009
2   Filename$="GABI9009.TOS"
3   OPEN "O",1,FilenameS
4   READ Wert
5   REPEAT
6   PRINT #1, CHR$(Wert);
7   Summe=Summe+Wert
8   READ Wert
9   UNTIL Wert=-1
10  READ Pruefsumme
11  IF Pruefsumme<>Summe THEN
12  PRINT "Fehler In Datas"
13  ENDIF
14  CLOSE(1)
100 DATA 96,26,0,0,1,196,0,0,0,0
101 DATA 0,0,0,0,0,0,0,0,0,0
102 DATA 0,0,0,0,0,0,0,0,32,111
103 DATA 0,4,44,60,0,0,1,0,220,168
104 DATA 0,12,66,167,63,60,0,32,78,65
105 DATA 92,143,42,0,42,121,0,0,4,86
106 DATA 32,109,0,28,12,168,3,18,25,100
107 DATA 0,2,103,32,65,249,0,0,1,118
108 DATA 97,62,97,38,102,30,43,124,0,0
109 DATA 0,140,0,28,97,60,66,103,47,6
110 DATA 63,60,0,49,78,65,65,249,0,0
111 DATA 1,158,97,30,97,6,97,38,66,103
112 DATA 78,65,63,60,0,1,78,65,84,143
113 DATA 0,64,0,32,12,0,0,106,102,2
114 DATA 66,64,78,117,47,8,63,60,0,9
115 DATA 78,65,92,143,78,117,47,5,63,60
116 DATA 0,32,78,65,92,143,78,117,96,4
117 DATA 3,18,25,100,74,121,0,0,4,238
118 DATA 103,2,78,117,72,231,255,254,40,79
119 DATA 160,0,48,40,0,0,226,72,100,48
120 DATA 32,104,0,12,44,72,97,116,51,249
121 DATA 0,0,1,192,0,0,1,116,54,57
122 DATA 0,0,1,194,97,36,97,116,6,121
123 DATA 0,1,0,0,1,116,74,121,0,0
124 DATA 4,238,102,4,81,203,255,234,51,252
125 DATA 255,255,0,0,4,238,76,223,127,255
126 DATA 78,117,51,249,0,0,1,188,0,0
127 DATA 1,114,56,57,0,0,1,190,32,78
128 DATA 49,121,0,0,1,114,0,0,49,121
129 DATA 0,0,1,116,0,2,160,2,74,64
130 DATA 103,0,0,4,97,46,97,0,0,50
131 DATA 6,121,0,1,0,0,1,114,81,204
132 DATA 255,214,78,117,42,124,0,0,1,108
133 DATA 12,85,0,255,103,6,48,29,97,22
134 DATA 96,244,78,117,42,124,0,0,1,104
135 DATA 96,234,48,60,0,46,96,4,48,60
136 DATA 0,32,63,0,63,60,0,0,63,60
137 DATA 0,3,78,77,92,143,74,64,102,6
138 DATA 46,76,96,0,255,120,78,117,0,10
139 DATA 0,13,0,27,0,51,0,255,0,0
140 DATA 0,0,27,69,67,79,80,89,32,103
141 DATA 101,108,97,100,101,110,44,32,82,101
142 DATA 115,105,100,101,110,116,32,104,97,108
143 DATA 116,101,110,32,40,74,47,78,41,32
144 DATA 63,0,27,69,67,79,80,89,32,98
145 DATA 101,114,101,105,116,115,32,114,101,115
146 DATA 105,100,101,110,116,32,33,33,33,32
147 DATA 0,0,0,0,2,127,0,0,1,143
148 DATA 0,0,0,48,12,20,102,4,6,12
149 DATA 32,4,6,8,8,24,12,20,0
9998 DATA -1
9999 DATA 30238


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]