************************************************************************** IDE - PORT ************************************************************************** $FFF00000 [R/W] W FEDCBA9876543210 Datenregister $FFF00005 [R/-] B 76543210 Fehlerbits $FFF00005 [-/W] B 76543210 Parameterbergabe $FFF00009 [R/W] B 76543210 Sektorz„hler $FFF0000D [R/W] B 76543210 Startsektor $FFF00011 [R/W] B 76543210 Zylinder LSB $FFF00015 [R/W] B ______10 Zylinder MSB $FFF00019 [R/W] B 76543210 |||||||| ||||++++- Kopfnummer |||+----- 0= Master, 1= Slave 101 Sektorgr”že 512 Bytes, fest $FFF0001D [R/-] B 76543210 1. Statusregister |||||||| (Lesen l”scht den IRQ) |||||||+- ERR Fehler aufgetreten,Fehlerbits sind gltig ||||||+-- IDX Indeximpuls |||||+--- CORR mit ECC korrig. Daten bertragen ||||+---- DRQ fertig fr Datenverkehr |||+----- SKC Suchvorgang ausgefhrt ||+------ WFT Schreibfehler |+------- RDY Laufwerk ist fertig +-------- BSY Laufwerk fhrt Befehl aus $FFF0001D [-/W] B 76543210 Kommandoregister $FFF00039 [R/-] B 76543210 2. Statusregister wie 1.,kein L”schen des IRQ $FFF00039 [-/W] B _____21_ Reset, IRQ - Maske || |+-- 0: Interrupt nach Kommandoende | ausl”sen +--- 1 = Software Reset $FFF0003D [R/-] B _6543210 Aktive Adresse ||||||| ||||||+- 0 = Master aktiv |||||+-- 1 = Slave aktiv |++++--- Einerkomplement des eingeschalteten Kopfes +------- 0 = Laufwerk schreibt gerade ************************************************************************** Speicher-Verwaltung (im Falcon 030 ohne Bedeutung) ************************************************************************** $FFFF8001 [R/W] B ________ Speicher-Konfiguration ************************************************************************** Systemkonfiguration ************************************************************************** $FFFF8006 [R/W] B 76543210 Monitor-Type Hi |||||||| |||||||+- RAM Wait Status ||||||| 0 = 1 Wait (default) ||||||| 1 = 0 Wait ||||||+-- Video Bus Breite |||||| 0 = 16 Bit |||||| 1 = 32 Bit (default) ||||++--- ROM Wait Status |||| 00 = Reserviert |||| 01 = 2 Wait (default) |||| 10 = 1 Wait |||| 11 = 0 Wait ||++----- Gr”že Hauptspeicherkarte || 01 = 4 MB || 10 = 16 MB ++------- Monitor-Typ 00 Monochrom 01 RGB - Farbmonitor 10 VGA - Farbmonitor 11 Fernseher (ber Modulator) $FFFF8007 [R/W] B _65_32_0 System - Control || || | || || +- Prozessor-Takt || || 0 = 8 MHz || || 1 = 16 MHz || |+-- BLiTTER¿-Takt || | 0 = 8 MHz || | 1 = 16 MHz || +--- BLiTTER¿-Flag || 0 = BLiTTER¿ An || 1 = BLiTTER¿ Aus |+----- Umschaltung Bus-Mode | 0 = STE | 1 = Falcon +------ RESET-Verhalten 0 = immer Kaltstart 1 = normal, "memvalid" wird beachtet ************************************************************************** Video-System ************************************************************************** $FFFF8201 [R/W] B 76543210 Video-Basis-Addresse Hi [Schreibzugriff l”scht Video-Adresse Lo-Byte] $FFFF8203 [R/W] B 76543210 Video-Basis-Addresse Mi [Schreibzugriff l”scht Video-Adresse Lo-Byte] $FFFF8205 [R/W] B 76543210 Video-Address-Z„hler Hi $FFFF8207 [R/W] B 76543210 Video-Address-Z„hler Mi $FFFF8209 [R/W] B 76543210 Video-Address-Z„hler Lo $FFFF820A [R/W] B ______10 Syncmode ST || |+- 0: interner Videotakt | 1: externer Videotakt +-- Vertikal-Frequenz [Bit nicht „nderbar] 0: Monochrome-Monitor 1: Farbmonitor $FFFF820D [R/W] B 76543210 Video-Basis-Addresse Lo [Im Plane-Modus muž die Videoadresse an einer durch vier teilbaren Adresse liegen.] $FFFF820E [R/W] W _______876543210 Zeilenbreite This register is used to configure the worddistanz from the end of one to the beginning of the next graphic line. Example: $0050 adds 80 words (160 bytes) after every line to the Videoaddress. $FFFF8210 [R/W] W ______9876543210 LineWords (VWRAP) Dieses Register gibt die L„nge einer Grafikzeile in Words an. LineWords = Horizontale Aufl”sung / 16 * Bitplanes Beispiele: ST-Low : $0050 = 80 Worte 256 Farben/640x200: $0140 = 320 Worte True-Color/320x400: $0140 = 320 Worte Farben Bitplanes 2 1 4 2 16 4 256 8 65536 16 ************************************************************************** STE-Farbpalette (16 Farben) ************************************************************************** $FFFF8240 [R/W] W ____rRRRgGGGbBBB STE Farbregister 0 : : : : : : : $FFFF825E [R/W] W ____rRRRgGGGbBBB STE Farbregister 15 $FFFF8260 [R/W] B ______10 ST-Shift-Mode || 00- 320 x 200, 4 Bitplanes (16 Farben) 01- 640 x 200, 2 Bitplanes ( 4 Farben) 10- 640 x 400, 1 Bitplane ( 2 Farbe) 11- reserviert Ein Schreibzugriff auf das Shift-Mode ST Register aktiviert die STE- Palettenregister. VT_ST wird auf 8 gesetzt. Horizontal-Wrap wird mit 80 geladen und die Zeilenverdopplung wird eingeschaltet. $FFFF8265 [R/W] B ____3210 Horizontal-Scroll |||| ++++- 0-15: Linksverschiebung der Pixel [Žnderung von LineWords erforderlich] $FFFF8266 [R/W] W _____A98_6543210 Falcon-Shift (SPSHIFT) ||| ||||||| ||| |||++++- 0..15: Farbbankauswahl bei 256 Farben ||| ||+----- 0: 8 Bitplanes (256 Farben) aus ||| ||+----- 1: 8 Bitplanes (256 Farben) an ||| |+------ 0: interne Vertical Sync ||| | 1: externe Vertical Sync ||| +------- 0: interne Horizontal Sync ||| 1: externe Horizontal Sync ||+--------- 0: True-Color-Modus aus || 1: True-Color-Modus an |+---------- 0: Overlay-Modus aus | 1: Overlay-Modus an +----------- 0: 2-Farb-Modus aus 1: 2-Farb-Modus an Wenn die Bits A, 8 und 4 Null sind, ist der 16 Farbe-Falcon-Modus aktiv. Ein Schreibzugriff auf das Falcon Shift Re- gister aktiviert die Falcon-Palette und setzt den VT_ST auf 1. 4 Farben lassen sich nur im ST-Modus realisieren. $FFFF8280 [R/-] W ______9876543210 Zeilenfrequenzz„hler (HHC) $FFFF8282 [R/W] W ______9876543210 Zeilenfrequenzteiler (HHT) Zeilenfrequenz=Videotakt/VT/VT_ST/(Zeilenfrequenzteiler+2)/2 Videotakt: 25.175 MHz / 32 MHz, siehe Clock-Control VT : 1 / 2, siehe Clock-Control VT_ST : nach einem Schreibzugriff auf ST-Shift-Mode ist dieser Vorteiler 8, nach einem Schreibzugriff auf Falcon-Shift-Mode ist dieser Vorteiler 1. Es wird immer die doppelte Zeilenfrequenz programmiert (deswegen das "/2"!). Eine Zeile wird demzufolge in 2 Teile zerlegt: <-- 1/Zeilenfrequenz --> |-----------|-----------| 1 Zeile | | | +------- Zeile 2. Teil +------------------- Zeile 1. Teil $FFFF8284 [R/W] B ______9876543210 HBlankOn (HBB) Ab wann die Zeile dunkelgetastet wird (rechter Rand). $FFFF8286 [R/W] B ______9876543210 HBlankOff (HBE) Ab wann die Zeilendunkeltastung aufgehoben wird (linker Rand). |-----------|-----------| 1 Zeile -----xxxxxxxxxxxxxxx----- aufgetasteter Teil einer Zeile |---> |---> | | | +----------- HBlankOn +----------------------- HBlankOff Der HBlankOff-Z„hler wird am Anfang einer Zeile gestartet und schaltet dann das HBlank aus. Wenn HBlankOff gr”žer als Zeile/2 ist, wird die Zeile nie aufgetastet (kann man als Bildschirmschoner mižbrauchen). Der HBlankOn-Z„hler wird mit dem Beginn des 2. Teils der Zeile gestartet und schaltet das HBlank wieder ein. Nun zur Berechnung des HBlank-Timings: Grundlage ist natrlich der Videotakt (25.175 MHz oder 32 MHz). Dieser Takt wird entsprechend VT und VT_ST geteilt (s.o). Die folgenden Angaben beziehen sich auf diesen vorge- teilten Takt!! Dieser Takt steuert den Zeilenfrequenzteiler und die HBlank-Z„hler. 1 Zeile hat (Zeilenfrequenztei- ler+2)*2 Takte. Die Zeile wird fr (Zeilenfrequenzteiler+2)-HBlankOff+HBlankOn Takte aufgetastet. Beispiele: VGA-Modus, 640 * 480, sw: Videotakt = 25.175 MHz VT = 2 VT_ST = 1 Clock = 25.175 MHz/2/1 = 12.5875 MHz Zeilenfrequenzteiler = 198 HBlankOn = 141 HBlankOff = 21 Zeilenfrequenz = 25.175 MHz/2/1/(198+2)/2 = 31.496 kHz Die Zeile wird fr (198+2)-21+141 = 320 Takte hellgetastet, dies entspricht 640 Pixeltakten (VT = 2, VT_ST = 1). VGA-Modus, 320 * 200, 16 Farben, ST-Kompatibilit„tsmodus: Videotakt = 25.175 MHz VT = 2 VT_ST = 8 Clock = 25.175 MHz/2/8 = 1.5734 MHz Zeilenfrequenzteiler = 23 HBlankOn = 18 HBlankOff = 1 Zeilenfrequenz = 25.175 MHz/2/8/(23+2)/2 = 31.496 kHz Die Zeile wird fr (23+2)-1+18 = 42 Takte hellgetastet, dies ent- spricht 672 Pixeltakten (VT = 2, VT_ST = 8). Ein Pixel ist hier 2 Pixeltakte breit, da der 40 Zeichenmodus eingestellt ist. Da die horizontale Aufl”sung 640/2 ist, ist links und rechts ein Rand. $FFFF8288 [R/W] W ______9876543210 Horizontal Display Begin (HDB) | +---------- HDB-Offset mit anschl. Grafikbertragung wird gestartet in der 0: 1. Halbzeile 1: 2. Halbzeile $FFFF828A [R/W] W ______9876543210 Horizontal Display End (HDE) $FFFF828C [R/W] W ______9876543210 Position HSync (HSS) $FFFF828E [R/W] W _______876543210 Horizontal FS (HFS) wenn Video-Control Bit 4 == 1: Gibt an, wie lange nach Halbzeilenbeginn der HSYNC-Impulse der vorherigen Halbzeile gehalten werden soll (beeinflužt nur die mittleren 5 HSYNC-Impulse). sonst: keine Funktion $FFFF8290 [R/W] W _______876543210 Horizontal EE (HEE) wenn Video-Control Bit 4 == 1: s.o.; beeinflužt aber die ersten und letzten 5 HSYNC-Impulse sonst: keine Funktion $FFFF82A0 [R/-] W _____A9876543210 Bildfrequenzz„hler (VFC) $FFFF82A2 [R/W] W _____A9876543210 Bildfrequenzteiler (VFT) Der Bildfrequenzteiler wird mit dem Ausgangstakt des Zeilenfrequenzteilers getaktet. Da dieser Ausgangstakt der doppelten Zeilenfrequenz entspricht, z„hlt der Bildfrequenzz„hler halbe Zeilen. Dies ist fr den Interlacemodus wichtig (ein TV-Bild hat 312.5 Zeilen). Bildwechselfrequenz = Zeilenfrequenz*2/(Bildfrequenzz„hler+1) Beispiel: VGA-Modus, 640 * 480 sw: Zeilenfrequenz = 31.469 kHz ein VGA-Bild hat 525 Zeilen Bildwechselfrequenz = 31.469 kHz/525 = 59.9 Hz Der Bildfrequenzz„hler muž mit (2*525)-1 geladen werden. Auch die folgenden Z„hler werden mit dem Ausgangstakt des Zeilenfrequenzteilers getaktet. $FFFF82A4 [R/W] W _____A9876543210 VBlankOn (VBB) Bestimmt den Zeitpunkt der Dunkeltastung des Bildes in Halbzeilenschritten. $FFFF82A6 [R/W] W _____A9876543210 VBlankOff (VBE) Bestimmt den Zeitpunkt der Auftastung des Bildes in Halbzeilenschritten. Beispiel: VGA-Modus, 640 * 480, sw: VBlankOn = 1023 VBlankOff = 63 Das Bild wird ab Zeile (VBlankOff+1)/2 = 32 dargestellt und wird ab Zeile (VBlankOn+1)/2 = 512 dunkel getastet. Das Bild hat also 512-32=480 Zeilen. $FFFF82A8 [R/W] W _____A9876543210 Vertikal Display Begin (VDB) Bestimmt die Zeile, von der an das Bild ausgegeben wird. $FFFF82AA [R/W] W _____A9876543210 Vertikal Display End (VDE) Ab dieser Zeile wird die Bildausgabe beendet. Beispiel: VGA-Modus, 640 * 480, sw: VDispOn = 63 VDispOff = 1023 Das Bild wird ab der Zeile (VDispOn+1)/2=32 dargestellt. Ab Zeile (VDispOff+1)/2 = 512 wird die Bilddarstellung eingestellt. $FFFF82AC [R/W] W _____A9876543210 Position Vsync (VSS) Bei Zeile Vsync+1 wird ein Vertical-Synchronimpuls erzeugt. $FFFF82C0 [R/W] W _______8765__21_ Clock-Control (VCO) |||| || |||| |+- 0: Videotakt / 1 |||| | 1: Videotakt / 2 |||| +-- 0: Videotakt 32 MHz |||| 1: Videotakt 25.175 MHz |||+----- 0: negative VSync-Impulse ||| 1: positive VSync-Impulse ||+------ 0: negative HSync-Impulse || 1: positive HSync-Impulse |+------- 0: 16 Bit-Videobus | 1: 32 Bit-Videobus +-------- Horizontaler Basisoffset 0: 128 Videotakte ( SM 124) 1: 64 Videotakte (alle VGA-Modi) $FFFF82C2 [R/W] W ____________3210 Resolution-Control |||| |||+- 0: Zeilenverdopplung aus ||| 1: Zeilenverdopplung an ||+-- 0: Interlace Modus aus || 1: Interlace Modus an ++-- 00: reserviert 01: 320 Pixel 10: 640 Pixel 11: reserviert ************************************************************************** DMA/Disk-Controller ************************************************************************** $FFFF8604 [R/-] W FEDCBA9876543210 DMA Datenregister $FFFF8604 [-/W] W FEDCBA9876543210 DMA Sektor Z„hler $FFFF8606 [R/-] W _____________210 DMA Status ||| ||+- 0= Fehler bei DMA - Operation |+-- 0= Sektorz„hler Register = 0 +--- 0= DATA REQ von FDC/SCSI aktiv $FFFF8606 [-/W] W ________76543210 DMA Mode |||||||| |||||||+- CA 0 (nur fr SCSI) ||||||+-- CA 1 |||||+--- CA 2 ||||+---- 1 = SCSI |||| 0 = FDC ||++----- 0, reserviert |+------- 1 = DMA mit SCSI | 0 = DMA mit FDC +-------- 0 = DMA - Read 1 = DMA - Write $FFFF8609 [R/-] B 76543210 Count Hi $FFFF8609 [-/W] B 76543210 DMA Base Hi $FFFF860B [R/-] B 76543210 Count Mi $FFFF860B [-/W] B 76543210 DMA Base Mi $FFFF860D [R/-] B 76543210 Count Lo $FFFF860D [-/W] B 76543210 DMA Base Lo $FFFF860F [R/_] W ________76543210 Floppy Controll-Register |||||||| |||||||+- Vorteiler 1 ||||||+-- Mode Select 1 |||||+--- Media Detect 1 ||||+---- wird bei DMA-Zugriffen |||| abgefragt |||+----- Vorteiler 2 ||+------ Mode Select 2 |+------- Media Detect 2 +-------- Disk Changed $FFFF860F [_/W] W __________54__10 Floppy Controll-Register || || || |+- Vorteiler 1 || +-- Media Detect 1 |+----- Vorteiler 2 +------ Media Detect 2 Der Falcon kann im Prinzip DD-, HD- und ED - Laufwerke ansprechen. Leider kennt das TOS 4.00 - 4.04 nur DD- und HD- Laufwerke, die durch Software umgeschaltet werden. Leider wird von der M”glichkeit der Hardwaretak- tumschaltung kein Gebrauch gemacht. In das Register $FFFF860F mssen folgende Werte eingetragen werden (Soft- ware-Umschaltung): * DD - Disketten: $00 * HD - Disketten: $03 * ED - Disketten: $30 (wird durch TOS berschrieben) Hinweis: Wenn in das Register der Wert $33 eingetragen wird, strzt der Rechner ab. ************************************************************************** SCSI - Controller 53C80 ************************************************************************** Dieser Schaltkreis ist an den (ACSI-) DMA - Controller angeschlossen. Ein Zugriff auf die 8 Register des 53C80 erfolgt „hnlich dem Zugriff auf den FDC. Die Registernummern sind : $88: s_data ; Aktueller Inhalt des SCSI-Datenbusses $89: s_icr ; Initiator-Befehlsregister $8A: s_mode ; Betriebsartenregister $8B: s_tcr ; Targetbefehlsregister $8C: s_idstat ; Busstatusregister $8D: s_dmastat ; Statusregister $8E: s_targcv ; Start Target-DMA-Eingabe $8F: s_inircv ; Start Initiator-DMA-Eingabe Die Bedeutung der Register ist im Profibuch (10./11. Auflage,S 1358f) beschrieben. ************************************************************************** PSG-Soundchip AY-3-8910 ************************************************************************** $FFFF8800 [R/-] B 76543210 Read Data $FFFF8800 [-/W] B 76543210 Register Selection $FFFF8802 [R/W] B 76543210 Write Data Hinweis: Die PSG-Register sind jetzt auf 2 Adressen festgelegt. Ein Zugriff auf die Schattenregister ($8804.w - $8900.w) erzeugt einen Busfehler. Belegung PSG - Port A: 76543_10 |||||||| |||||||+--- Floppy Side Select ||||||+---- Drive 0 Select |||||+----- nicht belegt ||||+------ Centronics SELECT IN |||+------- DSP Reset ||+-------- Centronics STROBE |+--------- Lautsprecher ein/aus +---------- IDE - Reset Belegung PSG - Port B: Centronics Data0 ... Data7 ************************************************************************** PCM - Soundchip (CODEC) ************************************************************************** $FFFF8900 [R/W] B ____3210 Sound-DMA-Control Hi |||| MFP IRQ 15 ||00- keinen Interrupt ausl”sen ||01- Interrupt nach dem Abspielen ||10- Interrupt nach dem Aufnehmen ||11- Interrupt nach Aufnahme oder Wiedergabe || Timer A Interrupt 00--- keinen Interrupt ausl”sen 01--- Interrupt nach dem Abspielen 10--- Interrupt nach dem Aufnehmen 11--- Interrupt nach Aufnahme oder Wiedergabe $FFFF8901 [R/W] B 7_54__10 Sound-DMA-Control Lo | || || | || ++- 00: DMA aus | || 01: Abspielen | || 11: Abspielen mit Wiederholung | ++----- 00: DMA aus | 01: Aufnehmen | 11: Aufnehmen mit Wiederholung +-------- 0: W„hlt Abspiel-Frame-Register 1: W„hlt Aufnahme-Frame-Register ************************************************************************** Frame Adressen ************************************************************************** $FFFF8903 [R/W] B 76543210 Frame Startadresse Hi $FFFF8905 [R/W] B 76543210 Frame Startadresse Mi $FFFF8907 [R/W] B 76543210 Frame Startadresse Lo $FFFF8909 [R/W] B 76543210 Frame Adressenz„hler Hi $FFFF890B [R/W] B 76543210 Frame Adressenz„hler Mi $FFFF890D [R/W] B 76543210 Frame Adressenz„hler Lo $FFFF890F [R/W] B 76543210 Frame Endadresse Hi $FFFF8911 [R/W] B 76543210 Frame Endadresse Mi $FFFF8913 [R/W] B 76543210 Frame Endadresse Lo HOW to access the play/record-frame: You have to set bit 7 of $8901.w to select play- or record-shadow-register, then access the frame-begin/end-regi- sters! The play- and record-shadowregister are two seperate registers; they appear only at the same addresses! $FFFF8920 [R/W] B __54__10 Track-Play-Control || || || 00- 1 Spur abspielen || 01- 2 Spuren abspielen || 10- 3 Spuren abspielen || 11- 4 Spuren abspielen 00----- setze DA-Wandler auf Spur 1 01----- setze DA-Wandler auf Spur 2 10----- setze DA-Wandler auf Spur 3 11----- setze DA-Wandler auf Spur 4 $FFFF8921 [R/W] B 76____10 Sound-Mode-Control || || || 00- 6258 Hz (STE-Kompatibel) || 01- 12517 HZ || 10- 25033 HZ || 11- 50066 HZ 00------- 8-Bit Stereo (STE-kompatibel) 01------- 16-Bit Stereo (Falcon Sound) 10------- 8-Bit Mono (STE-kompatibel) Nice to know: The samplerate 6258 Hz was repleaced by a nute condition. You can use it to deactivate the DMA-Transfer. ************************************************************************** Microwire-Interface (im Falcon nicht vorhanden) ************************************************************************** $FFFF8922 [R/W] W ________________ Microwire Daten-Register $FFFF8924 [R/W] W ________________ Mikrowire Masken-Register ************************************************************************** Multiplexer ************************************************************************** $FFFF8930 [R/W] W __D__A9867543210 Parameter der Quellkomponenten | ||||||||||| | ||||||||||| DMA-Ausgabe | ||||||||||+- 0: Handshake an | |||||||||| 1: Handshake aus | ||||||||++-- 00 25.175 MHz | |||||||| 01 externer Takt | |||||||| 10 32 MHz Takt | |||||||+---- 0: Ziel ist DMA-Eingabe | ||||||| 1: alle anderen Ziele | ||||||| DSP-Ausgabe | ||||||+----- 0: Handshake an | |||||| 1: Handshake aus | ||||++------ 00: 25.175 MHz | |||| 01: externer Takt | |||| 10: 32 MHz | |||+-------- 0: Multiplexer abkoppeln | ||| 1: Verbindung mit MUX | ||| externe Eingabe | ||+--------- 0: Handshake aus | || 1: Handshake an | ++---------- 00: 25.175 MHz | 01: externer Takt | 10: 32 MHz | A/D-Wandler +-------------- 0: interner Takt 1: externer Takt $FFFF8932 [R/W] B _ED__A9876543210 Parameter der Zielkomponenten || ||||||||||| || ||||||||||| DMA-Eingabe || ||||||||||+- 0: Handshake an || |||||||||| 1: Handshake aus || ||||||||++-- 00: Quelle = DMA-Ausgabe || |||||||| 01: Quelle = DSP-Ausgabe || |||||||| 10: Quelle = externe Eingabe || |||||||| 11: Quelle = A/D-Wandler || |||||||+---- 0: wenn Quelle = DSP-Ausgabe || ||||||| 1: alle anderen Quellen || ||||||| DSP-Eingabe || ||||||+----- 0: Handshake an || |||||| 1: Handshake aus || ||||++------ 00: Quelle = DMA-Ausgabe || |||| 01: Quelle = DSP-Ausgabe || |||| 10: Quelle = externe Eingabe || |||| 11: Quelle = A/D-Wandler || |||+-------- 0: MUX abkoppeln || ||| 1: Verbindung mit MUX || ||| externe Ausgabe || ||+--------- 0: Handshake an || || 1: Handshake aus || ++---------- 00: Quelle = DMA-Ausgabe || 01: Quelle = DSP-Ausgabe || 10: Quelle = externe Eingabe || 11: Quelle = A/D-Wandler || D/A-Wandler ++-------------- 00: Quelle = DMA-Ausgabe 01: Quelle = DSP-Ausgabe 11: Quelle = externe Eingabe 10: Quelle = A/D-Wandler $FFFF8934 [R/W] B ____3210 Vorteiler externer Takt |||| ++++- 0: STE-kompatibler Modus 1-15: Vorteiler Takt = (externer Takt/256)/(Vorteiler-Wert+1). $FFFF8935 [R/W] B ____3210 Prescale internal Clock |||| (25.175 or 32 MHz) ++++- look above! According to the |||| Documentation you can only use the |||| following values for the CODEC(A/D |||| and D/A-Converter):0,1,2,3,4,5,7,9,11 0000- switch to STE-compatible mode 0001- CLK50K 49170 Hz 0010- CLK33K 32780 Hz 0011- CLK25K 24585 Hz 0100- CLK20K 19668 Hz 0101- CLK16K 16390 Hz 0110- CLK14K 14049 Hz (invalid for CODEC) 0111- CLK12K 12292 Hz 1000- CLK11K 10927 Hz (invalid for CODEC) 1001- CLK10K 9834 Hz 1010- CLK09K 8940 Hz (invalid for CODEC) 1011- CLK08K 8195 Hz 1100- CLK07K 7565 Hz (invalid for CODEC) 1101- CLK07K 7024 Hz (invalid for CODEC) 1110- CLK06K 6556 Hz (invalid for CODEC) 1111- CLK06K 6146 HZ (invalid for CODEC) $FFFF8936 [R/W] B ______10 Track-Record-Control || ++- 00: 1 Spur Aufnehmen 01: 2 Spuren Aufnehmen 10: 3 Spuren Aufnehmen 11: 4 Spuren Aufnehmen $FFFF8937 [R/W] B ______10 CODEC-Hardwareadder-Eingang || |+- 1: Eingang vom A/D-Wandler +-- 1: Eingang vom Multiplexer NOTE: The CODEC-Hardwareadder-Input connects the D/A-Converter with the multiplexer or the A/D-Converter. It is also possible to connect both. In this case the 16-bit-Hardwareadder mix the two signals. $FFFF8938 [R/W] B ______10 CODEC ADC-Eingang-Register || |+- 0: Rechter Mikrofon-Kanal | 1: Rechter PSG-Kanal +-- 0: Linker Mikrofon-Kanal 1: Linker PSG-Kanal $FFFF8939 [R/W] B 76543210 Channel-Input-Amplifier in +1.5 dB |||||||| steps (GAIN-register) |||||||| ||||++++- 0-15: Gain of right channel (RTGAIN) ++++----- 0-15: Gain of left channel (LTGAIN) $FFFF893A [R/W] W ____BA897654____ Ausgabeabschw„chung |||||||| ||||++++----- 0-15: Abschw„chung rechter Kanal (RTATTEN) ++++--------- 0-15: Abschw„chung linker Kanal (LTATTEN) $FFFF893C [R/W] B ______10 CODEC-Status Hi || |+- 1: right channel-overflow +-- 1: left channel-overflow $FFFF893D [R/W] B 7654____ CODEC-Status Lo |||| |||+----- ? ||+------ ? |+------- ? +-------- ? $FFFF8941 [R/W] B _____210 GPx-Datenrichtungs-Register ||| +++- bidirectional Dataportpath of the GP0GP2-Pins on the DSP-Connector 0: Pin ist Eingang (Daten von GPx) 1: Pin ist Ausgang (Daten zum GPx) (default %111) $FFFF8943 [R/W] B _____210 GPx-Dataport ||| +++- Input/Output-Data-Bits of the GP0-GP2-Pins on the DSP-Connector. This Pins can be used for userdef. operations. ************************************************************************** Hardware-Uhr ************************************************************************** $FFFF8961 [R/W] B 76543210 Register Selection $FFFF8963 [R/W] B 76543210 Data ************************************************************************** BLiTTER¿ ************************************************************************** $FFFF8A00 [R/W] W FEDCBA9876543210 Halftone RAM 0 $FFFF8A02 [R/W] W FEDCBA9876543210 Halftone RAM 1 $FFFF8A04 [R/W] W FEDCBA9876543210 Halftone RAM 2 $FFFF8A06 [R/W] W FEDCBA9876543210 Halftone RAM 3 $FFFF8A08 [R/W] W FEDCBA9876543210 Halftone RAM 4 $FFFF8A0A [R/W] W FEDCBA9876543210 Halftone RAM 5 $FFFF8A0C [R/W] W FEDCBA9876543210 Halftone RAM 6 $FFFF8A0E [R/W] W FEDCBA9876543210 Halftone RAM 7 $FFFF8A10 [R/W] W FEDCBA9876543210 Halftone RAM 8 $FFFF8A12 [R/W] W FEDCBA9876543210 Halftone RAM 9 $FFFF8A14 [R/W] W FEDCBA9876543210 Halftone RAM 10 $FFFF8A16 [R/W] W FEDCBA9876543210 Halftone RAM 11 $FFFF8A18 [R/W] W FEDCBA9876543210 Halftone RAM 12 $FFFF8A1A [R/W] W FEDCBA9876543210 Halftone RAM 13 $FFFF8A1C [R/W] W FEDCBA9876543210 Halftone RAM 14 $FFFF8A1E [R/W] W FEDCBA9876543210 Halftone RAM 15 $FFFF8A20 [R/W] W FEDCBA9876543210 Source-X-Increment $FFFF8A22 [R/W] W FEDCBA9876543210 Source-Y-Increment $FFFF8A24 [R/W] L Source-Address $FFFF8A28 [R/W] W FEDCBA9876543210 ENDMASK 1 $FFFF8A2A [R/W] W FEDCBA9876543210 ENDMASK 2 $FFFF8A2C [R/W] W FEDCBA9876543210 ENDMASK 3 $FFFF8A2E [R/W] W FEDCBA9876543210 Destination-X-Increment $FFFF8A30 [R/W] W FEDCBA9876543210 Destination-Y-Increment $FFFF8A32 [R/W] L Destination-Address $FFFF8A36 [R/W] W FEDCBA9876543210 X-Count $FFFF8A38 [R/W] W FEDCBA9876543210 Y-Count $FFFF8A3A [R/W] B ______10 Halftone-Operation $FFFF8A3B [R/W] B ____3210 Logic-Operation $FFFF8A3C [R/W] B 765_3210 Line-Number $FFFF8A3D [R/W] B 76__3210 Skew ************************************************************************** Serial-Communications-Controller ************************************************************************** Kanal A bedient den LAN-Port, Kanal B fhlt sich fr V.24 zust„ndig. $FFFF8C81 [R/W] B 76543210 Controlregister Kanal A $FFFF8C83 [R/W] B 76543210 Read / Write Data Kanal A $FFFF8C85 [R/W] B 76543210 Controlregister Kanal B $FFFF8C87 [R/W] B 76543210 Read / Write Data Kannal B ************************************************************************** Konfigurationsschalter ************************************************************************** $FFFF9200 [R/W] B 765_____ Switches ||| |++------ Diskettenlaufwerk - Typ | 00 = DD | 01 = DD/HD (default) | 10 = DD/HD/ED | 11 = reserviert +-------- Sound DMA vorhanden ************************************************************************** Erweiterte Joystick/Lichtstift-Anschlsse ************************************************************************** $FFFF9200 [R/W] W ____________3210 Joystick FIRE 0..3 $FFFF9202 [R/W] W FEDCBA9876543210 Joysticks 1-4 $FFFF9210 [R/W] W ________76543210 Position Paddle 0 $FFFF9212 [R/W] W ________76543210 Position Paddle 1 $FFFF9214 [R/W] W ________76543210 Position Paddle 2 $FFFF9216 [R/W] W ________76543210 Position Paddle 3 $FFFF9220 [R/W] W FEDCBA9876543210 Lightpen X-Position $FFFF9222 [R/W] W FEDCBA9876543210 Lightpen Y-Position Hi ************************************************************************** 256-Farben-Register ************************************************************************** $FFFF9800 [R/W] L rrrrrr00 gggggg00 00000000 bbbbbb00 Farbe 0 : : : : : : : : : : : : : : : : $FFFF9BFC [R/W] L rrrrrr00 gggggg00 00000000 bbbbbb00 Farbe 256 ************************************************************************** DSP - HOST - INTERFACE ************************************************************************** $FFFFA200 [R/W] B 76543_10 Interrupt Control Register ||||| || (DSP X:FFE9) ||||| ++- Daten Transfer Modus ||||| DMA-Mode ||||| 00 No DMA ||||| 01 DSP To HOST Request ||||| 10 HOST To DSP Request ||||| Interrupt-Mode ||||| 00 kein Interrupt ||||| 01 Enable Receiver Full Interrupt ||||| 10 Enable Transmitter Empty Interrupt ||||| 11 Enable Both Interrupts ||||+---- Hf0-Bit |||+----- Hf1-Bit |++------ DMA Mode Control | 00 Interrupt-Mode (DMA aus) | 01 24-Bit DMA-Modus | 10 16-Bit DMA-Modus | 11 8-Bit DMA-Modus | NOTE: Das XBIOS untersttzt nur den | Interrupt mode! +-------- INIT Wird normalerweise zum Initialisieren (kein RESET!!) des DSPs und des Host-Inter- faces verwendet. Wird vom XBIOS nicht verwendet. $FFFFA201 [R/W] B 7___3210 Command Vektor Register | |||| (DSP X:$FFE9) | ++++- Host-Vektor (0..31) +-------- Host Command Bit 1: der DSP meldet einen Interrupt $FFFFA202 [R/-] B 76_43210 Interrupt Status Register || ||||| (DSP X:$FFE8) || ||||+- 0: DSP ist Empfangsbereit || |||| 1: DSP Empf„ngerbuffer ist voll || |||+-- 0: DSP Sendebuffer ist voll || ||| 1: DSP ist Sendebereit || ||+--- Transmitter Ready || || 1: Transmit und Receiver Byte Register empty || |+---- Hf2-Bit, userdef. Infobit from Host to DSP || +----- Hf3-Bit, userdef. Infobit from Host to DSP |+------- DMA-Status | 0: Host ist im Interrupt-Modus | 1: Host ist im DMA-Modus +-------- Host Request 0: kein Host IRQ 1: Host IRQ ausgel”st $FFFFA203 [R/W] B 76543210 Interrupt Vektor Register enth„lt die MC68030-Exeption-Vektornummer. IVR: $0F >> MC68030 IRQ-Adresse: $003C $FFFFA205 [R/W] B 76543210 I/O-Data-Path Hi (DSP X:$FFEB) $FFFFA206 [R/W] B 76543210 I/O-Data-Path Mi (DSP X:$FFEB) $FFFFA207 [R/W] B 76543210 I/O-Data-Path Lo (DSP X:$FFEB) ************************************************************************** Multi-Function-Peripheral MC 68901 ************************************************************************** $FFFFFA01 [R/W] B 76543210 GPIP-Data |||||||| |||||||+- Centronics BUSY ||||||+-- Centronics ACK |||||+--- MIDI-Interrupt ||||+---- DSP-Interrupt |||+----- Keybord-/MIDI-Interrupt ||+------ Harddisk-/Floppy-Interrupt |+------- Ring Indicator +-------- SND-Interrupt $FFFFFA03 [R/W] B 76543210 Active-Edge $FFFFFA05 [R/W] B 76543210 Data-Direction $FFFFFA07 [R/W] B 76543210 Interrupt-Enable A $FFFFFA09 [R/W] B 76543210 Interrupt-Enable B $FFFFFA0B [R/W] B 76543210 Interrupt-Pending A $FFFFFA0D [R/W] B 76543210 Interrupt-Pending B $FFFFFA0F [R/W] B 76543210 Interrupt-In-Service A $FFFFFA11 [R/W] B 76543210 Interrupt-In-Service B $FFFFFA13 [R/W] B 76543210 Interrupt-Mask A $FFFFFA15 [R/W] B 76543210 Interrupt-Mask B $FFFFFA17 [R/W] B 76543210 Interrupt-Vektor $FFFFFA19 [R/W] B 76543210 Timer-A-Control $FFFFFA1B [R/W] B 76543210 Timer-B-Control $FFFFFA1D [R/W] B 76543210 Timer-C+D-Control $FFFFFA1F [R/W] B 76543210 Timer-A-Data $FFFFFA21 [R/W] B 76543210 Timer-B-Data $FFFFFA23 [R/W] B 76543210 Timer-C-Data $FFFFFA25 [R/W] B 76543210 Timer-D-Data $FFFFFA27 [R/W] B 76543210 Synchronous-Character $FFFFFA29 [R/W] B 76543210 USART-Control $FFFFFA2B [R/W] B 76543210 Receiver-Status $FFFFFA2D [R/W] B 76543210 Transmitter-Status $FFFFFA2F [R/W] B 76543210 USART-Data ************************************************************************** Tastatur-/MIDI-ACIAs 6850 ************************************************************************** $FFFFFC00 [R/-] B 76543210 Keyboard-Status $FFFFFC00 [-/W] B 76543210 Keyboard-Control $FFFFFC02 [R/-] B 76543210 Keyboard-Receive $FFFFFC02 [-/W] B 76543210 Keyboard-Send $FFFFFC04 [R/-] B 76543210 Midi-Status $FFFFFC04 [-/W] B 76543210 Midi-Control $FFFFFC06 [R/-] B 76543210 Midi-Receive $FFFFFC06 [-/W] B 76543210 Midi-Send ************************************************************************** Neues Tastatur - Interface (zur Zeit unbenutzt) ************************************************************************** $FFFFFF82 [R/-] B 76543210 Scancode $FFFFFF83 [R/-] B 76543210 Status ****************************************************************************************************** Generelle Informationen und Programmiertechnik ****************************************************************************************************** Daten mit Handshake zum DSP senden 1. Warten, bis der DSP Empfangsbereit ist ($FFFFA202 Bit 1 wird 1) 2. Die Daten nach $FFFFA204 - $FFFFA207 schreiben 3. weitere Daten Senden: Gehe zu 1. Beispiel: (Diese Routine entspricht dem DSP-XBIOS) LEA BUFFER(PC) ,A0 ; Puffer mit DSP-Worten MOVE.W #DSP_WORDS, D0 ; sendet max. 65535 DSP-Words LOOP: BTST #0, $FFFFA202.W ; ist DSP Empfangsbereit? BEQ.S LOOP ; nein, dann warten 4 bytes: MOVE.L (A0)+, $FFFFA204.W ; Sendet 4 Bytes, das h”chste Byte wird vom ; DSP ignoriert 3 bytes: MOVE.B (A0)+, $FFFFA205.W ; Sendet MOVE.B (A0)+, $FFFFA206.W ; 3 Bytes MOVE.B (A0)+, $FFFFA207.W ; (1 DSP-Word hat 24 Bit) 2 bytes: MOVE.W (A0)+,D1 ; Sendet 2 Bytes EXT.L D1 ; Erweiterung zu 4 Bytes MOVE.W D1, $FFFFA204.W ; Sendet 4 Bytes 1 byte: MOVE.B #0, $FFFFA205.W ; Sendet MOVE.B #0, $FFFFA206.W ; 1 Byte MOVE.B (A0)+, $FFFFA207.W DBRA D0, LOOP Daten vom DSP mit Handshake empfangen: 1. Warten, bis DSP sendebereit ist ($FFFFA202 Bit 0 wird 1) 2. Daten von $FFFFA204 - $FFFFA207 lesen 3. wenn weitere Daten bertragen werden sollen: weiter mit 1. Beispiel: (Diese Routine entspricht dem DSP-XBIOS) LEA BUFFER(PC),A0 ; Puffer mit DSP-Words MOVE.W #DSP_WORDS,D0 ; šbertrage max. 65535 DSP-Words LOOP: BTST #1,$FFFFA202.W ; kann DSP senden? BEQ.S LOOP 4 bytes: MOVE.L $FFFFA204.W,(A0)+ ; šbertrage 4 Bytes, das h”chste Byte ist 0x00 3 bytes: MOVE.B $FFFFA205.W,(A0)+ ; šbertrage MOVE.B $FFFFA206.W,(A0)+ ; 3 Bytes MOVE.B $FFFFA207.W,(A0)+ ; (1 DSP-Word hat 24 Bit) 2 bytes: MOVE.B $FFFFA206.W,(A0)+ ; šbertrage MOVE.W $FFFFA207.W,(A0)+ ; 2 Bytes 1 byte: MOVE.B $FFFFA206.W,D1 ; dummy-read MOVE.B $FFFFA207.W,(A0)+ ; Transfer 1 byte DBRA D0,LOOP NOTE: it is possible to skip the 1. step. This mode increases the transfering-rate, but the DSP-program must be able to read the data immediately, otherwhise the data will be overwritten by the next one. It is important that the DSP is ready to transfer, there for execute the 1. step before transfering data! (1. step > 2. step > 2. step > 2. step ......until end) Daten im Interrupt zum DSP senden oder vom DSP lesen 1. Interrupt installieren 1. 1. Interrupt-Programmadresse in den DSP-Interrupt-Vektor schreiben ($003C, Vektor 15) 1.2. In das Register $FFFFA203 (IVR) den Wert $FF schreiben 1.3. Bit 0/1 im Register $FFFFA200 (ICR) zum Senden/Empfangen setzen Nun ist der DSP-IRQ installiert und eingeschaltet. 2. Die Interrupt-Routine 2.1. Daten von/nach $FFFFA204 - $FFFFA207 lesen/schreiben 2.2. Interrupt-Routine mit RTE beenden 3. Es gibt 2 M”glichkeiten, den Interrupt zu beenden 3.1. Das Hauptprogramm l”scht Bit 0/1 im ICR 3.2. Das Interruptprogramm l”scht Bit 0/1 im ICR Anmerkung: Es gibt nur eine Exeption-Nummer zum Schreiben oder Lesen von Daten. Es ist jedoch m”glich, die Daten simultan zu schreiben oder zu lesen. In diesem Fall mssen die Bits 0 oder 1 im ICR abgefragt werden, um die Transferrichtung der Daten zu ermitteln. DSP-Installations-Routine Zum Rcksetzen und Initialisieren des DSP mssen folgende Schritte ausgefhrt werden: - Bit 4 im PSG auf 1 setzen, nach 1/200s wieder auf 0 setzen - der DSP erwartet nun 512 DSP-Worte, die das Bootprogramm enthalten - nach der šbertragung startet der DSP das Bootprogramm Beispiel: (Diese Routine entspricht dem DSP-XBIOS) INIT_DSP: MOVE.B #14, $FFFF8800 ; Port A des PSG ausw„hlen MOVE.B #$FFFF8800, D0 OR.B #$10, D0 ; Reset-Beginn MOVE.B D0, $FFFF8802 AND.B #$EF, D0 ; Reset-Ende MOVE.B D0, $FFFF8802 LEA Buffer(PC), A0 ; Puffer mit DSP-Worten MOVE.W #512-1, D0 ; šbertrage 512 DSP-Worte LOOP: MOVE.B (A0)+, $FFFFA205 ; šbertrage MOVE.B (A0)+, $FFFFA206 ; 3 Bytes MOVE.B (A0)+, $FFFFA207 ; (1 DSP-Wort hat 24 Bits) DBRA D0, LOOP Wie aus dem ÏATARI FALCON 030 Service GuideÐ und dem ÏFALCON 030 Shematic SheetÐ ersichtlich ist, wird der serielle Port des MFP nicht genutzt. Die Sende- und Empfangs-Interrupts sind jedoch freigegben. Die neuen Interrupt-Kan„le des FALCON 030: IRQ-Adr. Prior. Status Quelle Genutzt von --------------------------------------------------------------------------------------------------------------------------------- $0100 00 gesperrt I/O-Port 0 Printer Busy $0104 01 gesperrt I/O-Port 1 Printer Acknowledge $0108 02 frei I/O-Port 2 MIDI-Interrupt $010C 03 gesperrt I/O-Port 3 DSP-Interrupt $0110 04 gesperrt Timer D Timer oder Baudratengenerator $0114 05 frei Timer C 200 Hz-Systemtimer $0118 06 frei I/O-Port 4 IKBD/MIDI-Interrupt $011C 07 gesperrt I/O-Port 5 IDE/SCSI/FDD-Interrupt $0120 08 gesperrt Timer B Display Enable $0124 09 frei XMIT Error ungenutzt $0128 10 frei XMIT Buffer empty ungenutzt $012C 11 frei RCV Error ungenutzt $0130 12 frei RCV Buffer full ungenutzt $0134 13 gesperrt Timer A DMA-Sound-Interrupt $0138 14 gesperrt I/O-Port 6 RS 232 Ring Indikator $013C 15 gesperrt I/O-Port 7 DMA-Sound-Interrupt --------------------------------------------------------------------------------------------------------------------------------------------------------- Das Video-Subsystem --------------------------------------------------------------------------------------------------------------------------------------------------------- Vorab: Diese Dokumentation soll nicht als Lehrbuch betrachtet werden, es soll lediglich eine kurze Einfhrung in das Videosystem erm”glichen. Alle Werte sind mit dem Oszi ausgemessen und durch das Betriebsystem best„tigt worden. Unterschiede zw. den Betriebssystem-Registerwerten und den mit den Formeln errechneten Werten wird es trotzdem geben, da das XBIOS nachtr„glich einige Register zur Grafikdarstellung ab„ndert. Horizontales Zeitverhalten: Der Aufbau einer Bildschirmzeile: 1 Bildschirmzeile |<------------------------------------------------------------------>| | | | 1. Halbzeile 2. Halbzeile | |<------------------------------>|<--------------------------------->| | | | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| | | | | | | | | | |<----------------------------------->| | | | | | #5 | | | | | | | | |<-->|<-------------------------------------------------->| |<--->| #1 #2 | #4 | | | |<-------->| #3 #1: linke Austastlcke #2: sichtbarer Bildschirmbereich #3: rechte Austastlcke #4: HSync-Impuls #5: Grafikbertragungsbereich Jede Bildschirmzeile, auch die ausgetastete, besitzt einen solchen Aufbau: linke Austastlcke, sichtbarer Bereich mit ggf. Grafikbereich, rechte Austastlcke und in der rechten Austastlcke den HSyncimpuls. Grunds„tzlich kann man sagen, daž eine Zeile in 2 Halbzeilen unterteilt ist. Um die Horizontalre- gister der Bildschirmhalbzeilen berechnen zu k”nnen, ben”tigt man einige Angaben: - Videogrundtakt: 32MHz, 25.175 MHz oder externer Takt RGB/TV VGA Monochrom - Horizontalfrequenz des Monitors: 15625 Hz 31467 Hz 35714 Hz - L„nge des Hsyncimpuls: 4.7æs 3.81æs 3.00 æs - L„nge der rechten Austastlcke: 6.2æs 4.45æs 0.00 æs - L„nge der linken Austastlcke: 5.145æs 1.91æs 0.00 æs Diese Werte werden vom Betriebssystem benutzt. Die L„nge des Hsyncimpuls sollte nicht ge„ndert sowie die Au- stastzeit nur geringfgig unterschritten werden. Das Zeitverhalten wird im Videosystem in Taktzyklen gemessen. So muž eine gewisse Anzahl von Taktzyklen verge- hen bis z.B. die rechte Austastlcke aktiv wird. S„mtliche Registerinhalte h„ngen von den obigen Zeitangaben (die natrlich ver„ndert werden k”nnen, es sind ja keine Festwerte vom Videosystem selbst sondern Vorgaben von den Monitoren), dem Videogrundtakt und von dem Videovorteiler, der den Grundtakt runterteilt, ab. Der Videovorteiler l„žt sich durch das Video-Mode ($82C2) Bit 2/3 in Abh„ngigkeit der Video-Mode-Control-Bits (Video-Control ($82C0) Bit 0/1) oder dem STE-Kompatibilit„tsmodus einstellen. Wichtig: der Videovorteiler und die Pixeltaktl„nge werden beide von Bit 2/3 des Video-Mode gesteuert. Zun„chst die Berechnung folgender Horizontalregister: HHT gibt die Videotaktanzahl fr eine Halbzeile an: | Videogrundtakt | HHT($8282) = int|---------------------------------------- - 2| |Horizontalfrequenz in Hz * Vorteiler * 2 | Nach HHT richtet sich der Videotaktz„hler HHC($8280) der die einzelnen Taktimpulse bis zum HHT-Wert hoch- z„hlt. Wird der Wert berschritten, ist also HHC = HHT+1, so ist 1 Halbzeile beendet und der Z„hler f„ngt fr die n„chste Halbzeile von vorne an. HHT gibt somit die Anzahl der Videotakte einer Halbzeile an. Alle nachfolgenden Register mssen sich innerhalb des HHT-Wertes+1 befinden, da sie die Videoz„hlerposition angeben ab wann eine Aktion ausgefhrt werden soll (z.B. Start der linken Austastlcke...). HSS gibt an ab welcher Videotaktz„hlerposition in der 2. Halbzeile der HSyncimpuls bis Halbzeilenende ausgel”st werden soll: |HSynczeit in æs * Videogrundtakt | HSS($828A) = HHT + 1 - int|-------------------------------- | | Vorteiler | Ist HSS gr”žer als HHT+1 so wird kein VSync-Impuls ausgel”st. HBB gibt an ab welcher Videotaktz„hlerposition in der 2. Halbzeile die rechte Austastlcke bis Halbzeilenende aktiv werden soll: |rechte Austastlckenzeit in æs * Videogrundtakt| HBB($8284) = HHT + 1 - int|-----------------------------------------------| | Vorteiler | Ist HBB gr”žer als HHT+1 so wird keine Austastlcke erzeugt. Ist ein Monochrom-Monitor (z.B. SM124) ange- schlossen, so ist HBB ohne Bedeutung und es wird keine Austastlcke erzeugt. HBE gibt an bis zu welcher Videotaktz„hlerposition in der 1. Halbzeile die linke Austastlcke aktiv bleiben soll: |linke Austastlckenzeit in æs * Videogrundtakt| HBE($8286) = int|----------------------------------------------| | Vorteiler | Ist HBE gr”žer als HHT+1 so wird ber beide Halbzeilen eine Austastlcke erzeugt. Ist ein Monochrom-Monitor (z.B. SM124) angeschlossen, so ist HBE ohne Bedeutung und es wird keine Austastlcke erzeugt. Nun zu dem interessanteren Teil: die horizontale Grafikeinstellung. Dieser Teil hat mich die meiste Zeit und viel Mhe gekostet und ist bei Gott nicht einfach zu verstehen. Das Videosystem hat eine seltsame Art den horizontalen Grafikbereich darzustellen. Zuerst wird bestimmt in wel- cher Halbzeile (1. oder 2., Bit 9 des HDB-Registers($8288)) mit der Grafikbertragung begonnen werden soll. Ist dies bestimmt so wartet das Videosystem in der gew„hlten Halbzeile bis HHC den Inhalt des HDB-Registers ($8288) erreicht hat und beginnt dann mit der Grafikbertragung. Zuvor legt aber das Videosystem eine 'Wartezeit' ein (keine Ahnung warum, vielleicht um den Bus etwas zu entlasten oder um die ersten Grafikdaten in den internen VIDEL-Puffer zu laden). Diese Waitstates lassen sich mit HDB-Offset errechnen. Erst danach wird mit der Grafikbertragung begonnen. HDE($828A) gibt dann den rechten Grafikrand an. Hier verl„uft es genauso wie oben beschrieben. Zuerst wird ge- wartet bis HHC den Inhalt des HDE-Registers ($828A) erreicht hat und legt dann wieder eine Wartezeit ein um danach die Grafikbertragung zu beenden. Die Waitstates lassen sich mit HDE-Offset errechnen. Im Gegensatz zu HDB kann HDE nur fr die 2. Halbzeile eingestellt werden. Zun„chst zu den Offsets: Mit HDB-Offset werden die Waitstates, die das Videosystem pro Zeile einlegt bevor mit der Grafikbertragung be- gonnen wird, berechnet. Dieser Offset ist von der Planeanzahl und dem gew„hlten Vorteiler sowie der Pixeltaktl„n- ge, welches die Aufl”sung bestimmt, abh„ngig. Es wird jedoch zwischen dem Plane- und dem TrueColor-Modus un- terschieden: Im Falcon-Planemodus: | |8 Worte*16 Pixel | | |Basisoffset +|---------------- + 16+2| * Pixeltaktl„nge| | | Planeanzahl | | HDB-Offset=int|-------------------------------------------------------| + 1 | Vorteiler | Im STE-kompatiblen-Planemodus: | |8 Worte*16 Pixel | | |64 + Basisoffset +|---------------- + 2| * Pixeltaktl„nge| | | Planeanzahl | | HDB-Offset=int|---------------------------------------------------------| + 1 | Vorteiler | Im TrueColor-Modus: |Basisoffset + 16 Pixel * Pixeltaktl„nge| HDB-Offset = int|---------------------------------------| + 1 | Vorteiler | Der Basisoffset l„žt sich im VIDEO-CONTROL-Register ($82C0) Bit 8 einstellen. Wird das Bit auf null gesetzt so werden 128 Videotakte,wenn das Bit auf eins gesetzt wird 64 Videotakte als Basisoffset verwendet. Wird eine STE-Kompatible Aufl”sung gew„hlt, die die STE-Palette benutzt, so muž noch zum Basisoffset 64 Taktzyklen addiert werden. Anscheinend aus Grnden der Kompatibilit„t. Mit HDE-Offset werden die Waitstates, die das Videosystem pro Zeile einlegt bevor die Grafikbertragung beendet wird, berechnet. Dieser Offset ist ebenfalls von der Planeanzahl und dem gew„hlten Voteiler sowie der Pixeltaktl„n- ge abh„ngig. Auch hier wird zwischen dem Plane- und dem TrueColor-Modus unterschieden: Im Falcon und STE-kompatiblen-Planemodus: ||8 Worte * 16 Pixel | | ||------------------ + 2| * Pixeltaktl„nge| || Planeanzahl | | HDE-Offset = int|-----------------------------------------| | Vorteiler | Im TrueColor-Modus: HDE-Offset = 0 Bei der Berechnung von HDB/HDE ist zu beachten, daž man die Anzahl der horizontalen Pixel, ausgenommen im TrueColor-Mode, nicht beliebig einstellen kann. Nach folgender Formel kann man die Pixelschritte errechnen: 8 Worte * 16 Pixel Horizontale Pixelschritte = ------------------ Planeanzahl Im TrueColor-Mode ist eine Feineinstellung von 1 Pixel m”glich. Im Planemodus fhrt eine falsche Programmierung von HDB/HDE zu netten Effekten wie Planeberlagerung oder grafiklose Spalten. Ein Beispiel: Der 2-Farbenmodus erlaubt nur Pixelschritte von 128 Pixel. HDB/HDE mssen also so programmiert werden, daž auf dem Bildschirm ein Vielfaches von 128 Pixel dargestellt wird. Dies auch der Grund warum kein 2 Farben/40 Zeichen-Modus vom Betriebssystem untersttzt wird, da sich 320 nicht durch 128 teilen l„žt. So, nun zur Berechnung von HDB und HDE: Vorweg: man muž sich bei dem Videosystem daran gew”hnen, daž man von Takten und nicht von Pixeln spricht. Die Anzahl Pixel ergibt sich aus dem Takt / Pixeltaktl„nge. Wenn man also einen 32Mhz Takt verwendet und eine Pixeltaktl„nge von 4 verwenden m”chte, so ist die theoretisch m”gl. Pixelanzahl eben 8000000 Pixel. Oft wird das auch als Videobandbreite(8 MHz) bezeichnet. Also wir nehmen einmal an, daž nach 50 Takten mit der Grafikbertragung begonnen werden soll und die Grafikbertragung 1280 Takte lang sein soll. Nun hat man bei einem Pixeltakt von 1,2 oder 4 1280,640 oder 320 Pixel zur Auswahl. Ich w„hle nun einen Pixeltakt von 2 und kann dadurch entschpr. 640 Pixel darstellen. Merken muž man sich jetzt noch den entsprechenden Vorteiler welcher wiederum von der Planes und Komp.-Modus ab. Ich w„hle nun den 16-Farben-Falcon-Modus und MUž somit einen Vorteiler von 2 verwenden da ja die Pixeltaktl„nge und der Vorteiler durch ein und dieselben 2 Bits dar- gestellt werden (s. auch Register $FFFF82C0). Nun berechnet man den HDB-Offset aus(Formel siehe oben). Es ist darauf zu achten, daž man die Formel fr den Falcon-Modus verwendet. Vertikales Zeitverhalten Jeder Bildschirmaufbau setzt sich aus Halbzeilen zusammen. Die Anzahl der Halbzeilen ergibt in Abh„ngigkeit von HHT, der die Dauer einer Halbzeile angibt, die Vertikalfrequenz. Gehen wir von einer Horizontalfrequenz von 15625 Hz aus so sind 312.5 Zeilen oder 625 Halbzeilen notwendig um eine Vertikalfrequenz von 50 Hz zu erzeugen. HHT muž natrlich so eingestellt sein, daž eine Horizontalfrequenz von 15625 Hz erzeugt wird (s.o.). Auch hier werden wieder vom Monitor abh„ngige Angaben ben”tigt: TV/RGB 50Hz TV/RGB 60Hz VGA SM124 - Horizontalfrequenz des Monitors: 15625 Hz 15625 Hz 31467 Hz 35714 Hz - Vertikalfrequenz des Monitors: 50 Hz 59.52 Hz 59.58 Hz 71.43 Hz - L„nge des VSyncimpuls: 0.192 ms 0.192 ms 0.064 ms 0.029 ms - L„nge der oberen Austastlcke: 1.504 ms 0.700 ms 1.008 ms 0.000 ms - L„nge der unteren Austastlcke: 0.384 ms 0.384 ms 0.416 ms 0.000 ms Diese Werte werden ebenfalls vom Betriebssystem verwendet. Der VSyncimpuls sollte nicht ge„ndert und die Au- stastlcken nur geringfgig unterschritten werden. Bemerkenswert ist, daž das Videosystem bei 60 Hz auf ~59.5 Hz programmiert wird. Hier nun die Berechnung der einzelnen Vertikalregister: VFT gibt die Anzahl der Halbzeilen pro VBL an: |Horizontalfrequenz | VFT($82A2) = int|--------------------| * 2 (+ 1) | Vertikalfrequenz | ^^^-wenn nicht im Interlace-Modus Nach VFT richtet sich der Halbzeilenz„hler VFC($82A0), der die einzelnen Halbzeilen bis zu dem Wert von VFT hochz„hlt. VFC wird immer dann erh”ht wenn HHC den Wert von HHT berschritten hat. Erreicht VFC den Wert von VFT, so ist der Bildschirmaufbau beendet und der Z„hler beginnt von vorne. VFT beeinflužt alle nachfolgenden Register. Der Wert von VFT sollte immer ungerade sein, es sei denn der Interlace-Modus wird eingeschaltet. Hier sollten VFT, VDB und VDE immer gerade Werte enthalten. VSS gibt an, ab welcher Halbzeile der VSyncimpuls bis Bildschirmende ausgel”st werden soll: VSS($82AC) = VFT - int|VSync-Zeit in ms * Horizontalfrequenz in Hz * 2| VBB gibt an, ab welcher Halbzeile die untere Austastlcke bis Bildschirmende aktiv werden soll: VBB($82A4) = VFT - int|untere Austastlckenzeit in ms * Horiz.freq. * 2| Ist ein Monochrom-Monitor (z.B. SM124) angeschlossen, so ist VBB ohne Bedeutung und es wird keine Austastlcke erzeugt. VBE gibt an, bis zu welcher Halbzeile von Bildschirmbeginn an, die obere Austastlcke aktiv bleiben soll: VBE($82A6) = int|obere Austastlckenzeit in ms * Horizontalfrequenz * 2| + 1 Ist ein Monochrom-Monitor (z.B. SM124) angeschlossen, so ist VBE ohne Bedeutung und es wird keine Austastlcke erzeugt. Einstellung des Grafikbereiches: VDB gibt an, ab welcher Halbzeile mit der Grafikbertragung begonnen werden soll: VDB($82A8) = Zeilenanzahl * 2 (+ 1) ^^^------- wenn nicht im Interlace-Modus Ist VDB gr”žer als VFT so findet keine Grafikbertragung statt. Ist VDB gr”žer als VDE so findet eine Grafikbertra- gung von VDB bis VFT statt. Das VDE-Register wird dann ignoriert. VDE gibt an, ab welcher Halbzeile mit der Grafikbertragung aufgeh”rt werden soll: VDE($82AA) = Zeilenanzahl * 2 (+ 1) ^^^------ wenn nicht im Interlace-Modus Ist VDE kleiner VDB so findet keine Grafikbertragung statt. Ist VDE kleiner als VDB so findet eine Grafikbertra- gung von VDE bis VFT statt. Das VDB-Register wird dann ignoriert Die Anzahl der Grafikzeilen errechnet sich aus der Differenz von VDB und VDE geteilt durch zwei (da Halbzeilen). Nebens„chlichkeiten: Das Videosystem liest im Burstmodus 17 32-Bit-Datenworte in den VIDEL-FIFOPuffer. Pro Burstzyklus ben”tigt das System 4 Taktzyklen. Beim Setzen der Video-Mode-Control-Bits werden beim Beschreiben von $FF8260 die Register $FF8210, $ff82C2 automatisch durch das Videosystem so gesetzt, daž eine ST-komp. Aufl”sung erzeugt wird. (s. auch Reg. $FF8260). Es kommt vor allem darauf an, welchen Monitortyp man in den Video-Control-Bits setzt. Dementsprechend werden die Register ver„ndert. Der Wechsel in den 2-Farbenmodus scheint das Videosystem durcheinander zu bringen. So wird oft, obwohl alle Register korrekt gesetzt werden, der sichtbare Grafikbereich verschoben oder abgekappt. --------------------------------------------------------------------------------------------------------------------------------------------------------------- Standardwerte des Videosystems im RGB/TV-Modus, 50 Hz: VIDEOREGISTER DES FALCON $82xx.w: (Alles hexadezimaler Wortzugriff!) MODUS | 10| 60| 66| 82| 84| 86| 88| 8A| 8C| A2| A4| A6| A8| AA| AC| C0| C2 --------------------------------------------------------------------------- ST-LOW: 050 000 000 03E 032 009 23F 01C 034 271 265 02F 06F 1FF 26B 081 000 ST-MED: 050 010 000 03E 032 009 23F 01C 034 271 265 02F 06F 1FF 26B 081 004 ST-HIG: 028 0x0 400 1FE 199 050 3EF 0A0 1B2 270 265 02F 07E 20E 26B 181 006 2/80: 028 0x0 400 1FE 199 050 3EF 0A0 1B2 271 265 02F 07F 20F 26B 181 004 4/40: 028 010 000 03E 030 008 239 012 034 271 265 02F 07F 20F 26B 181 000 4/80: 050 010 000 03E 030 008 002 020 034 271 265 02F 07F 20F 26B 181 004 16/40: 050 0x0 000 0FE 0CB 027 00C 06D 0D8 271 265 02F 07F 20F 26B 181 000 16/80: 0A0 0x0 000 1FE 199 050 04D 0FE 1B2 271 265 02F 07F 20F 26B 181 004 256/40: 0A0 0x0 010 0FE 0CB 027 01C 07D 0D8 271 265 02F 07F 20F 26B 181 000 256/80: 140 0x0 010 1FE 199 050 05D 10E 1B2 271 265 02F 07F 20F 26B 181 004 TRU/40: 140 0x0 100 0FE 0CB 027 02E 08F 0D8 271 265 02F 07F 20F 26B 181 000 TRU/80: 280 0x0 100 1FE 199 050 071 122 1B2 271 265 02F 07F 20F 26B 181 004 + INTERLACE: -1 -1 -1 +2 MODUS: Kompatibilit„tsmodus oder Farben/Spalten. (Achtung! Die ST-High Werte sind bei RGB schon im Interlacemodus!) --------------------------------------------------------------------------------------------------------------------------------------------------------------- Standardwerte des Videosystems im VGA-Modus, 60 Hz (beim Falcon 59.58 Hz): (Zeilenverdopplung eingeschaltet(Double Scan)) VIDEOREGISTER DES FALCON $82xx.w: (Alles hexadezimaler Wortzugriff!) MODUS | 10| 60| 66| 82| 84| 86| 88| 8A| 8C| A2| A4| A6| A8| AA| AC| C0| C2 --------------------------------------------------------------------------- ST-LOW: 050 000 000 017 012 001 20E 00D 011 419 3AF 08F 08F 3AF 415 186 005 ST-MED: 050 010 000 017 012 001 20E 00D 011 419 3AF 08F 08F 3AF 415 186 009 ST-HIG: 028 0x0 400 0C6 08D 015 273 050 096 419 3AF 08F 08F 3AF 415 186 008 2/80: 028 0x0 400 0C6 08D 015 273 050 096 419 3FF 03F 03F 3FF 415 186 009 4/40: 028 010 000 017 012 001 20A 009 011 419 3FF 03F 03F 3FF 415 186 005 4/80: 050 010 000 017 012 001 20E 00D 011 419 3FF 03F 03F 3FF 415 186 009 16/40: 050 0x0 000 0C6 08D 015 28A 06B 096 419 3FF 03F 03F 3FF 415 186 005 16/80: 0A0 0x0 000 0C6 08D 015 2A3 07C 096 419 3FF 03F 03F 3FF 415 186 009 256/40: 0A0 0x0 010 0C6 08D 015 29A 07B 096 419 3FF 03F 03F 3FF 415 186 005 256/80: 140 0x0 010 0C6 08D 015 2AB 084 096 419 3FF 03F 03F 3FF 415 186 009 TRU/40: 140 0x0 100 0C6 08D 015 2AC 091 096 419 3FF 03F 03F 3FF 415 186 005 TRU/80: (offiziell nicht m”glich) ZEILENVERDOPPLUNG AUS: -1 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Standardwerte des Videosystems auf einem SM 124, 71 Hz: VIDEOREGISTER DES FALCON $82xx.w: (Alles hexadezimaler Wortzugriff!) MODUS | 10| 60| 66| 82| 84| 86| 88| 8A| 8C| A2| A4| A6| A8| AA| AC| C0| C2 --------------------------------------------------------------------------- ST-HIG: 028 020 000 01A 000 000 20F 00C 014 3E9 000 000 043 363 3E7 080 008 ************************************************************************** Ende der Liste **************************************************************************