Mit Batch Files Debug fernsteuern, kleine *:COM - Files erzeugen und ausführen.

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Mit Batch Files Debug fernsteuern, kleine *:COM - Files erzeugen und ausführen.

      Hallo Leute.

      Ich habe seit Anfang des Jahres damit angefangen einige Batch Files zu schreiben zur Unterstützung für den Text-Mode(3), für den Grafik-Mode(13h) mit 320x200x8 und für den Grafik-Mode mit 800x600x32. Es sind alles nur kleine Spielereien und dafür habe ich Dosbox und Debug.com von FreeDos verwendet.

      In diesen Batch-Dateien werden Pipe-Operatoren(<> kleiner und größer Zeichen) verwendet, die den Inhalt der dort vorhandenen Echo-Befehle mit verschiedenen Anweisungen für Debug, in eine neue temporäre Textdatei nacheinander umleiten. Danach wird diese Textdatei an Debug übergeben und Debug damit gestartet. Debug nimmt nun die in der Textdatei enthaltenen Anweisungen und führt sie dann genauso aus, als wenn man sie in Debug von Hand eintippen würde. In den Anweisungen sind verschiedene Assembler Mnemonics enthalten mit denen Debug eine *.COM Datei erzeugt, die am Anschluß daran von der Batchdatei aus ausgeführt wird. Danach werden alle erzeugten Dateien wieder gelöscht.

      Ich denke ich fange mal damit an nacheinander verschiedene Batchdateien zu posten und dafür jeweils einen gesonderten Beitrag zu erstellen, damit der jeweilige Beitrag nicht zu lang wird.

      Ich wünsche euch viel Spaß damit.

      Example for how to display a true color picture within some batch files using the graphic mode with a resolution of 800x600x32.

      Running under DOSBOX.
      (Download and install DOSBOX, mount a folder and edit the configuration file "dosbox-0.74-2.conv".)
      dosbox.com/download.php?main=1
      [dosbox-0.74-2.conv]
      machine=svga_s3
      xms=true
      *ems=false*

      With a little help from Debug.
      Debug.com from FREEDOS: sites.google.com/site/pcdosretro/enhdebug
      ibiblio.org/pub/micro/pc-stuff…repos/pkg-html/debug.html
      Debug manual: armory.com/~rstevew/Public/Tutor/Debug/debug-manual.html
      (Download and extract debug into the mounted folder of DOSBOX.)

      Copy and paste each block of lines below into a new text file and rename the text files into: Start.bat, 4GB.bat, Vesa800.bat, TGARead.bat and SetMode.bat.


      @echo off
      REM Start.bat
      call 4GB.bat
      call Vesa800.bat
      call TGARead.bat OPEN24.TGA
      pause
      call SetMode.bat 3



      @echo off
      REM Switch into the 16 bit Unreal Mode/Big Real Mode
      REM Usage: 4GB.bat
      echo ecs:100>tmp.deb
      echo FA E4 70 0C 80 E6 70 66 31 C0 8C C8 A3 67 01 66>>tmp.deb
      echo C1 E0 04 66 89 C3 A3 B2 01 A3 BA 01 66 C1 C8 10>>tmp.deb
      echo A2 B4 01 A2 BC 01 66 31 C0 B8 A8 01 66 01 C3 C7>>tmp.deb
      echo 06 A0 01 27 00 66 89 1E A2 01 9C 0F 01 16 A0 01>>tmp.deb
      echo 8C D2 0F 20 C0 0C 01 0F 22 C0 EA 50 01 08 00 00>>tmp.deb
      echo B8 10 00 8E D0 B8 18 00 8E D8 0F 20 C0 66 83 E0>>tmp.deb
      echo FE 0F 22 C0 EA 70 01 34 07 00 00 00 00 00 00 00>>tmp.deb
      echo 8E D2 9D 31 C9 E4 64 24 02 E0 FA 75 1A B0 D1 E6>>tmp.deb
      echo 64 31 C9 E4 64 24 02 E0 FA 75 EE B0 DF E6 60 31>>tmp.deb
      echo C9 E4 64 24 02 E0 FA E4 70 24 7F E6 70 FB C3 00>>tmp.deb
      echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>>tmp.deb
      echo FF FF 00 00 00 9A 00 00 FF FF 00 00 00 92 00 00>>tmp.deb
      echo FF FF 00 00 00 92 FF FF>>tmp.deb
      echo.>>tmp.deb
      echo n 4GB.com>>tmp.deb
      echo rcx>>tmp.deb
      echo c7>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      tmp.deb
      4GB.com
      del 4GB.com


      @echo off
      REM Set Vesa 800x600x32 +lfb video mode
      REM DOSbox svga_s3 VBE modenumber 0x0115
      REM Usage: Vesa800.bat
      echo acs:100>tmp.deb
      echo mov bx,4115>>tmp.deb
      echo mov ax,4F02>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Vesa800.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 9>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Vesa800.com
      del Vesa800.com



      echo off
      REM Load and display 24 bit uncompressed TGA file
      REM using Big-Real-Mode and VBE-Mode 800x600x32
      REM Usage: TGARead.bat filename
      echo acs:100>tmp.deb
      REM Resize RAM
      echo mov bx,cs>>tmp.deb
      echo mov ax,sp>>tmp.deb
      echo add ax,F>>tmp.deb
      echo shr ax,4>>tmp.deb
      echo add bx,ax>>tmp.deb
      echo mov ah,4A>>tmp.deb
      echo int 21>>tmp.deb
      REM GET free Ram
      echo mov ah,48>>tmp.deb
      echo mov bx,1000>>tmp.deb
      echo int 21>>tmp.deb
      echo mov [0200],ax>>tmp.deb
      REM --- OPEN file ---
      echo mov dx,021E>>tmp.deb
      echo mov ax,3D00>>tmp.deb
      echo int 21>>tmp.deb
      echo jc 01E9>>tmp.deb
      echo mov bx,ax>>tmp.deb
      echo mov [0206],ax>>tmp.deb
      REM --- Get file size (LSEEK) ---
      echo mov ax,4202>>tmp.deb
      echo xor cx,cx>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo int 21>>tmp.deb
      echo mov [0202],cx>>tmp.deb
      echo mov [0204],dx>>tmp.deb
      REM -- Set file pointer to start --
      echo mov ax,4200>>tmp.deb
      echo xor cx,cx>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo int 21>>tmp.deb
      REM ;-- READ file TGA-Header --
      echo mov dx,0208>>tmp.deb
      echo mov cx,12>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo mov ah,3F>>tmp.deb
      echo int 21>>tmp.deb
      REM ;-- READ file TGA-body --
      echo mov cx,[0202]>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo sub cx,12>>tmp.deb
      echo mov ax,[0200]>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo mov ah,3F>>tmp.deb
      echo int 21>>tmp.deb
      echo mov ax,cs>>tmp.deb
      echo mov ds,ax>>tmp.deb
      REM ;-- CLOSE file --
      echo mov ah,3E>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo int 21>>tmp.deb
      REM -- Calculate 32 bit pointer --
      echo xor esi,esi>>tmp.deb
      echo mov si,[0200]>>tmp.deb
      echo shl esi,4>>tmp.deb
      echo xor eax,eax>>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo sub esi,eax>>tmp.deb
      echo mov edi,[021A]>>tmp.deb
      echo sub edi,eax>>tmp.deb
      REM DS:EDI linear frame buffer(LFB)
      echo xor eax,eax>>tmp.deb
      echo mov ax,[0214]>>tmp.deb
      echo shl eax,2>>tmp.deb
      echo mov ebp,C80>>tmp.deb
      echo add edi,eax>>tmp.deb
      echo add ebp,eax>>tmp.deb
      echo mov ax,[0214]>>tmp.deb
      echo add ax,ax>>tmp.deb
      echo add ax,[0214]>>tmp.deb
      echo mul WORD PTR[0216]>>tmp.deb
      echo add esi,eax>>tmp.deb
      echo sub esi,2>>tmp.deb
      REM DS:ESI end of TGA body last pixel
      echo mov cx,[0214]>>tmp.deb
      echo mov bx,cx>>tmp.deb
      echo mov dx,[0216]>>tmp.deb
      REM Display line by line
      echo mov cx,bx>>tmp.deb
      echo mov ax,[esi]>>tmp.deb
      echo mov [edi],ax>>tmp.deb
      echo mov al,[esi+2]>>tmp.deb
      echo mov [edi+2],al>>tmp.deb
      echo sub esi,3>>tmp.deb
      echo sub edi,4>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 01CA>>tmp.deb
      echo add edi,ebp>>tmp.deb
      echo dec dx>>tmp.deb
      echo jnz 01C8>>tmp.deb
      echo ret>>tmp.deb
      REM ---------------------------
      echo org 200>>tmp.deb
      REM TGASEG
      echo DW 0>>tmp.deb
      REM FLEN
      echo DW 0,0>>tmp.deb
      REM HANDLE
      echo DW 0>>tmp.deb
      REM ----
      REM TGAHEAD
      echo DB 0>>tmp.deb
      REM TABLE
      echo DB 0>>tmp.deb
      REM COMP
      echo DB 0>>tmp.deb
      REM DACOFF
      echo DW 0>>tmp.deb
      REM DACLEN
      echo DW 0>>tmp.deb
      REM DACBIT
      echo DB 0>>tmp.deb
      REM X1
      echo DW 0>>tmp.deb
      REM Y1
      echo DW 0>>tmp.deb
      REM XLEN
      echo DW 0>>tmp.deb
      REM YLEN
      echo DW 0>>tmp.deb
      REM BPP
      echo DB 18>>tmp.deb
      REM DIREKT
      echo DB 0>>tmp.deb
      REM ----
      REM LFB address
      echo DD C0000000>>tmp.deb
      REM Filename
      echo DB "%1",0>>tmp.deb
      REM ---------------------------
      echo.>>tmp.deb
      echo n TGARead.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 140>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      TGARead.com
      del TGARead.com



      @echo off
      REM Set video mode
      REM Need one parameter(%1) attached.
      REM Usage: SetMode.bat Modenumber
      REM For MCGA 8 bit graphicmode: 320x200 color 0-255 Modenumber:13
      REM For textmode(default) 4 bit color Modenumber:3
      echo a cs:100>tmp.deb
      echo xor ah,ah>>tmp.deb
      echo mov al,%1>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Setmode.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 7>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Setmode.com
      del Setmode.com


      The name of the picture is "Open24.tga" and it is a 24 bit uncompressed Tga picture.

      Download ufile.io/iofbc
      (16542 bytes)

      Note: Hosted only 30 days.
      Upload 22.March 2019
      uploadfiles.io/

      Original picture from: static.turbosquid.com/Preview/…fa1-9d34e89ec653Large.jpg

      I opened the original picture with the paint program from windows and use the rectangle to copy a part of the picture and paste it into a new picture and save and convert the picture with a tiff-picture-format. The paint program from windows does not support tga files.

      Then i open the tiff image under DOS with the Pictview-image viewer for DOS pictview.com/ and convert the tiff-format to the tga-format 24 bit uncompressed.

      Note: The file size of the tga picture using the TGARead.bat is limited to 64 KB (let the code most simple for education.)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Hans Muster () aus folgendem Grund: Fehler entfernt.

    • Batchdateien für den Textmode

      In den folgenden Batchdateien lassen wir grosse Buchstaben über den Bildschirm scrollen.
      Dafür verwenden wir den Charackter Set aus dem ROM-Speicher der (emulierten) Grafikkarte, Speicher-Adresse in F000:FA6E. Dort sind für jeden Buchstaben jeweils 8 Bytes enthalten, wo das Muster der ASCII-Zeichen enthalten ist. Für jedes gesetzte Bit wird für unsere grossen Buchstaben ein ASCII 177 ▒ zum Bildschirm geschrieben. Die grossen Buchstaben werden aus 8*8 Zeichen ASCII 177 ▒ zusammen gesetzt.

      Unser Textbildschirm vom Texmode(3) beträgt standardmässig 80 Spalten und 25 Zeilen und die Zeichen sind 8*16 Pixel groß. Das macht dann bei 80 Spalten für unsere grossen 8*8 ▒-Buchstaben 80 geteilt durch 8 = max. 10 große Buchstaben vom Blildrand zu Bildrand.

      Der Textbildschirm befindet sich an der Speicher-Adressse B800:0000. Er beginnt in der linken oberen Ecke und endet rechts unten vom Bildschirm und ist wie folgt aufgebaut: ASCII, Farb-Attribut, ASCII, Farb-Attribut, usw.. Für jeden Buchstaben am Bildschirm sind zwei bytes reserviert. Das ergibt zusammen = 25 Zeilen * (80 Spalten * 2) bytes für eine gesamte Bildschirmseite.

      Es wird wieder Debug.com benötigt.


      @echo off
      REM Start2.bat
      cls
      call Cursor.bat 0 8 19
      call BigText.bat "Jumbo Text"
      call BigScrol.bat
      call BigText.bat " scroller"
      pause
      call Cursor.bat 0 9 1
      call BigScrol.bat


      @echo off
      REM Set the cursor position on screen.
      REM Need three parameter(%1 %2 %3) attached.
      REM need only hexadecimal values
      REM Usage: Cursor page(0-7) column(0-0x4f) row(0-0x18)
      REM (Page 0 default)
      echo a cs:100>tmp.deb
      echo mov bh,%1>>tmp.deb
      echo mov dh,%2>>tmp.deb
      echo mov dl,%3>>tmp.deb
      echo mov ah,2>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n cursor.com>>tmp.deb
      echo rcx>>tmp.deb
      echo b>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Cursor.com
      del Cursor.com



      @echo off
      REM Usage: BigText.bat "Text"
      REM Need one parameter(%1) attached.
      REM limited only 10 big letters from border to border
      echo acs:100>tmp.deb
      echo mov esi,F000>>tmp.deb
      echo mov eax,FA6E>>tmp.deb
      echo shl esi,4>>tmp.deb
      echo add esi,eax>>tmp.deb
      echo xor eax,eax>>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo mov di,B800>>tmp.deb
      echo mov bx,180>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo shl edi,4>>tmp.deb
      echo sub esi,eax>>tmp.deb
      echo sub edi,eax>>tmp.deb
      echo mov ebp,esi>>tmp.deb
      echo xor eax,eax>>tmp.deb
      echo mov esi,ebp>>tmp.deb
      echo mov al,[bx]>>tmp.deb
      echo cmp al,FF>>tmp.deb
      echo jz 017A>>tmp.deb
      echo cmp al,7F>>tmp.deb
      echo ja 0170>>tmp.deb
      echo cmp al,20>>tmp.deb
      echo jb 0170>>tmp.deb
      echo shl eax,3>>tmp.deb
      echo add esi,eax>>tmp.deb
      echo mov dl,8>>tmp.deb
      echo mov al,[esi]>>tmp.deb
      echo mov cl,8>>tmp.deb
      echo rol al,1>>tmp.deb
      echo test al,1>>tmp.deb
      echo jz 015B>>tmp.deb
      echo mov BYTE PTR[edi],B1>>tmp.deb
      echo add edi,2>>tmp.deb
      echo dec cl>>tmp.deb
      echo jnz 0151>>tmp.deb
      echo inc esi>>tmp.deb
      echo add edi,90>>tmp.deb
      echo dec dl>>tmp.deb
      echo jnz 014C>>tmp.deb
      echo inc bx>>tmp.deb
      echo sub edi,4F0>>tmp.deb
      echo jmp 012F>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo acs:180>>tmp.deb
      echo DB "%1",FF>>tmp.deb
      echo.>>tmp.deb
      echo n BigText.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 100>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      BigText.com
      del BigText.com




      @echo off
      REM Scroll Big text
      REM Usage: BigScrol.bat
      echo a cs:100>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo mov di,b800>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo shl edi,4>>tmp.deb
      echo sub edi,eax>>tmp.deb
      echo mov [01B0],edi>>tmp.deb
      echo mov bp,4F>>tmp.deb
      echo mov edi,[01B0]>>tmp.deb
      echo mov bx,9E>>tmp.deb
      echo mov ax,[edi+2]>>tmp.deb
      echo mov [edi],ax>>tmp.deb
      echo mov ax,[edi+A2]>>tmp.deb
      echo mov [edi+A0],ax>>tmp.deb
      echo mov ax,[edi+142]>>tmp.deb
      echo mov [edi+140],ax>>tmp.deb
      echo mov ax,[edi+1E2]>>tmp.deb
      echo mov [edi+1E0],ax>>tmp.deb
      echo mov ax,[edi+282]>>tmp.deb
      echo mov [edi+280],ax>>tmp.deb
      echo mov ax,[edi+322]>>tmp.deb
      echo mov [edi+320],ax>>tmp.deb
      echo mov ax,[edi+3C2]>>tmp.deb
      echo mov [edi+3C0],ax>>tmp.deb
      echo mov ax,[edi+462]>>tmp.deb
      echo mov [edi+460],ax>>tmp.deb
      echo mov dx,3da>>tmp.deb
      echo mov si,1>>tmp.deb
      echo mov cx,100>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jnz 0192>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0192>>tmp.deb
      echo dec si>>tmp.deb
      echo jnz 018F>>tmp.deb
      echo add edi,2>>tmp.deb
      echo sub ebx,2>>tmp.deb
      echo jnz 0120>>tmp.deb
      echo dec bp>>tmp.deb
      echo jnz 0118>>tmp.deb
      echo ret>>tmp.deb
      echo org 01B0>>tmp.deb
      echo DD 0>>tmp.deb
      echo.>>tmp.deb
      echo n BigScrol.com>>tmp.deb
      echo rcx>>tmp.deb
      echo B4>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      BigScrol.com
      del BigScrol.com


      In der "BigScrol.bat" ist eine verschachtelte Verzögerungsschleife enthalten, um den Scrollvorgang zu verzögern.
      Äussere Schleife Startwert "1" im SI-Register und innere Schleife hex 100 im CX-Register.
      Je höher die Werte, desto größer die Verzögerung.

      Diese Befehle sind damit gemeint: (ungefähr in der Mitte der batchdatei)
      echo mov si,1>>tmp.deb
      echo mov cx,100>>tmp.deb
    • Danke für das Feedback.

      Wir machen auch gleich weiter mit einem anderen Textscroller mit normal kleinen Buchstaben.

      Dafür habe ich rundherum einen Rahmen plaziert wo der Text scrollen soll.
      Doch dieses mal haben wir ein kleines Copy und Paste Problem mit den folgenden Zeichen
      ┌ ASCII 218
      ─ ASCII 196
      ┐ ASCII 170
      │ ASCII 179
      └ ASCII 192
      ┘ ASCII 217
      Mit einem DOS-Editor kann man die Zeichen nach Wunsch austauschen + bei Rahmen-Mitte Leerzeiche einfügen (werden hier verschuckt).

      (Es wird auch wieder die Cursor.bat aus dem vorigen Beitrag verwendet, die ich hier nicht extra mit aufliste und die von dort zu holen ist.)


      @echo off
      REM Start3.bat
      cls
      call Writdac.bat 2 0 0d 0
      call Textcol.bat 8 19 31 2E
      call Cursor.bat 0 7 18
      echo ┌────────────────────────┐
      call Cursor.bat 0 8 18
      echo │ │
      call Cursor.bat 0 9 18
      echo └────────────────────────┘
      call Scroll.bat 19 8 30 "Welcome to the new funny textscroller."


      @echo off
      REM Set the color components with red green and blue.
      REM Need four parameter(%1 %2 %3 %4) attached.
      REM Usage 4 bit Textmode(3): WriteDac.bat color(0-f) red(0-3f) green(0-3f) blue(0-3f)
      REM ;------------------------------------------------
      REM ; color components default values red green blue
      REM ;------------------------------------------------
      REM 0 black 00 00 00
      REM 1 blue 00 00 2A
      REM 2 green 00 2A 00
      REM 3 cyan 00 2A 2A
      REM 4 red 2A 00 00
      REM 5 magenta 2A 00 2A ;
      REM 6 brown 2A 2A 00
      REM 7 light grey 2A 2A 2A
      REM 8 grey 00 00 15
      REM 9 light blue 00 00 3F
      REM A light green 00 2A 15
      REM B light cyan 00 2A 3F
      REM C light red 2A 00 15
      REM D pink 2A 00 3F
      REM E yellow 2A 2A 15
      REM F white 2A 2A 3F
      REM ;------------------------------------------------
      REM For 8 bit graphicmode(0x13): color(0-ff) from a palette of 262144.
      echo a cs:100>tmp.deb
      echo mov dx,3c8>>tmp.deb
      echo mov al,%1>>tmp.deb
      echo out dx,al>>tmp.deb
      echo inc dx>>tmp.deb
      echo mov al,%2>>tmp.deb
      echo out dx,al>>tmp.deb
      echo mov al,%3>>tmp.deb
      echo out dx,al>>tmp.deb
      echo mov al,%4>>tmp.deb
      echo out dx,al>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n WritDac.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 11>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      WritDac.com
      del WritDac.com


      @echo off
      REM Textcolor Set only color
      REM Need four parameter(%1 %2 %3 %4) attached.
      REM Usage: Textcol.bat row start end color
      REM Examble: Textcol.bat 8 19 30 14
      echo a cs:100>tmp.deb
      echo mov ax,b800>>tmp.deb
      echo mov si,%1>>tmp.deb
      echo mov bx,%1>>tmp.deb
      echo mov di,%2>>tmp.deb
      echo mov cx,%3>>tmp.deb
      echo shl si,5>>tmp.deb
      echo shl bx,7>>tmp.deb
      echo add di,di>>tmp.deb
      echo sub cx,%2>>tmp.deb
      echo lea bx,[bx+si]>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov al,%4>>tmp.deb
      echo lea di,[di+bx]>>tmp.deb
      echo mov [di+1],al>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0122>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Textcol.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 2C>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Textcol.com
      del Textcol.com



      @echo off
      REM Scroll some ASCII`s on the screen
      REM from the right side to the left side.
      REM Need at minimum four parameter(%1 %2 %3 %4) attached.
      REM Usage: Scroll.bat left row right scrolltext
      REM Examble: Scroll.bat 19 8 30 "Welcome to the new funny textscroller."
      echo a cs:100>tmp.deb
      echo mov ax,b800>>tmp.deb
      echo mov di,%1>>tmp.deb
      echo mov bx,%2>>tmp.deb
      echo mov cx,%3>>tmp.deb
      echo mov si,bx>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo add di,di>>tmp.deb
      echo shl bx,7>>tmp.deb
      echo shl si,5>>tmp.deb
      echo sub cx,%1>>tmp.deb
      echo lea bx,[bx+si]>>tmp.deb
      echo mov dx,3da>>tmp.deb
      echo lea di,[di+bx]>>tmp.deb
      echo mov [208],cx>>tmp.deb
      echo mov [20A],di>>tmp.deb
      echo add di,cx>>tmp.deb
      echo mov si,210>>tmp.deb
      echo add di,cx>>tmp.deb
      echo mov [204],si>>tmp.deb
      echo mov [20C],di>>tmp.deb
      echo lodsb>>tmp.deb
      echo cmp al,ff>>tmp.deb
      echo jnz 0139>>tmp.deb
      echo dec si>>tmp.deb
      echo mov [202],si>>tmp.deb
      echo mov si,[204]>>tmp.deb
      echo mov cx,[206]>>tmp.deb
      echo lodsb>>tmp.deb
      echo mov es:[di],al>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 014B>>tmp.deb
      echo mov di,[20C]>>tmp.deb
      echo cmp di,[20A]>>tmp.deb
      echo jz 0175>>tmp.deb
      echo sub di,2>>tmp.deb
      echo mov [20C],di>>tmp.deb
      echo mov cx,[206]>>tmp.deb
      echo cmp cx,[208]>>tmp.deb
      echo jz 0175>>tmp.deb
      echo inc cx>>tmp.deb
      echo mov [206],cx>>tmp.deb
      echo mov bx,3>>tmp.deb
      echo mov cx,A000>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jnz 017B>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 017B>>tmp.deb
      echo dec bx>>tmp.deb
      echo jnz 0178>>tmp.deb
      echo mov di,[20C]>>tmp.deb
      echo cmp di,[20A]>>tmp.deb
      echo jnz 0143>>tmp.deb
      echo mov bx,[208]>>tmp.deb
      echo add bx,bx>>tmp.deb
      echo mov BYTE PTR es:[di+bx],20>>tmp.deb
      echo mov si,[204]>>tmp.deb
      echo mov bx,[202]>>tmp.deb
      echo inc si>>tmp.deb
      echo mov [204],si>>tmp.deb
      echo cmp si,bx>>tmp.deb
      echo jnz 0143>>tmp.deb
      echo ret>>tmp.deb
      echo org 200>>tmp.deb
      echo DW 0,0,0,1,0,0,0,0>>tmp.deb
      echo DB "%4",20,"%5",20,"%6",20,"%7",20,"%8",20,"%9">>tmp.deb
      echo DB 20,ff,20,20,20,20,20,20,20,20,20,20,20,20,20>>tmp.deb
      echo DB 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20>>tmp.deb
      echo.>>tmp.deb
      echo n Scroll.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 300>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Scroll.com
      del Scroll.com

      Die Verzögerung vom Scrollvorgang ist dieses Mal hier zu finden. Aussere Scheife 3 innere Scheife hex A000.
      echo mov bx,3>>tmp.deb
      echo mov cx,A000>>tmp.deb

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Hans Muster ()

    • Hier habe ich noch ein paar weitere Batch Dateien für den Textmode.

      Die Color.bat funktioniert ähnlich wie unter Windows der Color-Befehl.

      @echo off
      REM Need one parameter(%1) attached.
      REM Usage: Color.bat color
      echo acs:100>tmp.deb
      echo mov ax,b800>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov cx,7d0>>tmp.deb
      echo xor di,di>>tmp.deb
      echo mov al,%1>>tmp.deb
      echo mov [di+1],al>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 010C>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Color.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 16>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Color.com
      del Color.com


      Die ColText.bat ist wie ein Echo-Befehl mit Farbe und der Text läßt sich belibig am Bildschirm positionieren.

      @echo off
      REM Need four parameter(%1 %2 %3 %4) attached.
      REM Usage: ColText.bat row column color text
      REM Example: *ColText.bat* 8 10 1E "Text"
      echo a cs:100>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo mov di,b800>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo shl edi,4>>tmp.deb
      echo sub edi,eax>>tmp.deb
      echo mov esi,%1>>tmp.deb
      echo mov ebx,%1>>tmp.deb
      echo shl esi,5>>tmp.deb
      echo shl ebx,7>>tmp.deb
      echo lea ebx,[ebx+esi]>>tmp.deb
      echo lea edi,[edi+ebx]>>tmp.deb
      echo mov ebx,%2>>tmp.deb
      echo add ebx,ebx>>tmp.deb
      echo lea edi,[edi+ebx]>>tmp.deb
      echo mov ah,%3>>tmp.deb
      echo mov si,160>>tmp.deb
      echo mov al,[si]>>tmp.deb
      echo inc si>>tmp.deb
      echo cmp al,FF>>tmp.deb
      echo jz 0151>>tmp.deb
      echo mov [edi],ax>>tmp.deb
      echo add edi,2>>tmp.deb
      echo jmp 0141>>tmp.deb
      echo ret>>tmp.deb
      echo org 0160>>tmp.deb
      echo DB "%4",FF>>tmp.deb
      echo.>>tmp.deb
      echo n ColText.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 100>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      ColText.com
      del ColText.com


      Mit der TextPage.bat können wir zu allen 8 Bildschirmseiten wechseln, ganz ohne daß der Inhalt davon verloren geht.
      (Mit der Cursor.bat kann man für jede Bildschirmseite eine eigene Cursor-Position setzen, die ebenfalls beibehalten wird.)

      @echo off
      REM SELECT ACTIVE DISPLAY PAGE
      REM Need one parameter(%1) attached.
      REM Usage 80x25: TextPage.bat pagenumber(0-7)
      REM Usage 80x50: TextPage.bat pagenumber(0-3)
      REM (Page 0 default)
      echo a cs:100>tmp.deb
      echo mov al,%1>>tmp.deb
      echo mov ah,5>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n TextPage.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 7>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      TextPage.com
      del TextPage.com

      Mit der Text50.bat können wir im Textmode(3) auf 80x50 Spalten und Zeilen umschalten.
      (Das hat bestenfalls direkt nach dem Aufruf vom Textmode(3) mittels "SetMode.bat 3" zu geschehen.)

      @echo off
      REM Set the textmode to 80 column x 50 rows (8x8 character)
      REM No parameter needed.
      REM Usage: Text50.bat
      echo e cs:100>tmp.deb
      echo 31 db b8 12 11 cd 10 c3>>tmp.deb
      echo.>>tmp.deb
      echo n Text50.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 8>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Text50.com
      del Text50.com


      Mit der Text25.bat wechseln wir auf 80x25 Zeichen.
      (Das hat bestenfalls direkt nach dem Aufruf vom Textmode(3) mittels "SetMode.bat 3" zu geschehen.)

      @echo off
      REM Set the textmode to 80 column x 25 rows (8x16 character)
      REM No parameter needed.
      REM Usage: Text25.bat
      echo e cs:100>tmp.deb
      echo 31 db b8 14 11 cd 10 c3>>tmp.deb
      echo.>>tmp.deb
      echo n Text25.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 8>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Text25.com
      del Text25.com


      Noch ungetestet, wegen funktioniert in DOSBOX nicht.
      Die Border.bat soll den Bildschirmrahmen einfärben.

      @echo off
      REM Set the border color
      REM Need one parameter(%1) attached.
      REM Usage: Border.bat Colornumber (0-F)
      echo e cs:100>tmp.deb
      echo b8 00 0b bb %1 00 cd 10 c3>>tmp.deb
      echo.>>tmp.deb
      echo n Border.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 9>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Border.com
      del Border.com


      Noch ungetestet, wegen funktioniert in DOSBOX nicht.
      Die Caller.bat soll einen internen Command.com Befehl zur Ausführung bringen. In diesem Fall den call-Befehl.

      @echo off
      REM Caller.bat
      echo acs:100>tmp.deb
      echo mov si,106>>tmp.deb
      echo int 2e>>tmp.deb
      echo ret>>tmp.deb
      echo db "call Test.bat">>tmp.deb
      echo.>>tmp.deb
      echo n Caller.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 13>>tmp.deb
      echo wcs:100>>tmp.deb
      echo g>>tmp.deb
      echo r>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>deb.inf
      REM del tmp.deb
      REM Caller.com
      REM del Caller.com

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Hans Muster ()

    • ...Alle meine Entchen...

      @echo off
      REM Play a traditional german folk song
      REM "All my ducklings" on the PC-speaker.
      REM Usage: Duckling.bat
      echo acs:100>tmp.deb
      echo mov bx,158>>tmp.deb
      echo xor si,si>>tmp.deb
      REM Loop
      echo mov di,[bx+si]>>tmp.deb
      REM SOUND
      echo call 0122>>tmp.deb
      echo mov bp,[bx+si+2]>>tmp.deb
      REM Delay
      echo call 014A>>tmp.deb
      REM NoSound
      echo call 0143>>tmp.deb
      echo mov bp,19>>tmp.deb
      REM Delay
      echo call 014A>>tmp.deb
      echo add si,4>>tmp.deb
      echo cmp si,6C>>tmp.deb
      echo jc 0105>>tmp.deb
      echo ret>>tmp.deb
      REM Sound
      echo mov al,B6>>tmp.deb
      echo out 43,al>>tmp.deb
      echo mov dx,12>>tmp.deb
      echo mov ax,34DC>>tmp.deb
      echo cmp di,13>>tmp.deb
      echo jnc 0134>>tmp.deb
      echo mov di,13>>tmp.deb
      REM FreqOk
      echo div di>>tmp.deb
      echo out 42,al>>tmp.deb
      echo mov al,ah>>tmp.deb
      echo out 42,al>>tmp.deb
      echo in al,61>>tmp.deb
      echo or al,3>>tmp.deb
      echo out 61,al>>tmp.deb
      echo ret>>tmp.deb
      REM NoSound
      echo in al,61>>tmp.deb
      echo and al,FC>>tmp.deb
      echo out 61,al>>tmp.deb
      echo ret>>tmp.deb
      REM Delay
      echo mov ax,3E8>>tmp.deb
      echo mul bp>>tmp.deb
      echo mov cx,dx>>tmp.deb
      echo mov dx,ax>>tmp.deb
      echo mov ah,86>>tmp.deb
      echo int 15>>tmp.deb
      echo ret>>tmp.deb
      echo dw 416,FA>>tmp.deb
      echo dw 496,FA>>tmp.deb
      echo dw 530,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 61F,1F4>>tmp.deb
      echo dw 61F,1F4>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 61F,1F4>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 6E0,FA>>tmp.deb
      echo dw 61F,1F4>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 530,1F4>>tmp.deb
      echo dw 530,1F4>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 574,FA>>tmp.deb
      echo dw 416,1F4>>tmp.deb
      echo.>>tmp.deb
      echo n Duckling.com>>tmp.deb
      echo rcx>>tmp.deb
      echo C4>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Duckling.com
      del Duckling.com
    • In diesem Beitrag geht es darum, die Charakter-Muster der ASCII-Zeichen zu verändern.
      Dafür werden die ASCII-Zeichen Nummer 128+129, 130+131, ... und so weiter verändert und jeweils nebeneinander plaziert.
      Die Zeichen bestehen aus 8x16 Pixel und wenn wir zwei Zeichen neben einander plazieren ergibt das ein 16x16 grosses Feld.
      Nun können wir die ersten Zeichen 128+129 durch die Zeichen 130+131..usw. am Bildschirm austauschen und daraus eine Animation entstehen lassen.


      @echo off
      REM Start4.bat
      call Chargen.bat
      Echo.
      call CharAni.bat 26 C
      call CharAni.bat 26 C
      call CharAni.bat 26 C
      call CharAni.bat 26 C
      REM ...
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C
      call CharAni2.bat 26 C


      @echo off
      REM Chargen.bat
      echo acs:100>tmp.deb
      echo mov ax,3>>tmp.deb
      echo int 10>>tmp.deb
      echo mov ax,1100>>tmp.deb
      echo mov bp,118>>tmp.deb
      echo mov cx,12>>tmp.deb
      echo mov dx,80>>tmp.deb
      echo xor bl,bl>>tmp.deb
      echo mov bh,10>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo DB 0,7,18,20,20,40,40,40,40,40,40,20,20,18,7,0>>tmp.deb
      echo DB 0,E0,18,4,4,2,2,2,2,2,2,4,4,18,E0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000111 11100000
      REM 00011000 00011000
      REM 00100000 00000100
      REM 00100000 00000100
      REM 01000000 00000010
      REM 01000000 00000010
      REM 01000000 00000010
      REM 01000000 00000010
      REM 01000000 00000010
      REM 01000000 00000010
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00011000 00011000
      REM 00000111 11100000
      REM 00000000 00000000
      echo DB 0,0,7,18,40,40,40,40,40,40,40,40,18,7,0,0>>tmp.deb
      echo DB 0,0,E0,18,4,4,4,4,4,4,4,4,18,E0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000111 11100000
      REM 00011000 00011000
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00100000 00000100
      REM 00011000 00011000
      REM 00000111 11100000
      REM 00000000 00000000
      REM 00000000 00000000
      echo DB 0,0,0,7,8,10,10,10,10,10,10,8,7,0,0,0>>tmp.deb
      echo DB 0,0,0,E0,10,8,8,8,8,8,8,8,E0,0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000111 11100000
      REM 00001000 00010000
      REM 00010000 00001000
      REM 00010000 00001000
      REM 00010000 00001000
      REM 00010000 00001000
      REM 00010000 00001000
      REM 00010000 00001000
      REM 00001000 00010000
      REM 00000111 11100000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      echo DB 0,0,0,0,7,8,8,8,8,8,8,7,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,E0,10,10,10,10,10,10,E0,0,0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000111 11100000
      REM 00001000 00010000
      REM 00001000 00010000
      REM 00001000 00010000
      REM 00001000 00010000
      REM 00001000 00010000
      REM 00001000 00010000
      REM 00000111 11100000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      echo DB 0,0,0,0,0,3,4,4,4,4,3,0,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,0,C0,20,20,20,20,C0,0,0,0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000011 11000000
      REM 00000100 00100000
      REM 00000100 00100000
      REM 00000100 00100000
      REM 00000100 00100000
      REM 00000011 11000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      echo DB 0,0,0,0,0,0,1,2,2,1,0,0,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,0,0,8,40,40,8,0,0,0,0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000001 10000000
      REM 00000010 01000000
      REM 00000010 01000000
      REM 00000001 10000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      echo DB 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,0,0,0,80,80,0,0,0,0,0,0,0>>tmp.deb
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000001 10000000
      REM 00000001 10000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM 00000000 00000000
      REM -------------------
      echo DB 7,F,39,61,61,C1,C1,FF,FF,C1,C1,61,61,39,F,7>>tmp.deb
      echo DB E0,F0,9C,86,86,83,83,FF,FF,83,83,86,86,9C,F0,E0>>tmp.deb
      REM 00000111 11100000
      REM 00001111 11110000
      REM 00111001 10011100
      REM 01100001 10000110
      REM 01100001 10000110
      REM 11000001 10000011
      REM 11000001 10000011
      REM 11111111 11111111
      REM 11111111 11111111
      REM 11000001 10000011
      REM 11000001 10000011
      REM 01100001 10000110
      REM 01100001 10000110
      REM 00111001 10011100
      REM 00001111 11110000
      REM 00000111 11100000
      echo DB 7,F,38,70,78,CC,C7,C3,C7,CF,DC,78,70,38,F,7>>tmp.deb
      echo DB E0,F0,1C,E,1E,33,E3,C3,E3,B3,1B,E,6,1C,F0,E0>>tmp.deb
      REM 00000111 11100000
      REM 00001111 11110000
      REM 00111000 00011100
      REM 01110000 00001110
      REM 01111000 00011110
      REM 11001100 00110011
      REM 11000111 11100011
      REM 11000011 11000011
      REM 11000111 11100011
      REM 11001111 10110011
      REM 11011100 00011011
      REM 01111000 00001110
      REM 01110000 00000110
      REM 00111000 00011100
      REM 00001111 11110000
      REM 00000111 11100000
      echo.>>tmp.deb
      echo n Chargen.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 138>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Chargen.com
      del Chargen.com



      @echo off
      REM Need two parameter(%1 %2) attached.
      REM Usage: CharAni.bat XPos(0-0x4F) YPos(0-0x18)
      echo acs:100>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo mov di,B800>>tmp.deb
      echo mov dx,3DA>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo shl edi,4>>tmp.deb
      echo mov cx,7>>tmp.deb
      echo sub edi,eax>>tmp.deb
      echo mov eax,%2>>tmp.deb
      echo mov ebx,eax>>tmp.deb
      echo shl eax,5>>tmp.deb
      echo shl ebx,7>>tmp.deb
      echo add ebx,eax>>tmp.deb
      echo add ebx,%1>>tmp.deb
      echo add ebx,%1>>tmp.deb
      echo add edi,ebx>>tmp.deb
      echo mov ebp,0F810F80>>tmp.deb
      echo mov [edi],ebp>>tmp.deb
      echo add ebp,00020002>>tmp.deb
      echo call 0161>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 013B>>tmp.deb
      echo mov cx,7>>tmp.deb
      echo sub ebp,00020002>>tmp.deb
      echo mov [edi],ebp>>tmp.deb
      echo call 0161>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 014F>>tmp.deb
      echo ret>>tmp.deb
      echo mov bx,1>>tmp.deb
      echo mov si,8500>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jnz 0167>>tmp.deb
      echo dec si>>tmp.deb
      echo jnz 0167>>tmp.deb
      echo dec bx>>tmp.deb
      echo jnz 0164>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n CharAni.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 73>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      CharAni.com
      del CharAni.com



      @echo off
      REM Need two parameter(%1 %2) attached.
      REM Usage: CharAni2.bat XPos(0-0x4F) YPos(0-0x18)
      echo acs:100>tmp.deb
      echo mov ax,ds>>tmp.deb
      echo mov di,B800>>tmp.deb
      echo mov dx,3DA>>tmp.deb
      echo shl eax,4>>tmp.deb
      echo shl edi,4>>tmp.deb
      echo mov cx,2>>tmp.deb
      echo sub edi,eax>>tmp.deb
      echo mov eax,%2>>tmp.deb
      echo mov ebx,eax>>tmp.deb
      echo shl eax,5>>tmp.deb
      echo shl ebx,7>>tmp.deb
      echo add ebx,eax>>tmp.deb
      echo add ebx,%1>>tmp.deb
      echo add ebx,%1>>tmp.deb
      echo add edi,ebx>>tmp.deb
      echo mov ebp,0F8F0F8E>>tmp.deb
      echo mov [edi],ebp>>tmp.deb
      echo add ebp,00020002>>tmp.deb
      echo call 014D>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 013B>>tmp.deb
      echo ret>>tmp.deb
      echo mov bx,3>>tmp.deb
      echo mov si,8500>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jnz 0153>>tmp.deb
      echo dec si>>tmp.deb
      echo jnz 0153>>tmp.deb
      echo dec bx>>tmp.deb
      echo jnz 0150>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n CharAni2.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 5F>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      CharAni2.com
      del CharAni2.com


      Noch in Planung: Ein 100x100 Pixel grosses Bild mit 14x7 ASCII-Zeichen in der Mitte vom Textbildschirm anzeigen lassen und zusätzlich rundherum Text zu plazieren.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Hans Muster ()

    • In diesem Beitrag geht es um den Videomode 13h mit 320x200x8. Dafür werden einige Batch-Dateien aus den vorigen Beiträgen verwendet, die ich hier nicht mit aufliste. Bitte von dort holen.

      @Echo off
      REM Start5.bat
      call SetMode.bat 13
      call WritDac.bat 33 0 0 3f
      call Pixel.bat 20 70 33
      pause
      call WritDac.bat 32 63 0 63
      call Rect.bat 30 30 80 70 32
      pause
      call WritDac.bat f 3f 3f 3f
      call WritDac.bat e 3f 3f 0
      call Smiley.bat 50 40
      pause
      call MCGAcls.bat
      pause
      call SetMode.bat 3

      Wir setzen einen Pixel.

      @echo off
      REM MCGA Set Pixel X Y color
      REM For 8 bit graphicmode(19): color 0-255
      REM Need three parameter(%1 %2 %3) attached.
      REM Usage: Pixel.bat X(0-13f) Y(0-c7) color(0-ff)
      echo a cs:100>tmp.deb
      echo mov ax,0A000>>tmp.deb
      echo mov di,%1>>tmp.deb
      echo mov bx,%2>>tmp.deb
      echo mov cl,%3>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov si,bx>>tmp.deb
      echo shl bx,8>>tmp.deb
      echo shl si,6>>tmp.deb
      echo lea bx,[bx+si]>>tmp.deb
      echo mov [bx+di],cl>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Pixel.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 1a>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Pixel.com
      del Pixel.com


      Wir malen ein Rechteck.

      @echo off
      REM MCGA Set rectangle x1 y1 x2 y2 color
      REM For 8 bit graphicmode(0x13): 320x200x8
      REM Need five parameter(%1 %2 %3 %4 %5) attached.
      REM Usage: Rect.bat X1(0-13f) Y1(0-c7) X2(0-13f) Y2(0-c7) color(0-ff)
      echo a cs:100>tmp.deb
      echo mov ax,0A000>>tmp.deb
      echo mov di,%1>>tmp.deb
      echo mov bx,%2>>tmp.deb
      echo mov cx,%3>>tmp.deb
      echo mov bp,%4>>tmp.deb
      echo mov dl,%5>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov si,bx>>tmp.deb
      echo shl bx,8>>tmp.deb
      echo shl si,6>>tmp.deb
      echo lea bx,[bx+si]>>tmp.deb
      echo sub cx,di>>tmp.deb
      echo lea bx,[bx+di]>>tmp.deb
      echo mov si,bp>>tmp.deb
      echo shl bp,8>>tmp.deb
      echo shl si,6>>tmp.deb
      echo lea si,[si+bp]>>tmp.deb
      echo add di,si>>tmp.deb
      echo mov ax,cx>>tmp.deb
      echo mov [bx],dl>>tmp.deb
      echo mov [di],dl>>tmp.deb
      echo inc bx>>tmp.deb
      echo inc di>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 12f>>tmp.deb
      echo mov cx,%4>>tmp.deb
      echo mov di,bx>>tmp.deb
      echo sub bx,ax>>tmp.deb
      echo sub cx,%2>>tmp.deb
      echo mov [bx],dl>>tmp.deb
      echo mov [di],dl>>tmp.deb
      echo add bx,140>>tmp.deb
      echo add di,140>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 142>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Rect.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 52>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Rect.com
      del Rect.com

      Wir malen ein Smiley.

      @echo off
      REM MCGA Draw a Smiley X Y
      REM For 8 bit graphicmode(0x13): 320x200x8
      REM Need two parameter(%1 %2) attached.
      REM Usage: Smiley.bat X(0-13f) Y(0-c7)
      echo a cs:100>tmp.deb
      echo mov ax,0A000>>tmp.deb
      echo mov di,%1>>tmp.deb
      echo mov bx,%2>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo mov si,bx>>tmp.deb
      echo shl bx,8>>tmp.deb
      echo shl si,6>>tmp.deb
      echo lea bx,[bx+si]>>tmp.deb
      echo mov si,200>>tmp.deb
      echo mov ch,10>>tmp.deb
      echo mov cl,10>>tmp.deb
      echo lodsb>>tmp.deb
      echo cmp al,0>>tmp.deb
      echo jz 12c>>tmp.deb
      echo mov dl,0f>>tmp.deb
      echo cmp al,1>>tmp.deb
      echo jz 129>>tmp.deb
      echo mov dl,0e>>tmp.deb
      echo mov es:[bx+di],dl>>tmp.deb
      echo inc di>>tmp.deb
      echo dec cl>>tmp.deb
      echo jnz 11c>>tmp.deb
      echo add di,130>>tmp.deb
      echo dec ch>>tmp.deb
      echo jnz 11a>>tmp.deb
      echo ret>>tmp.deb
      echo org 200>>tmp.deb
      echo DB 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,1,1,2,2,2,2,1,1,0,0,0,0>>tmp.deb
      echo DB 0,0,0,1,2,2,2,2,2,2,2,2,1,0,0,0>>tmp.deb
      echo DB 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0>>tmp.deb
      echo DB 0,1,0,0,0,0,0,2,2,0,0,0,0,0,1,0>>tmp.deb
      echo DB 1,2,0,0,0,0,0,0,0,0,0,0,0,0,2,1>>tmp.deb
      echo DB 1,2,2,0,0,0,0,0,0,0,0,0,0,2,2,1>>tmp.deb
      echo DB 1,2,2,0,0,0,0,2,2,0,0,0,0,2,2,1>>tmp.deb
      echo DB 1,2,2,2,0,0,0,2,2,0,0,0,2,2,2,1>>tmp.deb
      echo DB 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1>>tmp.deb
      echo DB 0,1,2,2,0,2,2,2,2,2,2,0,2,2,1,0>>tmp.deb
      echo DB 0,1,2,2,2,0,0,0,0,0,0,2,2,2,1,0>>tmp.deb
      echo DB 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0>>tmp.deb
      echo DB 0,0,0,1,2,2,2,2,2,2,2,2,1,0,0,0>>tmp.deb
      echo DB 0,0,0,0,1,1,2,2,2,2,1,1,0,0,0,0>>tmp.deb
      echo DB 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0>>tmp.deb
      echo.>>tmp.deb
      echo n Smiley.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 200>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Smiley.com
      del Smiley.com


      Wir löschen den Bildschirm.

      @echo off
      REM MCGA CLEAR SCREEN
      REM No parameter needed. Clear the entire MCGA graphic screen in A000.
      REM Usage: MCGAcls.bat
      echo e cs:100>tmp.deb
      echo b8 00 a0 b9 80 3e 31 ff 8e c0 66 31 c0 66 f3 ab c3>>tmp.deb
      echo.>>tmp.deb
      echo n MCGAcls.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 11>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      MCGAcls.com
      del MCGAcls.com
    • In diesem Beitrag wandeln wir Zahlen um.

      Von Dezimal nach Hexadezimal. Max 10 Ziffer für Eingabe des dezimalen Wertes.

      @echo off
      REM Dec2Hex %decimal
      if exist Dec2Hex.com goto Execute
      echo e cs:100>tmp.deb
      echo 8C C8 BF CF 01 BD F7 01 8E C0 B4 62 CD 21 8E DB BE 80 00 8A 04 3C 02 0F 82 B0 00 3C 0B 76>>tmp.deb
      echo 08 80 7C 0E 3E 0F 85 A4 00 FE C8 83 C6 02 26 88 46 00 B1 0A 8A 04 46 3C 0D>>tmp.deb
      echo.>>tmp.deb
      echo e cs:137>>tmp.deb
      echo 74>>tmp.deb
      echo 12 2C 30 3C>>tmp.deb
      echo 09 0F 8F 8A 00 26 88 05 83 C7 04 FE C9 75 E7 8C C8 8E D8 A0 F7 01 8A F0 FE C8 8A C8 8A D0>>tmp.deb
      echo 74 23 BF CF 01 66 8B 05 66 8B D8 66 C1 E0 03 66 03 DB 66 03 C3 FE C9 66 89 05 75 E9 83 C7>>tmp.deb
      echo 04 FE CA 8A CA 75 E0 66 33 C0 BE CF 01 66 03 04 83 C6 04 FE CE 75 F6 BF FB 01 B1 08 66 C1>>tmp.deb
      echo C0 04 8A D8 80 E3 0F 80 C3 30 80 FB 39 76 03 80 C3 07 88 1D 47 FE C9 75 E5 BE FA 01 8B D6>>tmp.deb
      echo 42 46 80 3C 30 74 FA 83 EE 0A 3B F2 74 05 83 C6 0A 8B D6 B4 09 CD 21 B4 4C CD 21 00 00 00>>tmp.deb
      echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>>tmp.deb
      echo 00 00 00 00 00 00 00 00 00 00 00 30 30 30 30 30 30 30 30 20 24>>tmp.deb
      echo.>>tmp.deb
      echo rcx>>tmp.deb
      echo 105>>tmp.deb
      echo n Dec2Hex.com>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      :Execute
      Dec2Hex.com %1

      Von Hexadezimal nach Dezimal. Max. FFFFFFFF für Eingabe.

      @echo off
      REM Hex2Dec %hexadecimal
      if exist Hex2Dec.com goto Execute
      echo e cs:100>tmp.deb
      echo b4 62 cd 21 8e db be 80 00 8a 04 3c 02 0f 82 9a>>tmp.deb
      echo 00 3c 09 76 08 80 7c 0c 3e 0f 85 8e 00 83 c6 02>>tmp.deb
      echo 66 33 c0 b1 08 8a 1c 46 80 eb 30 80 fb 0a 72 1a>>tmp.deb
      echo 80 fb 11 72 76 80 fb 17 72 0D>>tmp.deb
      echo.>>tmp.deb
      echo e cs:13A>>tmp.deb
      echo 80>>tmp.deb
      echo fb 31 72 6c 80>>tmp.deb
      echo fb 36 77 67 80 eb 20 80 eb 07 0a c3 80 3c 0D>>tmp.deb
      echo.>>tmp.deb
      echo e cs:14F>>tmp.deb
      echo 74>>tmp.deb
      echo.>>tmp.deb
      echo e cs:150>>tmp.deb
      echo 08>>tmp.deb
      echo 66 c1 e0 04 fe c9 75 cc 8c cb 8e db bf af 01>>tmp.deb
      echo b1 0a 66 bb 00 ca 9a 3b 66 33 d2 66 f7 f3 04 30>>tmp.deb
      echo 66 8b f2 88 05 47 66 8b c3 66 bb 0a 00 00 00 66>>tmp.deb
      echo 33 d2 66 f7 f3 66 8b d8 66 8b c6 fe c9 75 d9 be>>tmp.deb
      echo ae 01 8b d6 42 46 80 3c 30 74 fa 83 ee 0a 3b f2>>tmp.deb
      echo 74 05 83 c6 0a 8b d6 b4 09 cd 21 b4 4c cd 21 30>>tmp.deb
      echo 30 30 30 30 30 30 30 30 30 20 24>>tmp.deb
      echo.>>tmp.deb
      echo rcx>>tmp.deb
      echo bb>>tmp.deb
      echo n Hex2Dec.com>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      :Execute
      Hex2Dec.com %1>>conv.tmp


      Wenn ihr Fragen zu den Batch-Dateien habt, dann versuche ich es noch besser zu erklären.

      Wenn ihr noch weitere Ideen habt, was man alles programieren könnte, dann laßt es mich wissen.
      Ich bin für weitere Vorschläge dankbar.

      Sagt bitte auch bescheid, wenn ihr die Batch-Dateien erfolgreich zum laufen bekommen habt.
      Ich wünsche euch viel Spaß damit.
    • Nachdem ich darüber etwas nachgedacht habe, wie ich denn mit der Erklärung dafür anfange, bin ich noch nicht so wirklich weit gekommen.
      Hier geht es ja um die Funktionsweise der CPU, sowie auch verschiedene Bios- und System-Funktionen von DOS.

      Die CPU hat einige CPU-Register die dazu da sind Werte zu verarbeiten, Adressen zu beinhalten, Daten zu transportieren und den Programm-Fluß/Ablauf zu steuern. Der Zugriff auf die CPU-Register ist dabei am schnellsten, viel Schneller als ein RAM-Zudriff auf den Speicher (wenn noch nicht im L1-cache).

      Manche Register können nicht beliebig verwendet werden, sondern sind für bestimmte Aufgaben und bestimmte Befehle vorbestimmt und zugeordnet.
      Manche der "Befehle" verwenden keine Operanden und andere Befehl haben Operanden mit angehängt.

      Und dafür verwendet Debug den Intel-Syntax, wenn mehrere Operanden verwendet werden.

      Befehl Ziel, Quelle

      mov ax,20
      Das AX-Register bekommt durch diesen Move-Befehl den Wert 20.

      ------------------------------------
      CPU-Register Intel 80386
      ------------------------------------
      DWORD
      32 Bit: EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP,EIP
      WORD:
      16 Bit: AX,BX,CX,DX,SI,DI,BP,SP,IP
      BYTE:
      8 Bit high byte: AH,BH,CH,DH
      8 Bit low Byte: AL,BL,CL,DL

      Die Segment-Register: CS,SS,DS,ES,FS,GS
      Das Flag-Register


      -------------
      RAM-Speicher
      -------------
      Adresse FFFFF
      ...
      ...
      Adresse C0000 ROM Bios der Grafikkarte
      ...
      Adresse B8000 Text-Bildschirm
      ...
      Adresse A0000 Grafik-Bildschirm
      ...
      --- Hier ist unser Programm -----
      ...
      Adresse 1000
      ...
      ...
      ...
      Adresse 10
      ...
      ...
      Adresse 3
      Adresse 2
      Adresse 1
      Adresse 0

      Im Realmode werden die Adressen für die Ausführung von Befehlen aus einem Segment-Register und einem Offset-Register zusammen gesetzt. SegReg+Offset bilden einen Adresse.

      CS:IP bildet die Adresse vom nächsten Befehl der ausgeführt werden soll. Nachdem der Befehl ausgeführt wurde, wird das IP-Register auf den darauf folgenden Befehl gesetzt/erhöht und der nächste Befehl ausgeführt usw..

      .....

      Zusammenfassung:
      Dieser Beitrag beschäftigt sich mit den CPU-Registern, dem Speicher, die Adressierung und den Befehlen im allgemeinen.

      Es bleiben vermutlich noch viele Fragen unbeantwortet.
      Wenn etwas unklar geblieben ist bitte nachfragen.

      Im nächsten Abschnitt werde ich auf die verwendeten Befehle in einer Batch-Datei näher eingehen.

      Die Cursor.bat erklärt:
      en.wikipedia.org/wiki/INT_10H

      Um die Cursor-Position zu setzen, müssen wir in den angegebenen Registern bestimmte Werte laden.

      Set cursor position AH=02h BH = Page Number, DH = Row, DL = Column

      @echo off
      REM Set the cursor position on screen.
      REM Need three parameter(%1 %2 %3) attached.
      REM need only hexadecimal values
      REM Usage: Cursor page(0-7) column(0-0x4f) row(0-0x18)
      REM (Page 0 default)

      Ich habe die Echo-Befehle und Umleitung mal entfernt.

      acs:100 Bringt debug dazu ab Adresse CS:0100 unsere nachfolgenden Assembler Mnemonics anzunehmen.
      mov bh,%1 Mit diesen Befehl wird ein Wert in das BH-Register geladen.
      mov dh,%2 Mit diesen Befehl wird ein Wert in das DH-Register geladen.
      mov dl,%3 Mit diesen Befehl wird ein Wert in das DL-Register geladen.
      mov ah,2 Mit diesen Befehl wird ein Wert in das AH-Register geladen.
      int 10
      Mit diesen Befehl wird ein Software Interrupt ausgelöst und damit zu einer Bios-Routine gesprungen dessen
      Adresse sich an der Speicherstelle befindet, die sich aus der Nummer des aufgerufenen Software-Interrupts mal 4 zusammensetzt.

      ret Damit wird unser *.com Programm beendet und zurück in den PSP gesprungen, wo sich ein int 20 befindet, der uns zurück nach DOS bringt.


      n cursor.com Wer tragen eine Programmnamen ein.
      rcx Wir wollen in das CX-Register einen Wert schreiben
      b Das ist die Filelänge.
      wcs:100 Wir speichern unser Programm.
      q Debug wird beendet
      debug<tmp.deb>nul Debug bekommt die temporäre Datei und wird damit gestartet, doch die Ausgabe von Degug wird auf Gerät Nul umgeleitet und wird vernichtet.

      del tmp.deb
      Cursor.com Anwenung wird gestarten.
      del Cursor.com

      ....

      In der "TGARead.bat" sind einige REM Kommentare enthalten, die es erleichtern sollen die verwendeten Bestandteile zu erkennen.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Hans Muster ()

    • Drei neue Batch-Dateien für den Textmode sind fertig geworden: Soft25.bat, Curoff.bat und Curon.bat

      Ein Softscroller der den Standard-Text-Bildschirm 80 Spalten x Zeilen mit 8x16 chars pixelweise nach oben verschiebt.
      Dabei ensteht ein butterweiches Scrollen, so daß der Inhalt beim Scrollen lesbar bleibt und nicht mehr ruckelt.

      Testet es bitte selber einmal aus.

      Beispiel:
      dir
      Soft25.bat 18

      Hinweis: Werden weniger als hex 18 Zeilen verwendet, sollte der Bereich darunter leer sein, da sonst diese Zeichen dort hin und her ruckeln.

      Erklärung:
      Im ersten Schritt wird von der 2. Zeile bis zur letzten Zeile der Inhalt vom Bildschirm in die erste Zeile kopiert.
      (Danach wird der Vorgang so oft wie Zeilen angegeben sind wiederholt.)
      Doch bevor der erste Schritt ausgeführt wird, wird der gesamte Bildschirm pixelweise nach oben verschoben wo durch der Übergang zum nächsten Feld darüber Pixel für Pixel näher rückt und dann erst der tatsächliche Kopiervorgang der Zeichen stattfindet.


      @echo off
      REM Soft Scroller
      REM Need one parameter(%1) attached.
      REM Usage: Soft25.bat rows
      REM Example: Soft25.bat 18
      REM rows(hex 1-18)
      echo acs:100>tmp.deb
      echo mov ax,0B800>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo mov bx,%1>>tmp.deb
      echo xor di,di>>tmp.deb
      echo mov si,A0>>tmp.deb
      echo xor ah,ah>>tmp.deb
      echo mov cx,3C0>>tmp.deb
      echo mov al,8>>tmp.deb
      echo mov dx,3D4>>tmp.deb
      echo out dx,ax>>tmp.deb
      echo inc ah>>tmp.deb
      echo mov dx,3DA>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jnz 011F>>tmp.deb
      echo in al,dx>>tmp.deb
      echo test al,8>>tmp.deb
      echo jz 0124>>tmp.deb
      echo cmp ah,10>>tmp.deb
      echo jnz 0114>>tmp.deb
      echo mov ax,8>>tmp.deb
      echo mov dx,3D4>>tmp.deb
      echo out dx,ax>>tmp.deb
      echo rep movsd>>tmp.deb
      echo dec bx>>tmp.deb
      echo jnz 010A>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Soft25.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 3C>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Soft25.com
      del Soft25.com

      ---------------------------------------------------------------

      Diese Batchdatei macht den Cursor unsichtbar.

      @echo off
      REM Cursor off
      echo acs:100>tmp.deb
      echo mov ah,1>>tmp.deb
      echo mov ch,20>>tmp.deb
      echo mov cl,0>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Curoff.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 9>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>deb.inf
      del tmp.deb
      Curoff.com
      del Curoff.com

      Diese Batchdatei macht den Cursor wieder sichtbar.

      @echo off
      REM Cursor on
      echo acs:100>tmp.deb
      echo mov ah,1>>tmp.deb
      echo mov ch,2>>tmp.deb
      echo mov cl,4>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n Curon.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 9>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>deb.inf
      del tmp.deb
      Curon.com
      del Curon.com
    • Hallo Leute.
      In diesen Beitrag geht es heute erneut wieder einmal um die Charakter-Muster der ASCII-Zeichen, oder genauer gesagt darum ein monochromes Bild im Textmode anzuzeigen und dafür die Character-Muster der ASCII-Zeichen entsprechend zu verändern.

      Und dafür habe ich eine Bildgröße von 112 x 112 Pixel mit zwei Farben ausgewählt. (Jeder Pixel vom Bild entspricht 1 bit.)
      Und die lassen sich horizontal in 14 ASCII Zeichen je 8 bit und vertical in 7 ASCII Zeichen je 16 bit plazieren mit einem Block aus
      14*7=98 ASCII Zeichen zur Anzeigen bringen.

      Nun brauchen wir nur noch die Bilder die angezeigt werden sollen.

      Ich habe dafür einige Bilder aus dem Internet heraus gesucht, im Paint-Programm von Windows geöffnet, ausgeschnitten, verkleinert und mit einer Größe von 112x112 Pixel als "*.tiff" gespeichert.
      Dann vom DOSBOX-Prompt aus Pictview gestartet, die Farben der Bilder auf 2 Farben reduziert und sie jeweils als TGA-Bild gespeichert.

      Die Bilder haben jeweils eine Datei-Länge von 1592 Bytes und bestehen aus dem Datei-Header mit 24 Bytes, 6 Bytes für zwei Farben und den Bilddaten.

      Resolution: 112 * 112 Pixel 2 Color

      BUTTERFL.TGA
      CLOCK.TGA
      EARTH.TGA
      FISH.TGA
      HEAD.TGA
      PIC1.TGA
      PIC2.TGA
      SKULL.TGA
      SKULL2.TGA
      SKYLINE.TGA
      SUNGLASS.TGA
      TILES.TGA
      YINYANG.TGA

      Download: Image.zip (10.719 Byte)
      ufile.io/tvyb2j09

      Limit: Nur 30 Tage verfügbar
      Upload Datum: 26.04.2019
      uploadfiles.io/


      Welche Datei macht was:
      Mit der Batch-Datei "ShowTGA.bat" wird ein Block aus 14*7 ASCII-Zeichen angefangen mit ASCII 128,129,130,...usw. zum Bildschirm geschrieben und angezeigt. Und die Batch-Datei "CharTGA.bat" läd ein TGA-Bild und konvertiert die Bild-Daten in 98 ASCII Character.

      Zum Ausprobieren habe ich erneut eine Start.bat vorbereitet in der die Verwendung von der ShowTGA.bat und der CharTGA.bat gezeigt wird.

      Hinweis: Es werden auch drei weitere Batch-Dateien aus vorigen Beiträgen verwendet, die in diesem Beitrag nicht mit aufgelistet sind.
      Das sind die Dateien "Cursor.bat", "Textcol.bat" und "soft25.bat". Diese Dateien bitte dort entnehmen.

      Ablauf:
      Es wird zu erst der besagte Block mit 14*7 ASCII-Zeichen in Original angezeigt und im Anschluß daran auf Tastendruck gewartet.
      Danach wird ein Bild geladen und angezeigt und erneut auf Tastendruck gewartet.
      Der Vorgang wiederholt sich bis zum letzten Bild und am Ende scrollt alles nach oben raus.

      Weiterführende Gedanken:
      Statt jeweils nur ein Bild zu laden und anzuzeigen könnte auch eine Bildfolge geladen und als Daumenkino ein kleiner Film abgepielt werden.
      Dafür würde ich dann allerdings lieber eine gesonderte Routine schreiben, wo die Anzeigefrequenz der Bildfolge mit dem Rasterstrahl syncrhronisiert und nicht durch ein Tastendruck ins Stottern gebracht wird. Wenn jemand Talent dafür hat kleine Strichzeichnungen mit 112*112 Pixel zu entwerfen und zum Leben zu erwecken, dann bitte melden.


      @Echo off
      REM Start6.bat
      cls
      call ShowTGA.bat 21 9
      pause
      call Cursor.bat 0 8 21
      call Textcol.bat 8 21 30 E
      echo -BUTTERFL.TGA-
      call CharTGA.bat BUTTERFL.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 6
      pause
      call Cursor.bat 0 8 21
      echo -FISH.TGA -
      call CharTGA.bat FISH.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 7
      pause
      call Cursor.bat 0 8 21
      echo -CLOCK.TGA -
      call CharTGA.bat CLOCK.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 3
      pause
      call Cursor.bat 0 8 21
      echo -PIC1.TGA -
      call CharTGA.bat PIC1.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 4
      pause
      call Cursor.bat 0 8 21
      echo -PIC2.TGA -
      call CharTGA.bat PIC2.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 3
      pause
      call Cursor.bat 0 8 21
      echo -SKULL.TGA -
      call CharTGA.bat SKULL.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 2
      pause
      call Cursor.bat 0 8 21
      echo -SKULL2.TGA -
      call CharTGA.bat SKULL2.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 1
      pause
      call Cursor.bat 0 8 21
      echo -HEAD.TGA -
      call CharTGA.bat HEAD.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 A
      pause
      call Cursor.bat 0 8 21
      echo -EARTH.TGA -
      call CharTGA.bat EARTH.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 7
      pause
      call Cursor.bat 0 8 21
      echo -SKYLINE.TGA -
      call CharTGA.bat SKYLINE.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 A
      pause
      call Cursor.bat 0 8 21
      echo -SUNGLASS.TGA-
      call CharTGA.bat SUNGLASS.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 B
      pause
      call Cursor.bat 0 8 21
      echo -TILES.TGA -
      call CharTGA.bat TILES.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 C
      pause
      call Cursor.bat 0 8 21
      echo -YINYANG.TGA -
      call CharTGA.bat YINYANG.TGA
      call Cursor.bat 0 10 1B
      call Textcol.bat 10 1B 35 D
      pause
      call soft25.bat 12





      @echo off
      REM ShowTGA.bat
      REM Draw a block of 14*7 ASCII
      REM Need two parameter(%1 %2) attached.
      REM Usage: ShowTGA.bat column row
      echo a cs:100>tmp.deb
      echo mov ax,B800>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo mov bx,%1>>tmp.deb
      echo mov di,%2>>tmp.deb
      echo mov si,%2>>tmp.deb
      echo shl di,7>>tmp.deb
      echo add bx,bx>>tmp.deb
      echo shl si,5>>tmp.deb
      echo add di,bx>>tmp.deb
      echo add di,si>>tmp.deb
      echo mov al,80>>tmp.deb
      echo mov bx,7>>tmp.deb
      echo mov cx,E>>tmp.deb
      echo mov [di],al>>tmp.deb
      echo inc al>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0122>>tmp.deb
      echo add di,84>>tmp.deb
      echo dec bx>>tmp.deb
      echo jnz 011F>>tmp.deb
      echo ret>>tmp.deb
      echo.>>tmp.deb
      echo n ShowTGA.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 34>>tmp.deb
      echo w cs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      ShowTGA.com
      del ShowTGA.com






      @echo off
      REM Usage: CharTGA.bat filename
      echo acs:100>tmp.deb
      REM Resize RAM
      echo mov bx,cs>>tmp.deb
      echo mov ax,sp>>tmp.deb
      echo add ax,F>>tmp.deb
      echo shr ax,4>>tmp.deb
      echo add bx,ax>>tmp.deb
      echo mov ah,4A>>tmp.deb
      echo int 21>>tmp.deb
      REM GET free Ram (16 KB)
      echo mov ah,48>>tmp.deb
      echo mov bx,400>>tmp.deb
      echo int 21>>tmp.deb
      echo mov [0200],ax>>tmp.deb
      REM --- OPEN file ---
      echo mov dx,0220>>tmp.deb
      echo mov ax,3D00>>tmp.deb
      echo int 21>>tmp.deb
      echo jc 01DE>>tmp.deb
      echo mov bx,ax>>tmp.deb
      echo mov [0206],ax>>tmp.deb
      REM --- Get file size (LSEEK) ---
      echo mov ax,4202>>tmp.deb
      echo xor cx,cx>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo int 21>>tmp.deb
      echo mov [0202],cx>>tmp.deb
      echo mov [0204],dx>>tmp.deb
      REM -- Set file pointer to start --
      echo mov ax,4200>>tmp.deb
      echo xor cx,cx>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo int 21>>tmp.deb
      REM ;-- READ file TGA-Header --
      echo mov dx,0208>>tmp.deb
      echo mov cx,18>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo mov ah,3F>>tmp.deb
      echo int 21>>tmp.deb
      REM ;-- READ file TGA-body --
      echo mov cx,[0202]>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo sub cx,18>>tmp.deb
      echo mov ax,[0200]>>tmp.deb
      echo mov ds,ax>>tmp.deb
      echo xor dx,dx>>tmp.deb
      echo mov ah,3F>>tmp.deb
      echo int 21>>tmp.deb
      echo mov ax,cs>>tmp.deb
      echo mov ds,ax>>tmp.deb
      REM ;-- CLOSE file --
      echo mov ah,3E>>tmp.deb
      echo mov bx,[0206]>>tmp.deb
      echo int 21>>tmp.deb
      REM ;-- Convert to character --
      echo mov ax,[0200]>>tmp.deb
      echo mov si,612>>tmp.deb
      echo mov di,1000>>tmp.deb
      echo mov ds,ax>>tmp.deb
      REM ---
      echo mov cx,E>>tmp.deb
      echo mov al,[si]>>tmp.deb
      echo inc si>>tmp.deb
      echo mov [di],al>>tmp.deb
      echo inc di>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0183>>tmp.deb
      echo sub si,1C>>tmp.deb
      echo cmp si,0>>tmp.deb
      echo jnz 0180>>tmp.deb
      REM ---
      echo mov cx,E>>tmp.deb
      echo mov al,[si]>>tmp.deb
      echo inc si>>tmp.deb
      echo mov [di],al>>tmp.deb
      echo inc di>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0197>>tmp.deb
      REM ----------
      echo mov si,1000>>tmp.deb
      echo mov di,2000>>tmp.deb
      echo mov dx,7>>tmp.deb
      echo mov cx,E>>tmp.deb
      echo mov bp,10>>tmp.deb
      echo mov al,[si]>>tmp.deb
      echo add si,E>>tmp.deb
      echo mov [di],al>>tmp.deb
      echo inc di>>tmp.deb
      echo dec bp>>tmp.deb
      echo jnz 01AF>>tmp.deb
      echo sub si,DF>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 01AC>>tmp.deb
      echo add si,D2>>tmp.deb
      echo dec dx>>tmp.deb
      echo jnz 01A9>>tmp.deb
      REM ---------------------------
      REM Define a new character layout for to display a picture
      REM with a block of 14*7 ASCII = 98 ASCII
      REM on a textscreen with 80 collumns and 25 rows
      REM each character of an ASCII is made with a block of 8*16 Pixel
      REM horizontal: 14 ASCII * 8 Pixel = 112 Pixel
      REM vertical: 7 ASCII * 16 Pixel = 112 Pixel
      REM total: 98 ASCII * 16 Byte = 1568(0x620) Byte
      REM start with ASCII 128
      echo mov ax,ds>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo mov ax,1110>>tmp.deb
      echo mov bp,2000>>tmp.deb
      echo mov cx,62>>tmp.deb
      echo mov dx,80>>tmp.deb
      echo xor bl,bl>>tmp.deb
      echo mov bh,10>>tmp.deb
      echo int 10>>tmp.deb
      echo ret>>tmp.deb
      REM ---------------------------
      echo org 200>>tmp.deb
      REM TGASEG 0200
      echo DW 0>>tmp.deb
      REM FLEN 0202
      echo DW 0,0>>tmp.deb
      REM HANDLE 0206
      echo DW 0>>tmp.deb
      REM ----
      REM TGAHEAD 0208
      echo DB 0>>tmp.deb
      REM TABLE 0209
      echo DB 1>>tmp.deb
      REM COMP 020A
      echo DB 3>>tmp.deb
      REM DACOFF 020B
      echo DW 0>>tmp.deb
      REM DACLEN 020D
      echo DW 2>>tmp.deb
      REM DACBIT 020F
      echo DB 18>>tmp.deb
      REM X1 0210
      echo DW 0>>tmp.deb
      REM Y1 0212
      echo DW 0>>tmp.deb
      REM XLEN 0214
      echo DW 64>>tmp.deb
      REM YLEN 0216
      echo DW 64>>tmp.deb
      REM BPP 0218
      echo DB 1>>tmp.deb
      REM DIREKT 0219
      echo DB 0>>tmp.deb
      REM Color 021A
      echo DB 0,0,0,FF,FF,FF>>tmp.deb
      REM ----
      REM Filename 0220
      echo DB "%1",0>>tmp.deb
      REM ---------------------------
      echo.>>tmp.deb
      echo n CharTGA.com>>tmp.deb
      echo rcx>>tmp.deb
      echo 130>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      CharTGA.com
      del CharTGA.com

      Ich wünsche euch viel Spaß damit, wenn ihr eure eigenen kleinen Bilder, Logos ect.. zur Anzeige bringt.
    • Hallo alle zusammen, nun ist es wieder soweit.
      Ich habe zwei neue Batch files zusammen gebastelt für den Grafikmode mit 320x200x8 Mode 13h.
      Dieses mal ist eine MCGALINE.BAT mit einem sich selbst modifizierenden Bresanham Algorithmus und eine CIRCLE.BAT, die auf Basis von Wurzel-Berechnungen ihre Runde dreht.
      (Nur für relativ kleine Kreise geeignet, wegen unpräzise. Für grössere Kreise und höhere Auflösung wären sin/cos Berechnungen geeigneter.)

      Ich habe dazu auch wieder jeweils eine Start.bat mit beigefügt, um zu zeigen wie die Linie und der Kreis mit Parameter aufgerufen werden.
      Hinweis: 2 Batch files aus vorigen Beiträgen werden verwendet: SetMode.bat und WritDac.bat. Bitte von dort holen.

      Die Linie darf an jeder Stelle vom Bildschirm innerhalb der Auflösung von 320-1 und 200-1 anfangen und enden, doch alle Werte müssen in hexadecimal angegeben werden. Alle Richtungen von oben bis unten, von rechts nach links und auch jeweils anders herum sind erlaubt.
      In beiden batch files sind auch noch weitere Remarks vorhanden. Am Anfang wird eine Adress-Tabelle erzeugt für 200 Zeilen. Mit der Y-Koordinate wird die Zeilen-Adresse geholt + X = Position.

      @Echo off
      REM *Start7.bat*
      call SetMode.bat 13
      call WritDac.bat 33 33 70 00
      call MCGALINE.BAT 8E 88 62 33 33
      call WritDac.bat 34 00 33 70
      call MCGALINE.BAT 3E 32 A3 88 34
      pause
      call SetMode.bat 3

      @echo off
      REM Draw a Bresenham line in 320x200x8 graphic mode (0x13)
      REM Need 5 parameter attached
      REM Usage: *MCGALINE.BAT* X1 Y1 X2 Y2 Color
      REM X=0 - 13f
      REM Y=0 - c7
      REM Color=0 - ff
      echo acs:100>tmp.deb
      echo mov di,200>>tmp.deb
      echo mov cx,c7>>tmp.deb
      echo mov [di],ax>>tmp.deb
      echo add ax,140>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0106>>tmp.deb
      REM ;-------------------------------------
      echo mov ax,A000>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo mov bx,%1>>tmp.deb
      echo mov si,%2>>tmp.deb
      echo mov cx,%3>>tmp.deb
      echo mov di,%4>>tmp.deb
      REM Code for: INC AX // INC BX
      echo mov ax,4043>>tmp.deb
      echo mov dx,di>>tmp.deb
      echo sub cx,bx>>tmp.deb
      REM echo jge short DAX>>tmp.deb
      echo jge 012f>>tmp.deb
      REM Code for DEC BX
      echo mov al,4B>>tmp.deb
      echo neg cx>>tmp.deb
      REM DAX: 012f
      echo sub dx,si>>tmp.deb
      REM echo jge short DAY>>tmp.deb
      echo jge 0137>>tmp.deb
      REM Code for DEC AX
      echo mov ah,48>>tmp.deb
      echo neg dx>>tmp.deb
      REM DAY: 0137
      echo cs:>>tmp.deb
      REM echo mov [G],ax>>tmp.deb
      echo mov [0173],ax>>tmp.deb
      echo cmp cx,dx>>tmp.deb
      REM echo jge short DAB>>tmp.deb
      echo jge 0149>>tmp.deb
      echo mov al,90>>tmp.deb
      echo mov bp,dx>>tmp.deb
      echo mov dx,cx>>tmp.deb
      echo mov cx,bp>>tmp.deb
      REM echo jmp short ACHS>>tmp.deb
      echo jmp 014b>>tmp.deb
      REM ;-------------------------------------
      REM DAB: 0149
      echo mov ah,90>>tmp.deb
      REM ACHS: 014b
      echo add dx,dx>>tmp.deb
      echo cs:>>tmp.deb
      REM echo mov [K],ax>>tmp.deb
      echo mov [016b],ax>>tmp.deb
      echo mov bp,dx>>tmp.deb
      echo sub dx,cx>>tmp.deb
      echo mov ax,si>>tmp.deb
      echo mov di,dx>>tmp.deb
      echo sub dx,cx>>tmp.deb
      REM SCHLEIF: 015b
      echo mov si,[eax*2+200]>>tmp.deb
      echo es:>>tmp.deb
      echo mov BYTE PTR[bx+si],%5>>tmp.deb
      echo and di,di>>tmp.deb
      REM echo jge short G>>tmp.deb
      echo jge 0173>>tmp.deb
      REM K: 016b
      echo inc bx>>tmp.deb
      echo inc ax>>tmp.deb
      echo add di,bp>>tmp.deb
      echo dec cx>>tmp.deb
      REM echo jnz SCHLEIF>>tmp.deb
      echo jnz 015b>>tmp.deb
      echo ret>>tmp.deb
      REM ;-------------------------------------
      REM G: 0173
      echo inc bx>>tmp.deb
      echo inc ax>>tmp.deb
      echo add di,dx>>tmp.deb
      echo dec cx>>tmp.deb
      REM echo jnz SCHLEIF>>tmp.deb
      echo jnz 015b>>tmp.deb
      echo ret>>tmp.deb
      REM ;-------------------------------------
      echo.>>tmp.deb
      echo n MCGALINE.COM>>tmp.deb
      echo rcx>>tmp.deb
      echo 7b>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>deb.inf
      del tmp.deb
      MCGALINE.COM
      del MCGALINE.COM



      @Echo off
      REM *Start8.bat*
      call SetMode.bat 13
      call WritDac.bat 33 33 70 00
      call CIRCLE.BAT 80 60 12 33
      pause
      call SetMode.bat 3


      @echo off
      REM Draw a circle in 320x200x8
      REM Need 4 parameter attached.
      REM Usage: *Circle.bat* X Y Radius Color
      REM ;-------------------------------------
      REM Build an address table of 200 lines
      echo a cs:100>tmp.deb
      echo mov di,200>>tmp.deb
      echo mov cx,c7>>tmp.deb
      echo mov [di],ax>>tmp.deb
      echo add ax,140>>tmp.deb
      echo add di,2>>tmp.deb
      echo dec cx>>tmp.deb
      echo jnz 0106>>tmp.deb
      REM ;-------------------------------------
      echo mov ax,A000>>tmp.deb
      echo mov es,ax>>tmp.deb
      echo finit>>tmp.deb
      echo mov cx,%3>>tmp.deb
      echo mov ax,cx>>tmp.deb
      echo mul ax>>tmp.deb
      echo xor di,di>>tmp.deb
      echo mov si,ax>>tmp.deb
      echo xor ax,ax>>tmp.deb
      REM ;----------------------------------------------
      REM RUNDE: 0126
      echo mov bp,si>>tmp.deb
      echo mul ax>>tmp.deb
      echo sub bp,ax>>tmp.deb
      echo mov [01A8], bp>>tmp.deb
      echo fild [01A8]>>tmp.deb
      echo fsqrt>>tmp.deb
      echo fistp [01A8]>>tmp.deb
      echo mov bp,[01A8]>>tmp.deb
      REM call HALB
      echo call 0152>>tmp.deb
      echo mov ax,di>>tmp.deb
      echo mov di,bp>>tmp.deb
      echo mov bp,ax>>tmp.deb
      REM call HALB
      echo call 0152>>tmp.deb
      echo inc bp>>tmp.deb
      echo mov di,bp>>tmp.deb
      echo cmp cx,bp>>tmp.deb
      REM jnz RUNDE
      echo jnz 0126>>tmp.deb
      echo ret>>tmp.deb
      REM ;----------------------------------------------
      REM HALB: 0152
      echo mov bx,[01A4]>>tmp.deb
      echo mov dx,[01A0]>>tmp.deb
      echo add bx,bp>>tmp.deb
      echo add dx,di>>tmp.deb
      REM call PIXEL
      echo call 018D>>tmp.deb
      echo mov bx,[01A4]>>tmp.deb
      echo mov dx,[01A0]>>tmp.deb
      echo add bx,bp>>tmp.deb
      echo sub dx,di>>tmp.deb
      REM call Pixels
      echo call 018D>>tmp.deb
      echo mov bx,[01A4]>>tmp.deb
      echo mov dx,[01A0]>>tmp.deb
      echo sub bx,bp>>tmp.deb
      echo add dx,di>>tmp.deb
      echo inc bx>>tmp.deb
      REM call PIXEL
      echo call 018D>>tmp.deb
      REM mov bx, [YM]
      echo mov bx,[01A4]>>tmp.deb
      REM mov dx, [XM]
      echo mov dx, [01A0]>>tmp.deb
      echo sub bx,bp>>tmp.deb
      echo sub dx,di>>tmp.deb
      echo inc bx>>tmp.deb
      REM ;----------------------------------------------
      REM PIXEL: 018D
      echo add bx,bx>>tmp.deb
      echo mov bx,[bx+0200]>>tmp.deb
      echo add bx,dx>>tmp.deb
      echo es:>>tmp.deb
      echo mov BYTE PTR[bx],%4>>tmp.deb
      echo ret>>tmp.deb
      REM ;----------------------------------------------
      echo org 01A0>>tmp.deb
      REM XM
      echo DW %1,0>>tmp.deb
      REM YM
      echo DW %2,0>>tmp.deb
      REM Y
      echo DW 0,0>>tmp.deb
      REM ;----------------------------------------------
      echo.>>tmp.deb
      echo n Circle.com>>tmp.deb
      echo rcx>>tmp.deb
      echo AC>>tmp.deb
      echo wcs:100>>tmp.deb
      echo q>>tmp.deb
      debug<tmp.deb>nul
      del tmp.deb
      Circle.com
      del Circle.com