PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:assembler:cdrvnet

Dies ist eine alte Version des Dokuments!


Verzeichnisnummern zählen für Cardrive im Netzwerk

   .model small
   .code
   .stack 100h
   datum equ ´28.05.95´
   ;Byte-suchen
   ;df = 0; es:di = Vergleichsstring; al = Vergl.Wert; cx anzahl
   ;ze gefunden, di = gefundene Pos. + 1
   ;nz nicht gefunden, cx = 0, di = ende + 1
 
 
   ; Makrodefinitionen
   ; Makro für den DOS-Aufruf
   DOS     MACRO FunNr
           mov AH,FunNr
           int 21h
           ENDM
 
   ; ---------------------------------------------------------
 
   ; Konstanten für DOS-Funktionen
   oeffnen    equ 3Dh
   erstellen  equ 5Bh
   schliessen equ 3Eh
   lesen      equ 3Fh
   schreiben  equ 40h
   beenden    equ 4Ch
   ausgeben   equ 09h
   ; Ende des Vereinbarungsteils
   ; ---------------------------------------------------------
           org 100h
 
   vnrbearb proc
           mov ax,cs
           mov ds,ax
           MOV DX,OFFSET QuellDATEI  ; Adresse des Quelldateinamens
           MOV AL,2               ; R/W-Zugriff
           DOS OEFFNEN
           JNC LAB_10
           mov dx,offset ErrorOeffn
           jmp ProgEnde
 
   LAB_10:
           MOV cs:Haendler1,AX         ; Handle speichern
           MOV CX,3               ; 3 Byte aus Quelldatei lesen
           MOV BX,cs:Haendler1
           MOV DX,OFFSET vnr     ; Adresse des Lesepuffers
           DOS LESEN
           JNC LAB_11
           mov dx,offset ErrorLes
           jmp ProgEnde
 
   LAB_11:
           call vnrplus1
 
           ;schreibzeiger verschieben
           MOV BX,cs:Haendler1
           MOV DX,0
           MOV CX,0               ; auf Dateianfang
           mov ax,4200h
           int 21h                        ;DOS Zeiger verschieben
           JNC LAB_13
           mov dx,offset ErrorSchr
           jmp ProgEnde
   lab_13:
           ;geänderte VNR abspeichern
           MOV CX,3               ; 3 Byte schreiben
           MOV BX,cs:Haendler1
           MOV DX,OFFSET vnr     ; Adresse des Schreibpuffers
           DOS schreiben
           JNC LAB_12
           mov dx,offset ErrorSchr
           jmp ProgEnde
 
   LAB_12: dos schliessen
           mov     dx,offset TextOK
           jnc     ProgEnde        ;kein Fehler
           mov     dx,offset ErrorSchlie
 
   ProgEnde:
           mov si,dx
   ;        call textausgabe
           dos beenden
   ;        ret
 
   vnrbearb endp
 
   ; Datenbereich Dateiarbeit
   Version         db ´Version vom ´,Datum,10,13,´$´
   ErrorZÜ         db ´Abbruch durch Zeitüberschreitung!´,10,13,´$´
   TextOK          DB ´        Vorgang gespeichert!     ´,10,13,´$´
   ErrorErst       DB ´FEHLER beim ERSTELLEN der Datei! ´,10,13,´$´
   ErrorLes        DB ´FEHLER beim LESEN der Datei!     ´,10,13,´$´
   ErrorOeffn      DB ´FEHLER beim ÖFFNEN der Datei!    ´,10,13,´$´
   ErrorSchr       DB ´FEHLER beim SCHREIBEN der Datei! ´,10,13,´$´
   ErrorSchlie     DB ´FEHLER beim SCHLIESSEN der Datei!´,10,13,´$´
   QuellDatei      DB ´LETZTVNR.TXT´,0
   ;ZielDatei       DB ´VORGANG1.XXX´,0
   Haendler1       DW ?
   Haendler2       DW ?
   BytePuffer      DB ?
 
 
 
   vnrplus1   proc
              mov  dx,cs
              mov  ds,dx
              mov  es,dx
 
              mov  al,cs:vnrr            ;rechtes Zeichen
              call bytesuch
              mov  al,[di]
              mov  cs:vnrr,al
              cmp  cl,1               ;Übertrag?
              jz   weiterm            ;ja
              ret
 
   weiterm:   mov  al,cs:vnrm            ;mittleres Zeichen
              call bytesuch
              mov  al,[di]
              mov  cs:vnrm,al
              cmp  cl,1               ;Übertrag?
              jz   weiterl            ;ja
              ret
 
   weiterl:   mov  al,cs:vnrl            ;mittleres Zeichen
              call bytesuch
              mov  al,[di]
              mov  cs:vnrl,al
              ret
 
   vnrplus1   endp
 
   bytesuch   proc
              lea  di,konvtab         ;Vergleichsziel
              mov  cx,37              ;Anzahl
              cld
   repnz      scasb
              jnz  fehler1            ;nicht gefunden
   fehler1:
              ret
   bytesuch   endp
 
   vnr:                                ;3 Byte für VNR
   vnrl       db ´z´
   vnrm       db ´z´
   vnrr       db ´z´
   konvtab    db ´0123456789abcdefghijklmnopqrstuvwxyz0X´
           end
software/diy/assembler/cdrvnet.1144076772.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)