Vorlage:Zitat
1: 'Programm erzeugt EPROM-Dateien 2: '(c)1992 by MAXON-Computer 3: 'Autor: Michael Stelnle 4: ' 5: DEFWRD "a-Z" 6: DIM eproml(32767) 7: eprom$= "NEWVIDEO.BIN" 8: DEPMOUSE 2 9: ' ein EPROM für SM124 enthalt generell 501 Pixel- 10: ' Zeilen der Original-Zeilenlänge. Die Brutto- ll: ' Zeilenlänge beträgt bei 8 MHz 896 Pixel, bei 12: ' 10 MHz 1120 Pixel und bei 12 MHz 1344 Pixel 13: ' make_eprom(96,640,64,96,66,400,34,1) 14: ' ! 640x400 bei 8 MHz 15: make_eprom(256,640,96,128,66,400,33,2) 16: ' ! 640x400 bei 10 MHz 17: ' make_eprom(384,640,160,160, 66,400,33,2) 18: ' ! 640x400 bei 12 MHz 19: write_eprom ! untere EPROM-Hälfte 20: ' 21: ' make_eprom(64,704,32,96,66,400,34,l) 22: ' ! 704x400 bei 8 MHz 23: ' make eprom(64,704,32,96,18,480,2,1) 24: ' ! 704x480 bei 8 MHz 25: make_eprom(128,800,64,128,66,400,33,2) 26: ' ! 800x400 bei 10 MHz 27: ' make_eprom(128,800,64,128,18,480,l,2) 28: ' I 800x480 bei 10 MHz 29: ' make_eprom(160,960,64,160,66,400, 33,2) 30: ' ! 960x400 bei 12 MHz 31: ' make_eprom(160,960,64,160,18,480,l,2) 32: ' ! 960x480 bei 12 MHz 33: append eprom ! obere EPROM-Hälfte 34: DEFMOÜSE 0 35: EDIT 36: ' 37: PROCEDURE write_eprom ! EPROM-Inhalt unter 38: OPEN "O",#1,epromS ! 'epromS' ins aktu- 39: BPÜT #l,V:eproml(0),32768 I eile Verzeichnis 40: CLOSE #1 ! schreiben 41: RETURN 42: ' 43: PROCEDURE append_eprom ! EPROM-Inhalt an 44: OPEN "U",#1,eprom$ ! bestehende Datei 45: SEEK #1,32768 I 'epromS' anhängen 46: BPUT #l,V:eproml(0),32768 47: CLOSE #1 48: RETURN 49: ' 50: PROCEDURE make_eprom(abh,hs,bish.h,abv,vs.bisv,v) 51: ' wegen EPROM'Auflösung von 32pixel/Schritt 52: ' folgende Umrechnungen: 53: abh=abh DIV 32 1 unsichtbarer Teil jeder 54: ■ ! Zeile nach HSYNC in Pixel 55: hs=hs DIV 32 I sichtbarer Teil jeder Zeile 56: ' ! in Pixel 57: bish=bish DIV 32 ! unsichtbarer Teil jeder 58: ' ! Zeile bis HSYNC in Pixel 59: h=h DIV 32 ! Dauer von HSYNC in Pixel 60: ' abv ! unsichtbarer Teil des Bildes 61: ' ! nach VSYNC in Zeilen 62: ' vs ! sichtbarer Teil des Bildes 63: ' ! in Zeilen 64: ' bisv ! unsichtbarer Teil des Bildes 65: ' '. bis VSYNC in Zeilen 66: ' v ! Dauer von VSYNC in Zeilen 67: 68: LOCAL biiahoene,zeilenbreite,i,j,k,filler I 69: LOCAL de,blnk,vsyn,hsyn 70: 71: hsyn=0 ! Bit-Nummern im EPROM 72: vsyn=l 73: de=2 74: blnk=3 ! low-aktiv! 75: fillerl=BSET(filler I,hsyn) 76: ! HSYNC normal inaktiv high 77: filler I=BSET(filler I,vsyn) 78: I VSYNC ebenfalls 79: ARRAYFILL epromI(),fillerl 80: ' EPROM-Inhalt vorbesetzen 81: 82: zeilenbreite=abh+hs+bish+h 83: bildhoehe=abv+vs+bisv-Kv 84: 85: FOR i=0 TO bildhoehe-1 86: k=i*zeilenbreite 87: FOR j=0 TO zeilenbreite-1 88: IF j>=abh AND j<abln-hs 89: ' horizontal sichtbar 90: IF i>=abv AND i<abv+vs 91: ' vertikal sichtbar 92: epromI(k+j)=BSET(eproml(k»j),de) 93: eproml<k+j)=BSET(eproml(k+j),blnk) 94: 'DE setzen und BLNK inaktiv machen 95: ENDIF 96: ELSE IF j>=zeilenbreite-h 97: ' während HSYNC-Zeit HSYNC setzen 98: eproml(ktj)=BCLR(eproml(k+j),hsyn> 99: ENDIF 100: NEXT j 101: IF i>=bildhoehe-v 102: ' während VSYNC-Zeit 103: FOR j=0 TO zeilenbreite-1 104: eproml(ktj)«BCLR(eprom|(k+j),vsyn) 105: ' die ganze Zeile lang VSYNC setzen 106: NEXT j 107: ENDIF 108: NEXT i 109: k=k+j 110: ' erstes EPROM-Byte 'hinter' dem Bild 111: • Rest des EPROMs mit S?F füllen: 112: WHILE k<32767 113: eproml(k)=SHFP 114: INC k 115: WEND 116: RETURN
1: * Treibersoftware für Nutzung des EPROM-
2: * Sequencers zur Bildschirmvergrößerung. Die dort
3: * programmierte Auflösung muß bei den Labels am
4: * Anfang des Programms eingetragen werden:
5: * (c)1992 by MAXON-Computer
6: * Autor: Michael Steinle 7:
8: anf ang: bra. w start
9: hor_res: dc.w 768
10: ver_res: dc.w 544
11:
12: screenlen: ds.l 1
13: physbase: ds.1 1
14: back: ds.l 1
15: intout: ds.1 1
16:
17: dc.b "XBRA"
18: dc.b "NEWV"
19: oldtrap2: dc.l 0
20: mytrap2: cmp.w #$73,dO ,-VDI?
21: bne.s normtrap2 /nein, also
22: * AES; -> Originalroutine
23: move.l dl.aO ,-Zeiger auf
24: * Parameterblock in aO
25: move.l 12(aO),intout ;Zeiger auf
26: * Intout-Feld retten
27: move.l (aOl.aO /Zeiger auf
28: • Control-Feld holen
29: cmp.w #1,(aO) /Funktions-
30: « nummer 1 (OPN_WK)?
31: bne.s normtrap2 ;nein, also
32: « -> Originalroutine
33: move.l 2(sp),back ;sonst Rück
34: * Sprungadresse retten
35: move.l #patch,2(sp) ;und auf
36: * dem Stack herummanipulieren
37: norratrap2: move.l oldtrap2,-(sp) /Original-
38: * routine aufrufen
39: rts
40:
41: * Beim Rücksprung von V_OPNWK wird der folgende
42: * Programmteil durchlaufen: 43:
44: patch: dCW $A000 ,-LINE-A-
45: * Initialisierung aufrufen
46: move.l intout (pc) ,al ,-Zeiger auf
47: * Intout-Tabelle zurück
48:
49: move.w ver_res(pc) ,d0 /vertikale
50: * Auflösung holen
51: move.w d0,-4(a0) ,-vertikale
52: * Auflösung in LINE-A einpatchen
53: subq.w #l,d0
54: move.w d0,-$2B2(a0) ,-auch in
55: * Workstation-Tabelle eintragen
56: move.w d0,2(al) ,-auch in
57: • INTOUT patchen
58:
59: move.w -$2E(aO),dl ,-Zeichen-
60: * höhe holen
61: divu dl.dO /vertikale
62: * Auflösung durch Zeichenhöhe
63: move.w dO,-$2A(aO> /als Zei-
64: * lenzahl-1 (VT 52) eintragen
65:
66: move.w hor_res(pc),d0 /horizon-
67: * tale Auflösung holen
68: move.w d0,-$C(a0) ,-in LINE-A
69: * einpatchen
70: subq.w #l,d0
71: move.w d0,-$2B4(a0) /auch in
72: • die Workstation-Tabelle
73: move.w d0,(al) /und in
74: » INTOUT
75: addq.w #l,d0 /wird
76: * wieder echte Pixelzahl gebraucht:
77:
78: lsr.w #3,d0 ,-horizon-
79: * tale Auflösung durch 8
80: subq.w #l,d0
81: move.w d0,-$2C(a0) /als Spal-
82: * tenzahl-1 (VT 52) eintragen
83: addq.w #l,d0 ,-echte
84: * Spaltenzahl
85: move.w d0,-2(a0) ,-als Bild-
86: * breite in Bytes
87: move.w d0,2(a0) /gleich
88: * nochmal (!!) einpatchen
89: mulu dl.dO ,-x Zeichen-
90: * höhe = Bytes/Charzeile
91: move.w d0,-$28(a0) /in LINE-A
92: * eintragen
93:
94: * vergrößerten Bildschirm löschen von den Mel-
95: * düngen der vorangegangenen Autoordnerprogramme 96:
97: move.l physbase(pc) ,a0/Bildspei-
98: * cheranfang holen
99: move.l screenlen,dO /soviele
100: * Langworte löschen
101: subq.l #l,d0 /wegen DBBA
102: erase: clr.l la0)+
103: dbra dO, erase
104:
105: * ab hier wird auf die höhere Auflösung umge-
106: * schaltet mit Hilfe von Bit Nr. 7 des Soundchips
107: * (bisher unbenutzt, beim Booten auf 0) 108:
109: move.w sr,-(sp) /Status-
110: * register sichern
111: or.w #$700,sr /Interrupts
112: * abschalten
113: lea $FF8800,a0 /Zeiger auf
114: * Soundchip
115: move.b #$E,(aO) /Port A
116: move.b (a0),d0 /auslesen
117: or.b #$80,dO /setze Bit7
118:
119: * die folgende Routine ist aus TOS 1.04 abge-
120: * schrieben. Ohne Synchronisierung auf VSYNC
121: * geht das Umschalten des Bildschirms schief! 122:
123: movem.l d0-d4/a0-al,-(sp)
124: lea $FFFFFA21,a0 /TIMER B
125: lea $FFFFFAlB,al
126: move.b #$10,(al)
127: moveq #l,d4
128: move.b #$0,(al)
129: move.b #$F0,(aO)
130: move.b #$8,(al)
131: waitl: move.b (a0),d0
132: cmp.b d4,d0
13 3: bne.s waitl
134: wait2: move.b (a0),d4
135: move.w #600,d3 ,-falls Stö-
136: * rungen auftreten, mit diesem Wert spielen!
137: wait3: omp-b (a0),d4
138: bne.s wait2
139: dbra d3,wait3
140: move.b #$10,(al)
141: movem.l (sp)+,dO-d4/aO-al
142:
143: move.b d0,2(a0) .-Port A mit
144: - gesetztem Bit 7 zurückschreiben
145: move.w (sp)+,sr ;Statusre-
146: * gister zurückholen
147: move.l back(pc),-(sp) ;zurück-
148: * springen
149: rts
150:
151: * Programminitialisierungsteil:
152:
153: Start: move.w #-l,-(sp)
154: move.w #11,-(sp) ;Status der
155: * Umschalttasten holen
156: trap #13
157: addq.l #4,sp
158: andi.l #4,d0 ,-Control
159: « gedrückt?
160: bne abflug ;ja, daher
161: * nix instalieren
162:
163: move.l 4(sp),a6 ;Basepage-
164: * adresse
165: move.l #$100,d5 .-Länge der
166: * Basepage
167: add.l $C(a6),d5 ,-+ Länge
168: * des Codes
169: add.l $14(a6),d5 ;+ Länge
170: * des Konstantenbereichs
171: add.l $lc(a6),d5 ;+ Länge
172: * des BSS
173: lea 3tack(pc),a7 /eigener
174: « Stack bitte
175:
176: moveq #0,d7
177: move.w hor_res(po),d7 ;horizon-
178: * tale Auflösung holen
179: lsr.w #5,d7 ;und durch
180: « 32 (Longs!) teilen
181: muls ver_res(pc),d7 ;mal verti-
182: * kale Auflösung nehmen
183: move.l d7,screenlen ;für Lösch-
184: * routine abspeichern
185:
186: move.l d5,-(sp) ;NEWSIZE
187: move.l a6,-(sp) ;BLOCKADR
188: move.w #0,-(sp) ;Nullparam.
189: move.w #74,-(sp) ;MSHRINK
190: trap #1 ;nicht be-
191: * nötigten Speicher freigeben
192: lea 12(sp),sp
193:
194: aal.l #2,d7 ;d7 * 4 =
195: * Bildschirmspeicher in Bytes
196: sub.l #32000,d7 ,-das ist
197: * der zusätzliche Bedarf
198: asr.l #8,d7 ,-zusätz-
199: * liehen Bedarf in Vielfache von 256
200: asl.l #8,d7 ;umrechnen
201: * wegen 256-Byte-Grenzen des Videoteils
202:
203: move.l #-l,-(sp) ;wieviel
204: * Speicher ist da?
205: move.w #72,-(sp) ;MALLOC()
206: trap #1
207: addq.l #6,sp
208: sub.l d7,d0 ;Bildspei-
209: * cherbedarf abziehen
210: bmi errorl ;zuwenig
211: * Speicher vorhanden (????)
212:
213: move.l d0,-(sp) ,-alles
214: * übrige reservieren
215: move.w #72,-(sp) ;MALLOC<)
216: trap #1
217: addq.l #6,sp
218: move.l d0,d5 ,-Anfangs-
219: * adresse aufheben
220:
221: move.l d7,-(sp) ,-Bildspei-
222: * cher-Zusatzbedarf reservieren
223: move.w #72,-(sp) ;MALLOC()
224: trap #1
225: addq.l #6,sp
226: move.l d0,d4 ;für Plau-
227: * sibilitätsprüfung aufheben!
228:
229: move.l d5,-(sp) .-Adresse
230: * erster Block
231: move.w #73,-(sp) ;diesen
232: * Block wieder freigeben
233: trap #1
234: addq.l #6,sp
235:
236: move.w #2,-(sp) .-noch aktu-
237: * eile PHYSBASE ermitteln
238: trap #14
239: addq.l #2,sp
240:
241: sub.l d7,d0 ,-Zusatz-
242: * Speicherbedarf abziehen
243: cmp.l d0,d4 .-sollte mit
244: * reservierter Blockgrenze
245: bne error ,-überein-
246:* st immen!
247:
248: move.l dO.physbase ;für später
249: * zum löschen aufheben!
250: move.w #-l,-(sp) ;Bild-
251: * schirmspeicher vorverlegen
252: move.l d0,-(sp)
253: move.l d0,-(sp)
254: move.w #5,-(Sp) ,-SETSCREEN
255: trap #14
256: lea 12(sp),sp
257:
258: pea messagel (pc)
259: move.w #9.-(sp)
260: trap #1
261: addq.l #6,sp
262:
263: pea install (pc) ,-Vektor-
264: * biegen im Supervisormodus
265: move.w #38,-(sp)
266: trap #14
267: addq.l #6,sp
268:
269: clr.w -(sp) ,-OK zurück
270: pea 256+start-anfang
271: move.w #$31,-(sp)
272: trap #1 ;PTERMRES
273:
274: abflug: pea message2(pc)
275: move.w #9,-(sp)
276: trap #1
277: addq.l #6,sp
278: clr.w -(sp) ;sang- und
279: * klangloses Programmende
280: trap #1
281:
282: error: move.l d4,-(sp) ,*Adresse
283: * zweiter Block
284: move.w #73,-(sp) ,-diesen
285: * Block wieder freigeben
286: trap #1
287: addq.l #6,sp
288: errorl: pea message3(pc)
289: move.w #9,-(sp)
290: trap #1
291: addq.l #6,sp
292: clr.w -(sp) ,-sang- und
293: * klangloses Programmende
294: trap #1
295:
296: install: move.l $88,oldtrap2
297: move.l #mytrap2,$88
298: rts
299:
300: SECTION DATA
301:
302: messagel: dc.b 27,"E",13,10," Bildschirm"
303: dc.b "Vergrößerung wird akti"
304: dc.b "viert!",13,10,10,0
305: message2: dc.b 13,10," Keine Bildschirm"
306: dc.b "Vergrößerung erwünscht?!"
307: dc.b 13,10,10,0
308: message3: dc.b 13,10," Bildschirmver"
309: dc.b "größerung konnte nicht"
310: dc.b "in-",13,10," stalliert"
311: dc.b " werden wegen Speicher"
312: dc.b "Problemen",13,10,10,0
313:
314: SECTION BSS
315:
316: ok: ds.w 1
317: ds.l 512
318: stack: ds.l 1
319: