Vorlage:Zitat

Aus Atari Wiki-NEU
Zur Navigation springenZur Suche springen

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: