ich habe hier auch den ersten Karton voll mit toten Boards und Grafikkarten. Irgendwann muss man auch mal sagen das wars.
Ab und an kann man mal ein anderes Board mit den teilen retten.
ich habe hier auch den ersten Karton voll mit toten Boards und Grafikkarten. Irgendwann muss man auch mal sagen das wars.
Ab und an kann man mal ein anderes Board mit den teilen retten.
der Mooh ist ja immer deutlich schneller ...hat der die RTC im Rechner kaputt.
NES und SNES spiele ich auf dem PC ...und auf den Original Konsolen.
das ist natürlich auch noch eine Überlegung, weil die typischen Systeme die normale ISA Speicherkarten hatten maximal 286 waren, welche zu99% nur im 8088 Modus liefen.
386/486 Boards die Speicherkarten hatten, hatten immer spezielle Sockel, die liefen nicht über ISA, das wäre auch zu langsam gewesen.
Ja die Chips für das 5170 Board REV. 1 werden ziemlich teuer gehantelt und sind leider auch seltener zu finden.
Mir fällt auch kein anderes Board ein was die Chips als kombination so nutzte.
Aber man kann auch für einzelne suchen und dann welche aufeinander löten, es gibt Listen welche Chips dafür geeignet sind.
für 286 sind solche Speicher Karten interessant.
Ab schnelleren 386 werden die Karten doch vermutlich zur Bremse für das System.
Das dürfte sich doch so verhalten wie der Speicher in der Isa Grafikkarte.
Auf dem AT Rev 3 Board welches ja als einziges 8MHZ CPU's hatte, befindet sich auch noch 150NS Ram Werkseits.
Das XT286 Board welches kein WS. hat hatte auch noch 120NS Chips Onboard (128KB) und 512KB als 150NS Simm Module verbaut.
Die XT/AT Speicher Karten haben ogt 120/150NS RAM Module.
Das weiss ich auch nicht... hatte ich geschenkt bekommen. Muss ich mal prüfen was das genau kann.
...offset musste ich entfernen dann scheint es zu funktionieren.
mov word ptr 6[si],offset ax;
Die Zeilen sähen dann so aus oder?
das Funktioniert so nicht.
...hier nochmal das ganze
if (ch=='7'){
unsigned int nr=20;
unsigned int XMSl_L=10;
unsigned int XMSl_H=0;
asm{
//L„nge gerade Zahl!!
mov ax,XMSl_L;
mov [si] ,ax ;
mov ax,XMSl_H;
mov 2[si] ,ax ;
//QUELLE
mov ax,XMShandle;
mov word ptr 4[si],ax ;
xor ax,ax;
add ax,nr;
mov word ptr 6[si],offset ax;
// mov ax,nr;
// add word ptr 6[si],ax;
xor ax,ax;
mov word ptr 8[si],seg ax ;
//ZIEL
mov word ptr 10[si],0 ;
mov word ptr 12[si],offset &test2;
mov word ptr 14[si],seg &test2 ;
//Funktion / Aufruf
mov ah,0Bh;
call XMSvec ;
mov XMStest,ax ;//1=OK
mov XMSfehler,bl ;//Fehlermeldung 160=kein speicher frei!
}
fehler(XMSfehler);
print(1,12,14,"X > XMS");
print(9,12,12,XMSfehler);
print(30,12,14,"AX1=OK");
print(39,12,14,XMStest);
print(1,13,14,Fehler);
}
Alles anzeigen
ich muss zum kopieren des XMS eine Offset Adresse angeben.
Ich habe einen grundwertt von 0 und möchte dann über eine Variable sagen es soll ab dem X. byte kopiert werden.
eine Variable kann ich scheinbar nicht hinter offset angeben ...dann nimmt er die Adresse von der Variable selber.
ich habe das jetzt getrickst indem ich folgendes mache
unsigned int nr = 10;
asm{
xor ax,ax;
mov word ptr 6[si],offdset ax;
mov ax,nr;
add word ptr 6[si],ax;
}
was auch funktionierte war
aber ich muss da eine Variable hin bekommen anstelle eines festen wertes, da dieser sich ändert.
So heute endlich mal den Toshiba 4060XCDT "überbrückt" damit ich den starten konnte.
irgendwie hat der dann aber immer nur das selbe angezeigt.
Also lieblings beschäftigung "nicht" Laptop komplett zerlegen. Lieber würde ich 5 XT's zerlegen wie einen Laptop mit den ganzen mini Kabeln Steckenr und Schrauben.
ich muss aber zugeben, das ist der einzige Laptop den ich bisher zerlegt habe der sich richtig gut zerlegen liess, innen war auch alles relativ stabil im Gerät.
Batterie dan einfach auch überbrückt ...der Fehler blieb.
ich habe dann testweise die interne Tastatur entfernt und siehe da mit externer funktioniert er.
anscheinend hat die interne Tastatur ein paar Tasten wo die Folie aneinander kommt... die macht sich leider selbständig.
Auf der Festplatte war noch Turbo C++ 4.0 / DJGPP und Windows 3.1
Diskettenlaufwerk funktioniert
CD-Rom funktioniert
96MB Ram wurde aufgerüstet
Display ist noch richtig gut
So könnte man zwar damit arbeiten, aber wirklich glücklich bin ich damit nicht, eigentlich muss eine neue Tastatur her, weil zerlegen kann man die leider nicht ist wohl verpresst.
Sind doch einige schöne teile dabei.
der ISA Controller mit LBA Bios ist toll, damit kannst du dann in 286 deine 2GB Platten oder CF Karten verwenden, sollte schneller wie die XT-IDE sein wegen 16bit!
Die findet man leider nicht so oft.
Die NEC MFM Platte ist auch schick.
Die habe ich auch noch nicht in meiner MFM/RLL Festplatten Sammlung.
Hoffe die funktioniert noch.
Bei dem alter 1x komplett neu aufsetzen macht Sinn, wenn du da fragen hast.
Und die wird vermutlich auch nicht von alleine Parken
sollte ein Disketten Controller sein, der Zilog ist ein Floppy controller.
Nec 1.44MB Floppy halt...etwas älter.
google hat das Handbuch dazu
https://deramp.com/downloads/mfe_archive/020-Disk%20Drives/NEC/NEC%20FD1035%20Floppy.pdf
Herzlich Willkommen.
Einen der Heiss begehrten Highscreen Desktops, schön mit Original Monitor und Tastatur.
interessant ist die halt für die alten CGA Titel, vor allem im zusammenhang mit einem CRT.
Die Accolade spiele Grandprix etc. sollten doch drauf laufen oder?
Matrox Grafikkarte mit Speichererweiterung.
ATX Netzteil Tester und ein Sockel 7 Kühler für die schnelleren CPU's.
Letztes Jahr hatte ich sowas mit IBM's aufgekauft waren auch knapp 1000€, da waren auch 2 Commodore Teile bei, die hatte ich hier an Foren Kollegen verteilt. ohne Gewinn.
Weiss ja jetzt nicht ob einer ausm Forum den Zuschlag hatte.
Ein sehr schöner XT.
Mit dem grossen Tandon Laufwerk im XT ist auch selten.
Die Riemen leiern ab und an mal aus, wobei es aber auch Disketten gibt die besser "bremsen" wie andere.
Welches Board ist denn in dem verbaut... es gab ja doch ziemlich viele REV. vom XT Board.
Mein Board hat
leidernur ISA
486DX50 kam wäre PCI und CLB auch "komisch".
Die wurden nur kurz wirklich verkauft, so vor dem DX2 und das war dann auch vor VLB.
Ich habe einen 486 DX 50 der hatte ISA + EISA, das passt auch noch so zusammen,
Aber EISA ist was komplizierter.
Ich doch toll wenn du so ein authentisches System hast.
...für 3D hast du ja noch Socket 7 jetzt!
Ich würde die 911er auch drin lassen für Windows 3.x ganz toll und vor allem sind diese alten S3 Karten auch eher selten und wenn teuer.
DX50 ist ja vermutlich ein reines ISA System.
Da sind alle Karten eher langsam... wegen dem Bus halt.
ET4000 ist meist eine gute wahl für DOS. wobei für 3D Spielchen sind die alle zu langsam. VLB oder PCI muss da her.
So das XMS test Programm läuft dann soweit erstmal.
es prüft ob ein XMS treiber vorhanden ist
//prfen ob XMS-Treiber installiert
asm{
mov ax,4300h;
int 2fh;
//al=80h (128) = Treiber OK
mov XMScheck,al;
}
//INFO >>
print(1,2,8,"XMS treober aktiv (128 / 0x80 = OK) :");
print(40,2,7,XMScheck);
danach wird die Adresse vom XMS Handler erfragt
//XMS Handler Adresse erfragen
asm{
mov ax,4310h;
int 2fh;
//
mov word ptr XMSvec,bx;
mov word ptr XMSvec +2,es;
}
//INFO Adresse >>
print(1,3,8,"XMS Adresse :");
print(40,3,7,XMSvec);
Alles anzeigen
danach wird keine interupt mehr verwendet.
jetzt wird abgefragt wieviel speicher verfügbar ist und wie gross der grösste Block ist.
//XMS freien speicher abfragen
asm{
mov ah ,8;
call XMSvec; //anfordern
mov XMSfree ,dx; //verfgbarer XMS in Kbytes
mov XMSbblock ,ax; //gr”sster noch freier zusammenh„ngender XMS-Block
}
//INFO Freier Speicher/Bl”cke
print(1,5,8,"XMS freier speicher");
print(21,5,7,XMSfree);
print(30,5,8,"XMS gr”sster Block");
print(49,5,7,XMSbblock);
Alles anzeigen
Ein Block von 1000kb wird reserviert und dem Block wird ein Handler zugewiesen.
//XMS Allocate Memory
unsigned int kbytes=1000;//KB anfragen
asm{
mov dx ,kbytes; //ben”tigte Gr”sse
mov ah ,9;
call XMSvec; //anfordern
mov XMStest ,ax; //1=OK / 0=Fehler
mov XMShandle ,dx; //zurckgegebener Handle fr den angefragten XMS-Speicher
mov XMSfehler ,bl; //Fehlermeldung 160=kein speicher frei!
}
//INFO Block reservieren
print(1,7,8,"XMS reservieren");
print(1,7,8,"XMS 1=OK/0=Fehler");
print(19,7,7,XMStest);
print(30,7,8,"XMS Fehlercode");
print(45,7,7,XMSfehler);
print(60,7,8,"XMS Handle");
print(71,7,7,XMShandle);
//
fehler(XMSfehler);
print(1,8,14,Fehler);
Alles anzeigen
danach kommt man in eine Schleife welche 2 funktionen hat.
1. Inhalt der Variable test1 in den reservierten XMS Block kopieren
2. Inhalt aus XMS Block kopieren nach Variable test2
Im Programm wird der Inhalt von Variable test1 / test2 oben nebeneinander angezeigt.
//kopieren XMS > X
if (ch=='7'){
unsigned int XMSl_L=8;
unsigned int XMSl_H=0;
asm{
//L„nge gerade Zahl!!
mov ax,XMSl_L;
mov [si] ,ax ;
mov ax,XMSl_H;
mov 2[si] ,ax ;
//QUELLE
mov ax,XMShandle;
mov word ptr 4[si],ax ;
mov word ptr 6[si],offset 0 ;
mov word ptr 8[si],seg 0 ;
//ZIEL
mov word ptr 10[si],0 ;
mov word ptr 12[si],offset &test2;
mov word ptr 14[si],seg &test2 ;
//Funktion / Aufruf
mov ah,0Bh;
call XMSvec ;
mov XMStest,ax ;//1=OK
mov XMSfehler,bl ;//Fehlermeldung 160=kein speicher frei!
}
fehler(XMSfehler);
print(1,12,14,"X > XMS");
print(9,12,12,XMSfehler);
print(30,12,14,"AX1=OK");
print(39,12,14,XMStest);
print(1,13,14,Fehler);
}
//kopieren X > XMS
if (ch=='6'){
unsigned int XMSl_L=8;
unsigned int XMSl_H=0;
asm{
//L„nge gerade Zahl!!
mov ax,XMSl_L ;
mov [si] ,ax ;
mov ax,XMSl_H ;
mov 2[si] ,ax ;
//QUELLE
mov word ptr 4[si],0 ;
mov word ptr 6[si],offset &test1;
mov word ptr 8[si],seg &test1 ;
//ZIEL
mov ax,XMShandle
mov word ptr 10[si],ax ;
mov word ptr 12[si],offset 0 ;
mov word ptr 14[si],seg 0 ;
//Funktion / Aufruf
mov ah,0Bh;
call XMSvec ;
mov XMStest,ax ;//1=OK
mov XMSfehler,bl ;//Fehlermeldung 160=kein speicher frei!
}
fehler(XMSfehler);
print(1,12,14,"X > XMS");
print(9,12,12,XMSfehler);
print(30,12,14,"AX1=OK");
print(39,12,14,XMStest);
print(1,13,14,Fehler);
}
Alles anzeigen
beim beenden wird der Block wieder frei gegeben.
//XMS Handle frei geben
if (XMShandle>0){
asm{
mov dx ,XMShandle;//Handle welches frei gegeben werden soll
mov ah ,0Ah
call XMSvec;
}
//INFO Block freigeben
print(1,9,4,"XMS Handle frei gegeben");
print(25,9,12,XMSbblock);
...man kann blöcke kopieren obwohl keiner reserviert wurde... das kann etwas unschön enden, weil hier dann in Handle 0 geschrieben, das sind die ersten 1MB...
also darf funktion 7 nur verwendet werden wenn zuvor alles ohne Fehler durch lief.
hier nochmal das ganze.
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include <dos.h>
//-------------------------------------------------------------------------
char Fehler[36];
//Fehler Meldung Text zuweisen!
void fehler(unsigned char EC)
{
strcpy(Fehler,"");
if (EC==0x80) strcat(Fehler,"unbekannte Funktion ");
if (EC==0x81) strcat(Fehler,"VDISK gefunden ");
if (EC==0x82) strcat(Fehler,"Gate A20 Fehlfunktion ");
if (EC==0x8E) strcat(Fehler,"unbestimmter Fehler des Treibers ");
if (EC==0x8F) strcat(Fehler,"Schwerer Fehler, Programm beenden!!");
if (EC==0x90) strcat(Fehler,"kein HMA verfügbar ");
if (EC==0x91) strcat(Fehler,"HMA belegt ");
if (EC==0x92) strcat(Fehler,"DX < /HMAMIN= @ DEVICE=HIMEM.SYS");
if (EC==0x93) strcat(Fehler,"HMA nicht vergeben ");
if (EC==0x94) strcat(Fehler,"A20 noch freigegeben ");
if (EC==0xA0) strcat(Fehler,"XMS vollständig vergeben ");
if (EC==0xA1) strcat(Fehler,"alle XMS Handles vergeben ");
if (EC==0xA2) strcat(Fehler,"ungültige Handle ");
if (EC==0xA3) strcat(Fehler,"ungültige Handle bei Quelladresse ");
if (EC==0xA4) strcat(Fehler,"ungültige Quelladresse (Offset) ");
if (EC==0xA5) strcat(Fehler,"ungültige Handle bei Zieladresse ");
if (EC==0xA6) strcat(Fehler,"ungültige Zieladresse (Offset) ");
if (EC==0xA7) strcat(Fehler,"ungültige Länge ");
if (EC==0xA8) strcat(Fehler,"Kopierbereiche überlappen ");
if (EC==0xA9) strcat(Fehler,"Parity-Fehler ");
if (EC==0xAA) strcat(Fehler,"Block nicht gesperrt ");
if (EC==0xAB) strcat(Fehler,"Block gesperrt ");
if (EC==0xAC) strcat(Fehler,"zuviele Blocksperen ");
if (EC==0xAD) strcat(Fehler,"Blocksperre fehlgeschlagen ");
if (EC==0xB0) strcat(Fehler,"nur noch kleinere UMBs verfügbar ");
if (EC==0xB1) strcat(Fehler,"kein UMB verfügbar ");
if (EC==0xB2) strcat(Fehler,"ungültiges UMB Segment ");
}
//Print Funktion fr schreibfaule!
//-------------------------------------------------------------------------
void print(int XPx , int XPy,int XPc,long XPt)
{
gotoxy(XPx, XPy);
textcolor(XPc);
char MXct[33];
ltoa(XPt,MXct,10);
cprintf(MXct);
}
void print(int XPx , int XPy,int XPc,char XPt[80])
{
gotoxy(XPx, XPy);
textcolor(XPc);
cprintf(XPt);
}
//######################################################################################
unsigned char XMScheck=0; //XMS verfgbar (80h = OK)
char XMSvec[4]; //Adresse XMS-Handler
unsigned int XMStest=0; //Antwort bei anfragen
unsigned char XMSfehler=0; //Ablage fr Fehler
unsigned int XMShandle=0; //XMS-Handle fr einen angeforderten Speicherblock
unsigned int XMSfree=0;//XMS-Frei
unsigned int XMSbblock=0;//gr”sster verfgbarer XMS Block an einem Stck
char test1[8]="erste111";
char test2[8]="zweite22";
unsigned char ch=0;
//######################################################################################
int main(void)
{
clrscr();
//prfen ob XMS-Treiber installiert
asm{
mov ax,4300h;
int 2fh;
//al=80h (128) = Treiber OK
mov XMScheck,al;
}
//INFO >>
print(1,2,8,"XMS treober aktiv (128 / 0x80 = OK) :");
print(40,2,7,XMScheck);
//XMS Handler Adresse erfragen
asm{
mov ax,4310h;
int 2fh;
//
mov word ptr XMSvec,bx;
mov word ptr XMSvec +2,es;
}
//INFO Adresse >>
print(1,3,8,"XMS Adresse :");
print(40,3,7,XMSvec);
//XMS freien speicher abfragen
asm{
mov ah ,8;
call XMSvec; //anfordern
mov XMSfree ,dx; //verfgbarer XMS in Kbytes
mov XMSbblock ,ax; //gr”sster noch freier zusammenh„ngender XMS-Block
}
//INFO Freier Speicher/Bl”cke
print(1,5,8,"XMS freier speicher");
print(21,5,7,XMSfree);
print(30,5,8,"XMS gr”sster Block");
print(49,5,7,XMSbblock);
//XMS Allocate Memory
unsigned int kbytes=1000;//KB anfragen
asm{
mov dx ,kbytes; //ben”tigte Gr”sse
mov ah ,9;
call XMSvec; //anfordern
mov XMStest ,ax; //1=OK / 0=Fehler
mov XMShandle ,dx; //zurckgegebener Handle fr den angefragten XMS-Speicher
mov XMSfehler ,bl; //Fehlermeldung 160=kein speicher frei!
}
//INFO Block reservieren
print(1,7,8,"XMS reservieren");
print(1,7,8,"XMS 1=OK/0=Fehler");
print(19,7,7,XMStest);
print(30,7,8,"XMS Fehlercode");
print(45,7,7,XMSfehler);
print(60,7,8,"XMS Handle");
print(71,7,7,XMShandle);
//
fehler(XMSfehler);
print(1,8,14,Fehler);
Anfang:
print(1,1,8,"XMS-TEST-004");
print(20,1,8,test1);
print(30,1,8,test2);
ch=getch();
if (ch==0) ch=getch()+128;
//kopieren XMS > X
if (ch=='7'){
unsigned int XMSl_L=8;
unsigned int XMSl_H=0;
asm{
//L„nge gerade Zahl!!
mov ax,XMSl_L;
mov [si] ,ax ;
mov ax,XMSl_H;
mov 2[si] ,ax ;
//QUELLE
mov ax,XMShandle;
mov word ptr 4[si],ax ;
mov word ptr 6[si],offset 0 ;
mov word ptr 8[si],seg 0 ;
//ZIEL
mov word ptr 10[si],0 ;
mov word ptr 12[si],offset &test2;
mov word ptr 14[si],seg &test2 ;
//Funktion / Aufruf
mov ah,0Bh;
call XMSvec ;
mov XMStest,ax ;//1=OK
mov XMSfehler,bl ;//Fehlermeldung 160=kein speicher frei!
}
fehler(XMSfehler);
print(1,12,14,"X > XMS");
print(9,12,12,XMSfehler);
print(30,12,14,"AX1=OK");
print(39,12,14,XMStest);
print(1,13,14,Fehler);
}
//kopieren X > XMS
if (ch=='6'){
unsigned int XMSl_L=8;
unsigned int XMSl_H=0;
asm{
//L„nge gerade Zahl!!
mov ax,XMSl_L ;
mov [si] ,ax ;
mov ax,XMSl_H ;
mov 2[si] ,ax ;
//QUELLE
mov word ptr 4[si],0 ;
mov word ptr 6[si],offset &test1;
mov word ptr 8[si],seg &test1 ;
//ZIEL
mov ax,XMShandle
mov word ptr 10[si],ax ;
mov word ptr 12[si],offset 0 ;
mov word ptr 14[si],seg 0 ;
//Funktion / Aufruf
mov ah,0Bh;
call XMSvec ;
mov XMStest,ax ;//1=OK
mov XMSfehler,bl ;//Fehlermeldung 160=kein speicher frei!
}
fehler(XMSfehler);
print(1,12,14,"X > XMS");
print(9,12,12,XMSfehler);
print(30,12,14,"AX1=OK");
print(39,12,14,XMStest);
print(1,13,14,Fehler);
}
if (ch!=27) goto Anfang;
//XMS Handle frei geben
if (XMShandle>0){
asm{
mov dx ,XMShandle;//Handle welches frei gegeben werden soll
mov ah ,0Ah
call XMSvec;
}
//INFO Block freigeben
print(1,9,4,"XMS Handle frei gegeben");
print(25,9,12,XMSbblock);
if (XMShandle>0) XMShandle--;
}
clrscr();
print(1,1,7,"Beendet");
return 0;
}
Alles anzeigen