Infos über mein DOS

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Brueggi

Infos über mein DOS

Beitrag von Brueggi »

Hallo User, hallo Wobo :-)

An die Mods: Falls das Thema hier nix verloren hat, bitte Bescheid geben und ggf. dicht machen / löschen. Aber ich denke, dass "Off Topic" ein guter Bereich dafür ist.
Seit einiger Zeit schreibe ich ja mein eigenes DOS für den PC. Zur Vorgeschichte: Vor einigen Jahren hab ich mal für den Schneider CPC (kennt den jemand hier?) eine Festplattenerweiterung geschrieben - da hat es mich schon in den Fingern gejuckt, da mal ein richtiges DOS zu machen. Irgendwann hab ich dann (mehr durch Zufall) angefangen, mit Bootsektoren und Bootcode zu experimentieren. Naja, und bis zum ersten Mini-Kernel waren es dann nur noch wenige Schritte :-)
Ein Kumpel hat irgendwann mal vorgeschlagen, ich soll es nach unserem Dackel benennen - und so kam es dann zum Namen "BonnyDOS"...

Geschrieben ist das DOS, sowie alle zugehörigen Programme in Maschinensprache. Mindestanforderung an den Computer ist ein 80286 Prozessor, 3.5"-HD Floppy und eine 256K-VGA-Karte (MCGA dürfte auch gehen) und 640K konventioneller Speicher. Der Grund, warum ich mich auf genau diese Konfiguration festgenagelt habe, ist der, das diese Konfig halt am meisten verbreitet ist. Und ich hatte mal 2 IBM PS/2-286er - da war sowas wohl normal :-) Allerdings muss beachtet werden, das es natürlich besser ist, wenn eine Festplatte vorhanden ist. Wer das DOS installieren möchte, muss nur dafür sorgen, das die Partition/en in dem Bereich liegen, der vom BIOS unterstützt wird (50x MB bei alten Rechnern, oder max. im Bereich bis zu 8 GB). BonnyDOS/286 hat einen integrierten Bootmanager - hat man also MS-DOS oder sonst was zusätzlich auf Platte, kann man bequem auswählen, welches Betriebssystem gebootet wird (dabei muss aber BonnyDOS die Bootpartition sein).
Dieses "Multi-OS-Feature" wurde auf verschiedenen Rechnern getestet - inkl. auf einem P2 mit 4 GB SCSI-Platte und Windows NT. Bisher verträgt sich alles ausgezeichnit.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Da BonnyDOS/286 eine komplette Eigenentwicklung ist, kommt (auf Festplatte) natürlich auch ein eigenes Dateisystem zum Einsatz: BFS16. Eigentlich für den CPC entwickelt, wurde es leicht modifiziert und läuft nun unter V2.0 am PC. Disketten verwenden natürlich FAT12 - das erleichtert den Datenaustausch enorm, bis andere Treiber mal fertig sind. Folgende Leistungsmerkmale (neudeutsch "Features") fallen mir so spontan ein:

- Administrator-Modus (sperrt Zugriff auf Dateien/Verzeichnisse, sperren von FORMAT oder Disklaufwerken, usw.)
- Natürlich dürfen Env-Variablen nicht fehlen
- Autovervollständigung von Dateinamen (TAB-Taste)
- Schnelles Öffnen von Dateien mit SmartOpen (man gibt z. B. BUCH.TXT ein, und schon öffnet sich die mit .TXT-Dateien verknüpfte Anwendung samt Dokument)
- Online Hilfe (ala HELP <kapitel>)
- Validate-Funktion (sollte mal eine Datei nicht ordnungsgemäß geschlossen worden sein, wird dies beim nächsten Start "angeprangert" und Schreibzugriffe so lange gesperrt, bis sich der Anwender bemüht, das beiliegende HDDIAG auszuführen)

Bei der Entwicklung habe ich versucht, alles, was mir an anderen Systemen gefällt, einzubauen. So kann man z. B. mit Hilfe des Befehls RESIDENT Programme in den Arbeitsspeicher laden - ruft man das Programm dann von der Eingabeaufforderung auf, wird die Kopie im Speicher verwendet. Gerade wenn man nur mit einem Disklaufwerk ausgerüstet ist, oder nichts installieren möchte, spart man u. U. viel Zeit, da nicht mehr alles nachgeladen werden muss.

Die meisten Dinge sind optional und können natürlich auf Wunsch deaktiviert werden. So auch die Farbausgabe an der Eingabeaufforderung. So hebt DIR z. B. bis zu 14 beliebige Dateitypen farblich hervor, um diese schnell unterscheiden zu können. Von Haus aus werden APL-Dateien (Anwendungen) grün, SCR-Dateien (Scripts) Lila, Directories dunkelgrau und Textdateien (TXT) türkis gekennzeichnet (lässt sich aber ändern).
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Erstmal ein paar Screenshots, um einen besseren Einblick zu erhalten. Die Bilder wurden zum Teil mit BMPSAVER (eigenes Tool, das den Textbildschirm als BMP-Datei speichert), Teils unter QEMU (PC-Emulator) gemacht.
Dateianhänge
Die Partitionierungs-Software
Die Partitionierungs-Software
BILD3.jpg (39.96 KiB) 13608 mal betrachtet
INFO zeigt Speicher/Programme/File-Kommentare.
INFO zeigt Speicher/Programme/File-Kommentare.
BILD2.jpg (56.09 KiB) 13608 mal betrachtet
Direkt nach dem Bootvorgang
Direkt nach dem Bootvorgang
BILD1.jpg (35.52 KiB) 13608 mal betrachtet
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Ein paar Programme (meist kleinere Tools) sind auch schon fertig, zum Beispiel ein Sokoban-Clone mit 100 Levels, oder ein Programmpaket, das es erlaubt, Boot-Pictures (320*200/256 Farben) zu verwenden. Weitere Software kommt natürlich - aber als Ein-Mann-Baustelle ist es etwas schwierig, schnell für Nachschub zu sorgen. Nach langer Zeit ist dann auch ein Handbuch fertig geworden - zwar noch nicht 100% (Rechtschreibprüfung fehlt z. B.), aber ich hoffe, das sich Neulinge damit zurecht finden werden. Vor kurzem hab ich dann noch ein "Schmankerl" vom CPC übernommen, auf Wunsch werden von Dateien vor dem Überschreiben (unabhängig von der laufenden Anwendung) BAK-Dateien angelegt, so das man den letzten Stand noch griffbereit hat.... Ich hoffe die Neugier ist befriedigt - Bei Fragen: Einfach fragen :-) Falls jemand das Handbuch mal haben möchte, einfach eine PN an mich.

Anbei noch ein Screenshot der Eingabeaufforderung von BDOS, und ein paar Bilder von GOS/286 (grafische Benutzeroberfläche bzw. Betriebssystem-Aufsatz).
Dateianhänge
Der &quot;Taskmanager&quot;
Der "Taskmanager"
TASKMAN.jpg (64.29 KiB) 13606 mal betrachtet
Eigenschaften einer Verknüpfung....
Eigenschaften einer Verknüpfung....
DESKTOP2.JPG (51.6 KiB) 13606 mal betrachtet
GOS/286 - Schreibtisch (About-Box)
GOS/286 - Schreibtisch (About-Box)
DESKTOP.JPG (126.31 KiB) 13606 mal betrachtet
Das (bunte) Verzeichnis.
Das (bunte) Verzeichnis.
BILD4.jpg (22.65 KiB) 13606 mal betrachtet
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Infos über mein DOS

Beitrag von Dosenware »

Fast: Wo kann man es herunterladen? ;)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Einen Download gibts nicht, weil die Seite uralt ist :-) Aber ich schick dir mal das Archiv wenn du magst :-)
wobo
DOS-Guru
Beiträge: 613
Registriert: So 17. Okt 2010, 14:40

Re: Infos über mein DOS

Beitrag von wobo »

Wow! Der erste Eindruck übertrifft all' meine Erwartungen. So etwas Aufwendiges und anscheinend weit Fortgeschrittenes habe ich nicht erwartet. Ich war eher auf was "rohgerüstigeres" vorbereitet. Ich gebe hiermit meine Bestellung auf: Einmal die Testversion bitte nebst Handbuch! PN kommt.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

@Wobo: Mail ist raus. Und jetzt bist Du dran - ich warte auf dein Spiel :-)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Neuigkeiten: Mit Hilfe eines selbstgebastelten Tools kann man compilierte (EXE-File) TP-Programme schonmal direkt unter BDOS laufen lassen :-)
Dateianhänge
TP.JPG
TP.JPG (42.06 KiB) 13553 mal betrachtet
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Giana32K.EXE funzt als konvertiertes Programm ebenfalls, sogar mit SB-Unterstützung :-)

Leider ist der "MS-DOS-API-Emulator", der in den Lader eingefügt wird, noch etwas mager, bisher werden nur unterstützt:
DisplayString
DirectConsoleIO
ReadKeyboard
AllocMem (abgespeckt)
GetIntVec
SetIntVec
TerminateProgram und
TerminateProcess

TP macht bisher keine Zicken, nur Randomize liefert immer die selben Zufallszahlen - muss noch herausfinden, woran das liegt... :-)
Über BDOS286.TPU kann man immerhin schon Dateien auslesen, residente Programme suchen und den Cursor an/abschalten. Kommandozeilen-Parameter laufen ja weiterhin über ParamStr und ParamCount :-)

Gruß,

Brueggi
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Keine Ahnung wieso, aber GRAPH.TPU geht jetzt auch :-) Offenbar hab ich wohl nen Pointer falsch gesetzt im PAS-File - nun klappts :-)
Voraussetzung: BGI-File in die EXE linken mit $L.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Infos über mein DOS

Beitrag von DOSferatu »

Was randomize angeht: Der Befehl initialisiert bekanntlich den randseed auf einen "Zufallswert", von dem ausgehend die RANDOM() Funktion dann eine Folge von Zufallswerten generiert. Soweit ich weiß, holt randomize dazu Daten für Datum und Uhrzeit und glaub noch irgendwo aus einem Chip. Ich könnte ja mal ein kleines TP Programm schreiben, das randomize ausführt und dann im compilierten Code nachschauen, wo genau er die Daten dafür hernimmt. Sollten es Speicherstellen oder Ports oder wasweißich sein, die Dein OS nicht supportet (nicht mit Werten befüllt, etc), so wäre geklärt, wieso randomize immer dieselben Startwerte liefert.
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Re: Infos über mein DOS

Beitrag von elianda »

Code: Alles auswählen

	TITLE	RAND

	INCLUDE	SE.ASM

DATA	SEGMENT	WORD PUBLIC

; Externals

	EXTRN	RandSeed:DWORD

DATA	ENDS

CODE	SEGMENT	BYTE PUBLIC

	ASSUME	CS:CODE,DS:DATA

; Publics

	PUBLIC	RandInt,RandReal,RandFloat,InitRand

; Random standard function (Integer)

RandInt:

	CALL	NextRand
	MOV	BX,SP
	MOV	CX,DX
	MUL	WORD PTR SS:[BX+4]
	MOV	AX,CX
	MOV	CX,DX
	MUL	WORD PTR SS:[BX+4]
	ADD	AX,CX
	ADC	DX,0
	MOV	AX,DX
	RETF	2

; Random standard function (Real)

RandReal:

	CALL	NextRand
	XCHG	AX,BX
	MOV	AX,80H
	MOV	CX,32
@@1:	TEST	DH,80H
	JNE	@@2
	SHL	BX,1
	RCL	DX,1
	DEC	AL
	LOOP	@@1
	XOR	AL,AL
@@2:	AND	DH,7FH
	RETF

; Random standard function (8087)

RandFloat:

	CALL	NextRand		;Compute next random number
	FILD	CS:ConstScale		;Load -32
	FILD	RandSeed		;Load 32-bit random integer
	FADD	CS:ConstDelta		;Scale to 32-bit positive integer
	FSCALE				;Scale so 0<=ST<1
	FSTP	ST(1)			;Remove scaling factor
	FWAIT				;Wait for result
	RETF

; Scaling constants

ConstDelta	DD	2147483648.0
ConstScale	DW	-32

; Compute next random number
; New := 8088405H * Old + 1
; Out	DX:AX = Next random number

NextRand:

	MOV	AX,RandSeed.w0
	MOV	BX,RandSeed.w2
	MOV	CX,AX
	MUL	CS:Factor		;New = Old.w0 * 8405H
	SHL	CX,1			;New.w2 += Old.w0 * 808H
	SHL	CX,1
	SHL	CX,1
	ADD	CH,CL
	ADD	DX,CX
	ADD	DX,BX			;New.w2 += Old.w2 * 8405H
	SHL	BX,1
	SHL	BX,1
	ADD	DX,BX
	ADD	DH,BL
	MOV	CL,5
	SHL	BX,CL
	ADD	DH,BL
	ADD	AX,1			;New += 1
	ADC	DX,0
	MOV	RandSeed.w0,AX
	MOV	RandSeed.w2,DX
	RET

; Multiplication factor

Factor		DW	8405H

; Randomize standard procedure

InitRand:

	MOV	AH,dosGetTime
	INT	DOS
	MOV	RandSeed.w0,CX
	MOV	RandSeed.w2,DX
	RETF

CODE	ENDS

	END
Also nichts weiter als die Uhrzeit... (Source von BP7)
Diverse Retro-Computer vorhanden.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

Vielen Dank für Eure Hilfe, Problem ist bereits gelöst (offenbar) - ich hab einfach noch die DOS-Funktion GetTime in den "Emulator" aufgenommen, und schon klappts auch mit Randomize :-) Hatte einen Blick in die TP-Hilfe geworden, da stand was von der System-Clock - warum man das dann aber per MS-DOS, und nicht per BIOS macht, weiss ich nicht, aber egal - es klappt :-)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

So, nächste Woche gibts hoffentlich eine neue Version und (daumen drücken!) ne Homepage, wo man das komplette Material auch herunter laden kann :-)
Antworten