Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:os:kassetteninterface [2013/05/30 16:44] – angelegt volkerpz9001:software:os:kassetteninterface [2020/10/09 09:43] (aktuell) – [Auszug aus OS] volkerp
Zeile 1: Zeile 1:
 ====== Kassetteninterface ====== ====== Kassetteninterface ======
 +
 +===== Physisches Aufzeichnungsformat =====
  
 Zur Aufzeichnung der Information wird ein Frequenzmodulationsverfahren  benutzt.  Dabei  existieren  drei  Zustände:  Vorton (Trennzeichen), logisch  "0"  und  logisch  "1" Jeder  Zustand  wird  durch  eine Zur Aufzeichnung der Information wird ein Frequenzmodulationsverfahren  benutzt.  Dabei  existieren  drei  Zustände:  Vorton (Trennzeichen), logisch  "0"  und  logisch  "1" Jeder  Zustand  wird  durch  eine
 Periode mit bestimmter Dauer charakterisiert. Periode mit bestimmter Dauer charakterisiert.
 +
 +Die Übertragungsrate beträgt etwa 1800 Baud. 
  
 ^ Typ ^ Frequenz ^ Periode ^ CTC-Konstante ^ ^ Typ ^ Frequenz ^ Periode ^ CTC-Konstante ^
Zeile 10: Zeile 14:
  
 Zeitkonstantenberechnung: 2,4576 Mhz (Takt) / 16 (CTC-Vorteiler) / 2 (DL074) / 600 Hz = 80h Zeitkonstantenberechnung: 2,4576 Mhz (Takt) / 16 (CTC-Vorteiler) / 2 (DL074) / 600 Hz = 80h
 +
 +Jedes Zeichen wird durch eine volle Periode aufgezeichnet.
 +
 +===== Logisches Aufzeichnungsformat =====
  
 Die Übertragung erfolgt blockweise, jeder Block hat 128 Bytes. Die Übertragung erfolgt blockweise, jeder Block hat 128 Bytes.
Zeile 15: Zeile 23:
 eines Blockes werden die Bytes durch kurze Vortöne getrennt. eines Blockes werden die Bytes durch kurze Vortöne getrennt.
 Die  Organisation  der  Blöcke  sowie  die  Umwandlung  der  Information  in  Perioden  bestimmter  Dauer  wird  softwaremäßig  realisiert.   Die  Organisation  der  Blöcke  sowie  die  Umwandlung  der  Information  in  Perioden  bestimmter  Dauer  wird  softwaremäßig  realisiert.  
 +
 +a) Dateiaufbau:
 +
 +Block 0 Dateikopf\\
 +Inhalt ist der komplette FCB (siehe 2.3.4.)\\
 +Block 1, ..., n Daten der Datei\\
 +Block FFH letzter Datenblock der Datei\\
 +Endeblock
 +
 +<ditaa noedgesep>
 ++---------+---------+---------+     +---------+----------+
 +| Block 0 | Block 1 | Block 2 | ... | Block n | Block FF |
 ++---------+---------+---------+     +---------+----------+
 +</ditaa>
 +
 +
 +b) Blockaufbau:
 +
 +Vorton Folge von 1 - Bit mit abschließendem Trennzeichen\\
 +Block 0: 6000\\
 +sonst 160\\
 +Blocknummer 1 Byte\\
 +Daten 128 Bytes\\
 +Prüfsumme 1 Byte (durch Addition aller Datenbytes gewonnen)
 +
 +
 +<ditaa noedgesep>
 ++--------+-------------+--------------+------------+
 +| Vorton | Blocknummer | Datenbereich | Pruefsumme |
 ++--------+-------------+--------------+------------+
 +</ditaa>
 +
 +
 +c) Byteaufbau:
 +
 +Information 8 Zeichen\\
 +Trennzeichen 1 Zeichen
 +
 +===== Hardware =====
 +
  
 Bei  der  **Ausgabe ** jedes  Bits  wird  der  Kanal  0  des  CTC Bei  der  **Ausgabe ** jedes  Bits  wird  der  Kanal  0  des  CTC
Zeile 45: Zeile 93:
 {{:z9001:software:z9001_kassetteninterface_in.gif?600|}} {{:z9001:software:z9001_kassetteninterface_in.gif?600|}}
  
-{{:z9001:software:z9001_kassetteninterface1.gif?300|}} {{:z9001:software:z9001_kassetteninterface2.gif?300|}}\\+{{:z9001:software:z9001_kassetteninterface1.gif|}} {{:z9001:software:z9001_kassetteninterface2.gif|}}\\
 Audiosignal Eingang und hinter OPV, rechts Nulldurchgangsimpulse an Monoflop 22A/4 Audiosignal Eingang und hinter OPV, rechts Nulldurchgangsimpulse an Monoflop 22A/4
 +
 +
 +====== Kassettenformate ======
 +
 +Das Kassetten-Magnetband-Interface des Z9001, ein Diphase-Verfahren, wurde von Dr. Ulrich Kordon entwickelt, als ausreichend sicher gefunden und auf alle DDR-HC übernommen.
 +
 +Deshalb benutzt der Z9001 im Prinzip das gleiche Kassettenaufzeichnungsformat wie auch die Mühlhauser Rechner HC900 und Nachfolger KC85/2..KC85/4. Aber - leider nur im Prinzip:
 +
 +  * Systemprogramme beginnen mit dem Block Nummer 0 und haben als Endekennung den Block Nummer 255 (0FFh). Beim HC900 beginnen Systemprogramme mit dem Block Nummer 1. Das übersehen leider viele Tools und Emulatoren.
 +  * Der HC900 interpretiert den Kopfblock anders: Hier können bis zu 9 Parameter genutzt werden; beim Z9001 sind es 3 (AADR, EADR, SADR).
 +  * Basic-Programme beginnen mit dem Block Nummer 1.
 +  * Ab dem KC 87.2x werden Basic-Programme mit einem willkürlichen Block Nummer 0 begonnen, dann folgt das BASIC-Programm, dann folgt manchmal noch ein willkürlicher Block Nummer 255. Diese Außenblöcke stören nur und können gefahrlos entfernt werden.
 +  * Es gibt Programme, die nicht die Systemroutinen zum Speichern nutzen und die aufeinanderfolgende Blocknummerierung durcheinanderwirbeln. Hierzu gehören z.B. relokatible Programme wie OS-SAVE.
 +
 +**Basic-Programme**
 +
 +Basic-Programme haben am Anfang 3x dasselbe Zeichen: 0D3h für Basic-Programme, 0D4h für Basic-Data-Feld-Dateien, 0D5h für ASCII-Listings. Wurde ein SAVE-Schutz mittels POKE 861,<>0 eingeschaltet, erhalten die BASIC-Programme die Codenummern 0D7h, 0D8h bzw. 0D9h. Dann folgen 8 Zeichen für den Dateinamen (mit Leerzeichen aufgefüllt).
 +
 +Neben dem Standardformat zum Speichern aus Kassette gibt es eine Reihe weiterer Formate:
 +
 +  * BASICODE
 +  * [[z9001:software:turbo|verschiedene TURBO-Lader]]
 +  * ...
 +
 +====== Implementierung ======
 +
 +Das Betriebssystem stellt keine Funktion zum Speichern eines kompletten Speicherbereichs bereit. Diese muss als Programm nachgeladen werden (OS-SAVE, ZM30). Es gibt nur die drei Systemrufe (via CALL 5) zum Öffnen für Kassette schreiben, Schreiben eines BLocks, Schließen.
 +
 +Auszug aus dem Betriebssystem [[z9001:software:os:os12|]]. Die einzelnen Puzzlestücke aus dem OS sind hier zusammengefasst und erweitert kommentiert. 
 +
 +<code>
 +       1/       0 :                      page 0
 +       2/       0 :                     
 +       3/       0 :                     ; Z9001 Kassetteninterface, Auszug aus os.asm
 +       4/       0 :                     
 +       5/       0 :                      ;PN MONITOR 16.08.85
 +       6/       0 :                     ;
 +       7/       0 :                     ;MONITOR FUER SERIENGERAET 1985
 +       8/       0 :                     ;V 01.02.
 +       9/       0 :                     ;
 +      10/       0 :                     ; TITL ' R0BOTRON  Z  9001  -  MONITOR '
 +      11/       0 :                     ;
 +      12/       0 :                      cpu z80
 +      13/    F000 :                      ORG 0F000H
 +      14/    F000 :                     ;
 +      15/    F000 :                     ;*******************************************************************
 +      16/    F000 :                     ;                                                                *
 +      17/    F000 :                     ;* MONITOR - D E F I N I T I O N E N                          *
 +      18/    F000 :                     ;                                                                *
 +      19/    F000 :                     ;*******************************************************************
 +      20/    F000 :                     ;
 +      21/    F000 : =0DH                BCSV: EQU 0DH ;REGISTER FUER BC
 +      22/    F000 : =0FH                ASV: EQU 0FH ;REGISTER FUER A
 +      23/    F000 : =1BH                DMA: EQU 1BH ;ZEIGER AUF KASSETTENPUFFER
 +      24/    F000 : =36H                EOR: EQU 36H ;ZEIGER AUF LOG. RAM - ENDE
 +      25/    F000 : =5CH                FCB: EQU 5CH ;FILE-CONTROL-BLOCK
 +      26/    F000 :                     ;FCB: BER 36 ;Dateikontrollblock
 +      27/    F000 :                     ; FNAME: EQU FCB ;Dateiname 8 Zeichen
 +      28/    F000 :                     ; FTYP: EQU FCB+8 ;Dateityp 3 Zeichen
 +      29/    F000 :                     ; PSUM: EQU FCB+13 ;Prüfsumme eines Datenblockes
 +      30/    F000 :                     ; ARB: EQU FCB+14 ;Hilfszelle für Kassettentreiber
 +      31/    F000 :                     ; BLNR: EQU FCB+15 ;Blocknummer
 +      32/    F000 :                     ; LBLNR: EQU FCB+16 ;gesuchte Blocknummer bei Lesen
 +      33/    F000 :                     ; AADR EQU FCB+17 ;Dateianfangsadresse
 +      34/    F000 :                     ; EADR EQU FCB+19 ;Dateiendeadresse
 +      35/    F000 :                     ; SADR EQU FCB+21 ;Startadresse, wenn Datei ein Maschinencodeprogramm ist
 +      36/    F000 :                     ; SBY: EQU FCB+23 ;Schutzbyte ;0 nicht geschützt
 +      37/    F000 :                     ;     ;1 System nach Laden der Datei vor WRITE geschützt
 +      38/    F000 : =69H                PSUM: EQU 69H ;PRUEFSUMME
 +      39/    F000 : =6AH                ARB: EQU 6AH ;ARBEITSZELLE
 +      40/    F000 : =6BH                BLNR: EQU 6BH ;BLOCKNUMMER
 +      41/    F000 : =6CH                LBLNR: EQU 6CH ;ZU LESENDE BLOCKNUMMER
 +      42/    F000 : =6DH                AADR: EQU 6DH ;ANFANGSADRESSE
 +      43/    F000 : =6FH                EADR: EQU 6FH ;ENDADRESSE
 +      44/    F000 : =71H                START: EQU 71H ;STARTADRESSE
 +      45/    F000 :                     ;
 +      46/    F000 : =80H                STDMA: EQU 80H ;STANDARDPUFFER FUER KASSETTE
 +      47/    F000 : =0EFC0H             MAPPI: EQU 0F000H-64 ;SYSTEMBYTE
 +      48/    F000 :                     ;
 +      49/    F000 :                     ; System-PIO ist PIO1
 +      50/    F000 : =88H                DPIO1A: equ 88H ;Daten Kanal A Video
 +      51/    F000 : =8AH                SPIO1A: equ 8aH ;Steuerung Kanal A
 +      52/    F000 : =80H                CTC0: EQU 80H
 +      53/    F000 : =82H                CTC2: EQU 82H
 +      54/    F000 :                     
 +      55/    F000 :                     ; Systemaufrufe
 +      56/    F000 : =0F2FEH             OCRLF equ 0F2FEh ; Ausgabe CR+LF
 +      57/    F000 : =0F310H             OSPAC equ 0F310h ; Ausgabe Leerzeichen
 +      58/    F000 :                     
 +      59/    F000 : =0F5A3H             REA equ 0F5A3h ; AUSGABE FEHLERCODE A
 +      60/    F000 : =0F593H             REQU equ 0F593h ; Ausgabe String 'start tape' , warten auf ENTER
 +      61/    F000 :                      ; setzt HL = (DMA)
 +      62/    F000 :                     
 +      63/    F000 : =0F23BH             CHRAM equ 0F23Bh ;LOGISCHER SPEICHERTEST
 +      64/    F000 : =0FAE3H             INITA equ 0FAE3h ;TASTATUR INITIALISIERN
 +      65/    F000 :                     
 +      66/    F000 :                     
 +      67/    F000 :                     
 +      68/    F000 :                     ;noramchk equ 1 ; kein Schutz (MAPPI), kein Test auf RAM
 +      69/    F000 :                     
 +      70/    F000 :                     
 +      71/    F000 :                     ;
 +      72/    F000 :                     ;*******************************************************************
 +      73/    F000 :                     ;* C L O A D     KOMMANDO                                   *
 +      74/    F000 :                     ;*******************************************************************
 +      75/    F000 :                     ;
 +      76/    F000 :                     ; Funktion:    Laden eines Programms
 +      77/    F000 :                     ;
 +      78/    F000 :                     LOAD: ;prep fcb ;FCB muss korrekt gefüllt sein
 +      79/    F000 :                      ;...
 +      80/    F000 : CD 24 F0            LOAD4: CALL OPENR
 +      81/    F003 : 30 09                JR NC, LOAD5 ;KEIN FEHLER
 +      82/    F005 : B7                  OR A
 +      83/    F006 : 37                  SCF
 +      84/    F007 : C8                  RET Z ;STOP GEGEBEN
 +      85/    F008 : CD A3 F5            CALL REA ;AUSG. FEHLERMELD. WARTEN REAKT.
 +      86/    F00B : D8                  RET C ;STOP GEGEBEN
 +      87/    F00C : 18 F2                JR LOAD4 ;WIEDERHOLUNG
 +      88/    F00E : 2A 6D 00            LOAD5: LD HL,(AADR) ;DATEIANFANGSADRESSE
 +      89/    F011 : 22 1B 00            LD (DMA),HL ;NACH ADR. KASSETTENPUFFER
 +      90/    F014 : CD 60 F0            LOA55: CALL READ ;LESEN BLOCK
 +      91/    F017 : 30 05                JR NC, LOAD6 ;KEIN FEHLER
 +      92/    F019 : CD A3 F5            CALL REA ;AUSG. FEHLERMELD. WARTEN REAKT.
 +      93/    F01C : D8                  RET C ;STOP GEGEBEN
 +      94/    F01D : AF                  XOR A
 +      95/    F01E : B7                  LOAD6: OR A
 +      96/    F01F : 28 F3                JR Z, LOA55 ;WEITER BIS DATEIENDE LESEN
 +      97/    F021 : C3 FE F2            JP OCRLF
 +      98/    F024 :                     ;
 +      99/    F024 :                     
 +     100/    F024 :                     ;
 +     101/    F024 :                     ;*******************************************************************
 +     102/    F024 :                     ;* BDOS CALL5-Routinen                                             *
 +     103/    F024 :                     ;*******************************************************************
 +     104/    F024 :                     ;
 +     105/    F024 :                     ;OPEN FUER KASSETTE LESEN
 +     106/    F024 :                     ;
 +     107/    F024 : CD 93 F5            OPENR: CALL REQU ;AUSGABE STARTMELDUNG
 +     108/    F027 :                      ; HL := (DMA)
 +     109/    F027 : 3C                  INC A
 +     110/    F028 : D8                  RET C ;STOP GEGEBEN
 +     111/    F029 : E5                  PUSH HL
 +     112/    F02A : AF                  XOR A ;BLOCKNUMMER 0 LESEN
 +     113/    F02B : 32 6C 00            LD (LBLNR),A
 +     114/    F02E : CD 60 F0            CALL READ ;BLOCKLESEN
 +     115/    F031 : E1                  POP HL
 +     116/    F032 : 22 1B 00            LD (DMA),HL ;PUFFERADR. ZURUECKSETZEN
 +     117/    F035 : D8                  RET C ;LESEFEHLER
 +     118/    F036 : E5                  PUSH HL
 +     119/    F037 : 11 11 00            LD DE,17 ;OFFS. AADR (= AADR-FCB)
 +     120/    F03A : 19                  ADD HL,DE
 +     121/    F03B : 11 6D 00            LD DE,AADR
 +     122/    F03E : 01 08 00            LD BC,8
 +     123/    F041 : ED B0                LDIR ;DATEIPARAMETER UEBERNEHMEN
 +     124/    F043 : D1                  POP DE
 +     125/    F044 : 21 5C 00            LD HL,FCB
 +     126/    F047 : 06 0B                LD B,11
 +     127/    F049 : CD 24 F1            CALL CHEC ;NAMENSVERGLEICH
 +     128/    F04C : 3E 0D                LD A,13
 +     129/    F04E : 37                  SCF
 +     130/    F04F : C0                  RET NZ ;FALSCHE DATEI GELESEN
 +     131/    F050 : =>UNDEFINED          ifndef noramchk
 +     132/    F050 : 3A 73 00            LD A,(FCB+23) ;SCHUTZBYTE
 +     133/    F053 : B7                  OR A
 +     134/    F054 : C8                  RET Z ;KEIN SCHUTZ
 +     135/    F055 : 32 C0 EF            LD (MAPPI),A ;SYSTEMSCHUTZ EIN
 +     136/    F058 : =>FALSE              else
 +     137/    F058 :                      XOR A ;A=0, Cy=0
 +     138/    F058 : [131]                endif
 +     139/    F058 : C9                  RET
 +     140/    F059 :                     ;
 +     141/    F059 :                     ;CLOSE FUER KASSETTE LESEN
 +     142/    F059 :                     ;
 +     143/    F059 : 21 6D 00            CLOSR: LD HL,AADR ;ADRESSE DER DATEIPARAMETER
 +     144/    F05C : 22 0D 00            CLR1: LD (BCSV),HL ;UEBERGEBEN
 +     145/    F05F : C9                  RET
 +     146/    F060 :                     ;
 +     147/    F060 :                     ;BLOCKLESEN SEQUENTIELL
 +     148/    F060 :                     ;
 +     149/    F060 : CD 71 F0            READ: CALL RRAND ;BLOCK LESEN
 +     150/    F063 : D8                  RET C ;LESEFEHLER
 +     151/    F064 : 22 1B 00            LD (DMA),HL ;PUFFERADR. UM 128 ERHOEHEN
 +     152/    F067 : 21 6C 00            LD HL,LBLNR
 +     153/    F06A : 34                  INC (HL) ;ZU LESENDE BLOCKNUMMER ERHOEHEN
 +     154/    F06B : F5                  PUSH AF
 +     155/    F06C : CD 10 F3            CALL OSPAC ;AUSGABE LEERZEICHEN
 +     156/    F06F : F1                  POP AF
 +     157/    F070 : C9                  RET
 +     158/    F071 :                     ;
 +     159/    F071 :                     ;BLOCKLESEN
 +     160/    F071 :                     ;
 +     161/    F071 : =>UNDEFINED         RRAND: ifndef noramchk
 +     162/    F071 : 2A 36 00            LD HL,(EOR) ;LOGISCHES RAM - ENDE
 +     163/    F074 : 11 7F 00            LD DE,7FH
 +     164/    F077 : ED 52                SBC HL,DE
 +     165/    F079 : ED 5B 1B 00          LD DE,(DMA) ;PUFFERADRESSE
 +     166/    F07D : CD 1E F1            CALL COMPW ;ADRESSVERGLEICH
 +     167/    F080 : 3E 0A                LD A,10
 +     168/    F082 : D8                  RET C ;BLOCK UEBERSCHREIBT RAM - ENDE
 +     169/    F083 : EB                  EX DE,HL
 +     170/    F084 : CD 3B F2            CALL CHRAM ;LOGISCHER SPEICHERTEST
 +     171/    F087 : 3E 09                LD A,9
 +     172/    F089 : 30 1D                JR NC, ERAND ;BEREICH GESCHUETZT/ROM
 +     173/    F08B : [161]                endif
 +     174/    F08B : F5                  RR1: PUSH AF
 +     175/    F08C : F1                  RR2: POP AF
 +     176/    F08D : CD D9 F1            CALL MAREK ;EINGABE BLOCK
 +     177/    F090 : CD E3 FA            CALL INITA ;TASTATUR INITIALISIEREN
 +     178/    F093 : F5                  PUSH AF
 +     179/    F094 : E5                  PUSH HL
 +     180/    F095 : 21 6C 00            LD HL,LBLNR ;ZU LESENDE BLOCKNUMMER
 +     181/    F098 : 3A 6B 00            LD A,(BLNR) ;GELESENE BLOCKNUMMER
 +     182/    F09B : BE                  CP A, (HL)
 +     183/    F09C : E1                  POP HL
 +     184/    F09D : 38 ED                JR C, RR2 ;BLOCKNUMMER NOCH NICHT ERREICHT
 +     185/    F09F : 28 09                JR Z, RROK ;GEFUNDEN
 +     186/    F0A1 : FE FF                CP A, 0FFH
 +     187/    F0A3 : 28 05                JR Z, RROK ;ENDEBLOCK GELESEN
 +     188/    F0A5 : F1                  POP AF
 +     189/    F0A6 : 3E 0B                LD A,11 ;BLOCKNUMMER ZU GROSS
 +     190/    F0A8 : 37                  ERAND: SCF
 +     191/    F0A9 : C9                  RET
 +     192/    F0AA : F1                  RROK: POP AF
 +     193/    F0AB : 3E 0C                LD A,12
 +     194/    F0AD : D8                  RET C ;LESEFEHLER
 +     195/    F0AE : 3A 6B 00            LD A,(BLNR) ;RUECKGABE EOF - KENNZEICHEN
 +     196/    F0B1 : 3C                  INC A
 +     197/    F0B2 : 3E 00                LD A,0
 +     198/    F0B4 : 20 01                JR NZ, RROK1
 +     199/    F0B6 : 3C                  INC A
 +     200/    F0B7 : 32 0F 00            RROK1: LD (ASV),A ;1 WENN ENDEBLOCK, SONST 0
 +     201/    F0BA : C9                  RET
 +     202/    F0BB :                     ;
 +     203/    F0BB :                     ;OPEN FUER KASSETTE SCHREIBEN
 +     204/    F0BB :                     ;
 +     205/    F0BB : CD 93 F5            OPENW: CALL REQU ;AUSGABE STARTMELDUNG
 +     206/    F0BE :                      ;HL := (DMA)
 +     207/    F0BE : 3C                  INC A
 +     208/    F0BF : D8                  RET C ;STOP GEGEBEN
 +     209/    F0C0 : E5                  PUSH HL
 +     210/    F0C1 : 21 5C 00            LD HL,FCB
 +     211/    F0C4 : 22 1B 00            LD (DMA),HL ;SCHREIBEN DES FCB
 +     212/    F0C7 : 3E 00                LD A,0
 +     213/    F0C9 : 32 73 00            LD (FCB+23),A ;KEIN SCHUTZ
 +     214/    F0CC : 01 70 17            LD BC,1770H ;LANGER VORTON
 +     215/    F0CF : AF                  XOR A
 +     216/    F0D0 : 32 6B 00            LD (BLNR),A ;BLOCKNUMMER 0
 +     217/    F0D3 : 3E 02                LD A,2
 +     218/    F0D5 : 32 6C 00            LD (LBLNR),A
 +     219/    F0D8 : CD E8 F0            CALL WRIT1 ;SCHREIBEN BLOCK
 +     220/    F0DB : E1                  POP HL
 +     221/    F0DC : 22 1B 00            LD (DMA),HL ;PUFFERADR. AUF AUSGANGSWERT
 +     222/    F0DF : C9                  RET
 +     223/    F0E0 :                     ;
 +     224/    F0E0 :                     ;CLOSE FUER KASSETTE SCHREIBEN
 +     225/    F0E0 :                     ;
 +     226/    F0E0 : 3E FF               CLOSW: LD A,0FFH
 +     227/    F0E2 : 32 6B 00            LD (BLNR),A ;BLOCKNUMMER FFH
 +     228/    F0E5 :                     ;
 +     229/    F0E5 :                     ;BLOCKSCHREIBEN SEQUENTIELL
 +     230/    F0E5 :                     ;
 +     231/    F0E5 : 01 A0 00            WRITE: LD BC,0A0H ;KURZER VORTON
 +     232/    F0E8 : ED 5B 1B 00         WRIT1: LD DE,(DMA) ;PUFFERADRESSE
 +     233/    F0EC : =>UNDEFINED          ifndef noramchk
 +     234/    F0EC : 3A C0 EF            LD A,(MAPPI)
 +     235/    F0EF : B7                  OR A
 +     236/    F0F0 : 28 04                JR Z, WRIT2 ;KEIN SCHUTZ VOR SCHREIBEN
 +     237/    F0F2 : 3E 09               WERR: LD A,9 ;SCHREIBSCHUTZ
 +     238/    F0F4 : 37                  WERR1: SCF ;FEHLERAUSGANG
 +     239/    F0F5 : C9                  RET
 +     240/    F0F6 : 2A 36 00            WRIT2: LD HL,(EOR) ;LOGISCHES RAM - ENDE
 +     241/    F0F9 : D5                  PUSH DE
 +     242/    F0FA : 11 7F 00            LD DE,7FH
 +     243/    F0FD : ED 52                SBC HL,DE
 +     244/    F0FF : D1                  POP DE
 +     245/    F100 : CD 1E F1            CALL COMPW ;ADRESSVERGLEICH
 +     246/    F103 : 3E 0A                LD A,10
 +     247/    F105 : 38 ED                JR C, WERR1 ;BLOCK LIEGT HINTER RAM - ENDE
 +     248/    F107 : EB                  EX DE,HL
 +     249/    F108 : CD 3B F2            CALL CHRAM ;LOGISCHER SPEICHERTEST
 +     250/    F10B : 30 E5                JR NC, WERR ;BEREICH IST GESCHUETZT/ROM
 +     251/    F10D : [233]                endif
 +     252/    F10D : CD 5B F1            CALL KARAM ;AUSGABE BLOCK
 +     253/    F110 : 22 1B 00            LD (DMA),HL ;PUFFERADR. UM 128 ERHOEHEN
 +     254/    F113 : 21 6B 00            LD HL,BLNR
 +     255/    F116 : 7E                  LD A,(HL)
 +     256/    F117 : 32 0F 00            LD (ASV),A ;BLOCKNUMMER ZURUECKGEBEN
 +     257/    F11A : 34                  INC (HL) ;BLOCKNUMMER ERHOEHEN
 +     258/    F11B : C3 E3 FA            JP INITA ;TASTATUR INITIALISIERN
 +     259/    F11E :                     
 +     260/    F11E :                     ;Hilfsroutinen
 +     261/    F11E :                     
 +     262/    F11E :                     ;ADRESSVERGLEICH HL, DE
 +     263/    F11E : E5                  COMPW: PUSH HL
 +     264/    F11F : B7                  OR A
 +     265/    F120 : ED 52                SBC HL,DE
 +     266/    F122 : E1                  POP HL
 +     267/    F123 : C9                  RET
 +     268/    F124 :                     ;
 +     269/    F124 :                     ;ZEICHENKETTENVERGLEICH
 +     270/    F124 :                     ; in: HL Adresse String 1
 +     271/    F124 :                     ; DE Adresse String 2
 +     272/    F124 :                     ; B Anzahl zu vergleichender Zeichen
 +     273/    F124 :                     ; ret: Z=1 -> String 1 = String 2
 +     274/    F124 :                     ; DE unverändert
 +     275/    F124 :                     ; HL Wort vor String 2
 +     276/    F124 :                     ;
 +     277/    F124 : E5                  CHEC: PUSH HL ;ADR. 1. ZEICHENKETTE
 +     278/    F125 : D5                  PUSH DE ;ADR. 2. ZEICHENKETTE
 +     279/    F126 : EB                  EX DE,HL
 +     280/    F127 : 1A                  CHC0: LD A,(DE)
 +     281/    F128 : FE 20                CP A, 20H
 +     282/    F12A : 28 04                JR Z, CH0
 +     283/    F12C : FE 40                CP A, 40H
 +     284/    F12E : 38 02                JR C, CHC01
 +     285/    F130 : E6 DF               CH0: AND A, 0DFH ;NUR GROSSBUCHSTABEN
 +     286/    F132 : BE                  CHC01: CP A, (HL)
 +     287/    F133 : 13                  INC DE
 +     288/    F134 : 23                  INC HL
 +     289/    F135 : 20 0C                JR NZ, CHC1
 +     290/    F137 : 10 EE                DJNZ CHC0 ;(B)=ANZAHL ZEICHEN
 +     291/    F139 : D1                  POP DE
 +     292/    F13A : D1                  POP DE ;ADR. 1. ZEICHENKETTE
 +     293/    F13B : 6B                  LD L,E
 +     294/    F13C : 62                  LD H,D
 +     295/    F13D : 2B                  DEC HL
 +     296/    F13E : 7E                  LD A,(HL)
 +     297/    F13F : 2B                  DEC HL
 +     298/    F140 : 6E                  LD L,(HL)
 +     299/    F141 : 67                  LD H,A ;(HL)=WORT VOR 1. ZEICHENKETTE
 +     300/    F142 : C9                  RET
 +     301/    F143 : D1                  CHC1: POP DE
 +     302/    F144 : E1                  POP HL
 +     303/    F145 : C9                  RET
 +     304/    F146 :                     ;
 +     305/    F146 :                     
 +     306/    F146 :                     ;
 +     307/    F146 :                     ;
 +     308/    F146 :                     ;*******************************************************************
 +     309/    F146 :                     ;                                                                *
 +     310/    F146 :                     ;* O P E R A T I N G  -  S Y S T E M                          *
 +     311/    F146 :                     ;                                                                *
 +     312/    F146 :                     ;*******************************************************************
 +     313/    F146 :                     
 +     314/    F146 :                     ; HARDWARE
 +     315/    F146 :                     
 +     316/    F146 :                     ;*******************************************************************
 +     317/    F146 :                     ; Bei der Ausgabe jedes Bits wird der Kanal 0 des CTC initialisiert. Der Ausgang
 +     318/    F146 :                     ; dieses Kanals steuert den Takteingang eines D-Flip-Flops, welches aus dem CTC-
 +     319/    F146 :                     ; Signal einen Rechteckimpuls formt. Die Flanken dieses Impulses werden durch eine
 +     320/    F146 :                     ; RC-Kombination abgeschliffen. Der nachfolgende Spannungsteiler verringert den
 +     321/    F146 :                     ; Pegel des Ausgabesignals. Dieses Signal wird dann über die Diodenbuchse X5 dem
 +     322/    F146 :                     ; Kassettengerät zugeführt.
 +     323/    F146 :                     ; 
 +     324/    F146 :                     ; Beim Lesen vom Kassettengerät wird das Signal über ein Filter zu einem
 +     325/    F146 :                     ; Operationsverstärker geführt, der das Signal in einen Rechteckimpuls umformt.
 +     326/    F146 :                     ; Eine Verzögerungskette liefert bei jedem Flankenwechsel einen kurzen Impuls,
 +     327/    F146 :                     ; welches über den Eingang ASTB der PIO1 einen Interrupt erzeugt. Softwaremäßig
 +     328/    F146 :                     ; wird jetzt die Zeitdauer zwischen den PIO-Interrupts gemessen und der ermittelte
 +     329/    F146 :                     ; Wert den entsprechenden Zuständen logisch "0", "1" oder Vorton zugeordnet.
 +     330/    F146 :                     ;*******************************************************************
 +     331/    F146 :                     ;
 +     332/    F146 :                     ;INITIALISIERUNG DES COMPUTERS
 +     333/    F146 :                     ;
 +     334/    F146 :                     INIT: ; ...CALL IOST ;INITIALISIEREN STANDARD-E/A
 +     335/    F146 :                     
 +     336/    F146 :                      ;INTERRUPTADRESSEN
 +     337/    F146 : 21 C3 F1            ld hl,IKACT ;KASSETTE SCHREIBEN 
 +     338/    F149 : 22 00 02            ld (200h), hl ;CTC0 200h
 +     339/    F14C : 21 3A F2            ld hl,IKEP ;KASSETTE LESEN
 +     340/    F14F : 22 0A 02            ld (20Ah), hl ;SPIOA 20Ah
 +     341/    F152 :                     
 +     342/    F152 : C9                  ret
 +     343/    F153 :                     
 +     344/    F153 :                     WARM:
 +     345/    F153 :                      ;...CALL INICT ;INITIALISIERUNG CTC
 +     346/    F153 :                     
 +     347/    F153 : 3E 03                LD A,3 ;Steuerwort CTC: Reset
 +     348/    F155 : D3 80                OUT CTC0, A
 +     349/    F157 : AF                  XOR A
 +     350/    F158 : D3 80                OUT CTC0, A ;INTERRUPT-VEKTOR = 00h
 +     351/    F15A :                     
 +     352/    F15A : C9                  RET
 +     353/    F15B :                     
 +     354/    F15B :                     ;
 +     355/    F15B :                     ;*******************************************************************
 +     356/    F15B :                     ;* KASSETTEN - E/A                                            *
 +     357/    F15B :                     ;*******************************************************************
 +     358/    F15B :                     ;
 +     359/    F15B :                     ;SCHREIBEN EINES BLOCKES
 +     360/    F15B :                     ;
 +     361/    F15B : F3                  KARAM: DI
 +     362/    F15C : AF                  XOR A
 +     363/    F15D : 32 69 00            LD (PSUM),A
 +     364/    F160 :                      ;CALL INIC1 ;Uhr aus
 +     365/    F160 :                      ;OUT SPIOB, A ;TASTATUR AUS (A ist 3)
 +     366/    F160 : CD 8D F1            CALL INIVT ;VORTON INIT.
 +     367/    F163 : CD B1 F1            KARA1: CALL AUS1 ;VORTON AUSGEBEN
 +     368/    F166 : ED A1                CPI
 +     369/    F168 : EA 63 F1            JP PE,KARA1 ;BC MAL
 +     370/    F16B : CD A9 F1            CALL AUST ;TRENNZEICHEN
 +     371/    F16E : 3A 6B 00            LD A,(BLNR)
 +     372/    F171 : CD 98 F1            CALL KAUBT ;BLOCKNUMMER AUSGEBEN
 +     373/    F174 : 2A 1B 00            LD HL,(DMA) ;BLOCKADRESSE
 +     374/    F177 : 06 80                LD B,80H ;ANZAHL BYTES
 +     375/    F179 : 7E                  KARA2: LD A,(HL)
 +     376/    F17A : CD 98 F1            CALL KAUBT ;AUSGABE DATENBYTE
 +     377/    F17D : 3A 69 00            LD A,(PSUM)
 +     378/    F180 : 86                  ADD A, (HL) ;NEUE PRUEFSUMME
 +     379/    F181 : 32 69 00            LD (PSUM),A
 +     380/    F184 : 23                  INC HL
 +     381/    F185 : 10 F2                DJNZ KARA2
 +     382/    F187 : CD 98 F1            CALL KAUBT ;PRUEFSUMME AUSGEBEN
 +     383/    F18A : 7A                  LD A,D
 +     384/    F18B : 18 2B                JR DYNST ;LETZTE HALBPERIODE AUSGEBEN
 +     385/    F18D :                     ;
 +     386/    F18D :                     ;VORTON INITIALISIEREN
 +     387/    F18D : 3E 85               INIVT: LD A,85H ;Steuerwort CTC: (EI, Zeitkonstante folgt)
 +     388/    F18F : D3 80                OUT CTC0, A ;CTC0
 +     389/    F191 : 3E 40                LD A,40H ;VORTON 1
 +     390/    F193 : D3 80                OUT CTC0, A ;CTC0 Zeitkonstante: 2,4576 Mhz / 16 / 40h = 2400 Hz
 +     391/    F195 : FB                  EI
 +     392/    F196 : 57                  LD D,A ;LAENGE HALBPERIODE
 +     393/    F197 : C9                  RET
 +     394/    F198 :                     ;
 +     395/    F198 :                     ;SCHREIBEN EINES BYTES
 +     396/    F198 :                     ;in: A Byte
 +     397/    F198 :                     ; D Länge Halbperiode vorheriges Bit
 +     398/    F198 :                     ;ret: D Länge Halbperiode vorheriges Bit
 +     399/    F198 :                     ;
 +     400/    F198 : C5                  KAUBT: PUSH BC
 +     401/    F199 : 4F                  LD C,A
 +     402/    F19A : 06 08                LD B,8
 +     403/    F19C : CB 09               KAUB1: RRC C
 +     404/    F19E : F5                  PUSH AF
 +     405/    F19F : DC B1 F1            CALL C, AUS1 ;1 BIT
 +     406/    F1A2 : F1                  POP AF
 +     407/    F1A3 : D4 AD F1            CALL NC, AUS0 ;0 BIT
 +     408/    F1A6 : 10 F4                DJNZ KAUB1
 +     409/    F1A8 : C1                  POP BC
 +     410/    F1A9 :                     ;
 +     411/    F1A9 : 1E 80               AUST: LD E,80H ;TRENNZEICHEN Zeitkonstante: 2,4576 Mhz / 16 / 80h = 600 Hz
 +     412/    F1AB : 18 06                JR AUS
 +     413/    F1AD : 1E 20               AUS0: LD E,20H ;0 BIT Zeitkonstante: 2,4576 Mhz / 16 / 20h = 1200 Hz
 +     414/    F1AF : 18 02                JR AUS
 +     415/    F1B1 : 1E 40               AUS1: LD E,40H ;1 BIT Zeitkonstante: 2,4576 Mhz / 16 / 40h = 2400 Hz
 +     416/    F1B3 : 7A                  AUS: LD A,D
 +     417/    F1B4 : CD B8 F1            CALL DYNST ;LETZTE HALBPERIODE NOCH AUSGEB.
 +     418/    F1B7 : 7A                  LD A,D ;1. HALBPERIODE NEUES BIT
 +     419/    F1B8 : 32 6A 00            DYNST: LD (ARB),A
 +     420/    F1BB : 3A 6A 00            DY1: LD A,(ARB)
 +     421/    F1BE : B7                  OR A
 +     422/    F1BF : 20 FA                JR NZ, DY1 ;WARTEN BIS FLANKE AUSGEGEBEN
 +     423/    F1C1 : 53                  LD D,E ;LAENGE NEUE HALBPERIODE
 +     424/    F1C2 : C9                  RET
 +     425/    F1C3 :                     ;
 +     426/    F1C3 :                     ;INTERRRUPTROUTINE ZUM SCHREIBEN
 +     427/    F1C3 :                     ;ret: (ARB)=0
 +     428/    F1C3 :                     ;
 +     429/    F1C3 : F5                  IKACT: PUSH AF
 +     430/    F1C4 : 3E 03                LD A,3 ;Steuerwort CTC (Reset)
 +     431/    F1C6 : D3 80                OUT CTC0, A ;CTC0
 +     432/    F1C8 : 3E 85                LD A,85H ;Steuerwort CTC (EI, Zeitkonstante folgt)
 +     433/    F1CA : D3 80                OUT CTC0, A ;CTC0
 +     434/    F1CC : 3A 6A 00            LD A,(ARB) ;Zeitkonstante holen
 +     435/    F1CF : D3 80                OUT CTC0, A ;ZAEHLERWERT ENTSPR. ZEICHEN
 +     436/    F1D1 : AF                  XOR A
 +     437/    F1D2 : 32 6A 00            LD (ARB),A ;Arbeitszelle auf 0 setzen als Fertigmarkierung
 +     438/    F1D5 : F1                  POP AF
 +     439/    F1D6 : FB                  EI
 +     440/    F1D7 : ED 4D                RETI
 +     441/    F1D9 :                     ;
 +     442/    F1D9 :                     ;LESEN EINES BLOCKES
 +     443/    F1D9 :                     ; ret:    BLNR Blocknummer
 +     444/    F1D9 :                     ;    PSUM Prüfsumme
 +     445/    F1D9 :                     ;    CY 0 kein Fehler, 1 Fehler
 +     446/    F1D9 :                     ;
 +     447/    F1D9 :                     MAREK:
 +     448/    F1D9 : F3                  DI
 +     449/    F1DA :                      ;CALL INIC1 ;Uhr aus
 +     450/    F1DA : 3E 03                LD A,3
 +     451/    F1DC :                     MAREK0: ;OUT SPIOB, A ;TASTATUR AUS
 +     452/    F1DC : D3 8A                OUT SPIO1A, A
 +     453/    F1DE : 3E 05                LD A,5
 +     454/    F1E0 : D3 80                OUT CTC0, A ;CTC 0 ZUM ZEIT MESSEN
 +     455/    F1E2 : 3E B0                LD A,0B0H ;STARTWERT
 +     456/    F1E4 : D3 80                OUT CTC0, A
 +     457/    F1E6 : 3E 0F                LD A,0FH
 +     458/    F1E8 : D3 8A                OUT SPIO1A, A
 +     459/    F1EA : 3E 0A                LD A,0AH ;Interruptvektor 20A -> IKEP
 +     460/    F1EC : D3 8A                OUT SPIO1A, A
 +     461/    F1EE : 3E E7                LD A,0E7H ;SYSTEM PIO INTERRUPT ERLAUBT
 +     462/    F1F0 : D3 8A                OUT SPIO1A, A
 +     463/    F1F2 : FB                  EI
 +     464/    F1F3 : 06 16               MA1: LD B,22 ;22 VORTOENE SUCHEN
 +     465/    F1F5 : CD 4E F2            MA2: CALL LSTOP ;EIN BIT/TRENNZEICHEN LESEN
 +     466/    F1F8 : 38 F9                JR C, MA1 ;0 BIT GELESEN
 +     467/    F1FA : FE 90                CP A, 90H
 +     468/    F1FC : 38 F5                JR C, MA1 ;TRENNZEICHEN GELESEN
 +     469/    F1FE : 10 F5                DJNZ MA2
 +     470/    F200 : 06 02                LD B,2 ;1 TRENNZEICHEN
 +     471/    F202 : AF                  MA3: XOR A
 +     472/    F203 : 32 69 00            LD (PSUM),A
 +     473/    F206 : 4F                  LD C,A
 +     474/    F207 : 32 6A 00            LD (ARB),A
 +     475/    F20A : CD 5D F2            CALL LS1 ;EINE HALBPERIODE MESSEN
 +     476/    F20D : FE 52                CP A, 52H
 +     477/    F20F : 30 F1                JR NC, MA3 ;KEIN TRENNZEICHEN
 +     478/    F211 : 10 EF                DJNZ MA3
 +     479/    F213 : CD 65 F2            CALL IBYTE ;BLOCKNUMMER LESEN
 +     480/    F216 : D8                  RET C ;FEHLER
 +     481/    F217 : 32 6B 00            LD (BLNR),A
 +     482/    F21A : 06 80                LD B,80H ;ANZAHL BYTES
 +     483/    F21C : 2A 1B 00            LD HL,(DMA) ;BLOCKADRESSE
 +     484/    F21F : CD 65 F2            MA4: CALL IBYTE ;DATENBYTE LESEN
 +     485/    F222 : D8                  RET C ;FEHLER
 +     486/    F223 : 77                  LD (HL),A
 +     487/    F224 : 3A 69 00            LD A,(PSUM)
 +     488/    F227 : 86                  ADD A, (HL) ;NEUE PRUEFSUMME
 +     489/    F228 : 32 69 00            LD (PSUM),A
 +     490/    F22B : 23                  INC HL
 +     491/    F22C : 10 F1                DJNZ MA4
 +     492/    F22E : CD 65 F2            CALL IBYTE ;PRUEFSUMME LESEN
 +     493/    F231 : D8                  RET C ;FEHLER
 +     494/    F232 : 47                  LD B,A
 +     495/    F233 : 3A 69 00            LD A,(PSUM)
 +     496/    F236 : B8                  CP A, B
 +     497/    F237 : C8                  RET Z ;IN ORDNUNG
 +     498/    F238 : 37                  SCF
 +     499/    F239 : C9                  RET ;FEHLER
 +     500/    F23A :                     ;
 +     501/    F23A :                     ;INTERRUPTROUTINE ZUM LESEN
 +     502/    F23A :                     ;ret: (ARB) = Länge einer Halbperiode
 +     503/    F23A :                     ;
 +     504/    F23A : F5                  IKEP: PUSH AF
 +     505/    F23B : DB 80                IN A, CTC0
 +     506/    F23D : F5                  PUSH AF
 +     507/    F23E : 3E 07                LD A,7
 +     508/    F240 : D3 80                OUT CTC0, A
 +     509/    F242 : 3E B0                LD A,0B0H ;NEUE ZEITMESSUNG
 +     510/    F244 : D3 80                OUT CTC0, A ;Startwert
 +     511/    F246 : F1                  POP AF
 +     512/    F247 : 32 6A 00            LD (ARB),A ;gemessener Wert
 +     513/    F24A : F1                  POP AF
 +     514/    F24B : FB                  EI
 +     515/    F24C : ED 4D                RETI
 +     516/    F24E :                     ;
 +     517/    F24E :                     ;LESEN EINES BITS
 +     518/    F24E :                     ;ret: C = Länge der Periode
 +     519/    F24E :                     ;      CY = 1              0 Bit
 +     520/    F24E :                     ;         = 0 und C < 90H  Trennz.
 +     521/    F24E :                     ;         = 0 und C >= 90H 1 Bit
 +     522/    F24E :                     ;
 +     523/    F24E :                     
 +     524/    F24E :                     ;Bit Wert B0-x *2 Return
 +     525/    F24E :                     ;       KAUBT
 +     526/    F24E :                     ;-------------------------------------
 +     527/    F24E :                     ;0 20h 90h 120h Cy=1
 +     528/    F24E :                     ;1 40h 70h E0h > 90h
 +     529/    F24E :                     ;Trennz 80h 30h 60h < 90h
 +     530/    F24E :                     
 +     531/    F24E : AF                  LSTOP: XOR A
 +     532/    F24F : 32 6A 00            LD (ARB),A
 +     533/    F252 : 3A 6A 00            LS0: LD A,(ARB)
 +     534/    F255 : B7                  OR A
 +     535/    F256 : 28 FA                JR Z, LS0 ;WARTEN AUF 1. FLANKE
 +     536/    F258 : 4F                  LD C,A
 +     537/    F259 : AF                  XOR A
 +     538/    F25A : 32 6A 00            LD (ARB),A
 +     539/    F25D : 3A 6A 00            LS1: LD A,(ARB)
 +     540/    F260 : B7                  OR A
 +     541/    F261 : 28 FA                JR Z, LS1 ;WARTEN AUF 2. FLANKE
 +     542/    F263 : 81                  ADD A, C
 +     543/    F264 : C9                  RET
 +     544/    F265 :                     ;
 +     545/    F265 :                     ;LESEN EINES BYTES
 +     546/    F265 :                     ; ret:  A, E  Byte
 +     547/    F265 :                     ; CY 1 Fehler, 0 kein Fehler
 +     548/    F265 :                     ;
 +     549/    F265 : 16 08               IBYTE: LD D,8
 +     550/    F267 : AF                  XOR A
 +     551/    F268 : 5F                  LD E,A
 +     552/    F269 : CD 4E F2            IB1: CALL LSTOP ;LESEN EIN ZEICHEN
 +     553/    F26C : 3F                  CCF
 +     554/    F26D : 30 04                JR NC, IB2 ;0 BIT
 +     555/    F26F : FE 90                CP A, 90H
 +     556/    F271 : D8                  RET C ;TRENNZEICHEN
 +     557/    F272 : 37                  SCF ;1 BIT
 +     558/    F273 : CB 1B               IB2: RR E
 +     559/    F275 : 15                  DEC D
 +     560/    F276 : 20 F1                JR NZ, IB1
 +     561/    F278 : CD 4E F2            CALL LSTOP ;LESEN TRENNZEICHEN
 +     562/    F27B : 7B                  LD A,E
 +     563/    F27C : C9                  RET
 +     564/    F27D :                     ;
 +     565/    F27D :                      END
 +</code>
 +
  • z9001/software/os/kassetteninterface.1369932291.txt.gz
  • Zuletzt geändert: 2013/05/30 16:44
  • von volkerp