029
13.09.2025, 18:28 Uhr
Ordoban
|
Ja. DOS hat eine Grenze bei 640K. Die ist im DOS fest eingebaut. Deswegen das Gehampel mit dem UMB. Das ist eine Möglichkeit diese Grenze zu umgehen.
Der Speichertest vom Mutos ist blöd. Der probiert von Adresse 00000 an, ob der etwas in der Adresse speichern kann, und hört erst auf wenn das nicht mehr klappt. Da ist dann auch A0000-BFFFF mit drin. Allerdings nicht der RAM der 1M-Karte, sondern der Grafikspeicher. Für Mutos macht das keinen Unterschied. Das kann man sehen, wenn man zu viele Programme gleichzeitig ausführt. Da wird der Bildschirm mit Grafiksalat gefüllt, und das Programm (oder auch das ganze System) crasht.
Das ist zumindest beim Mutos im DCP-Modus so. Beim Grundmodus ist der Grafikspeicher der ABG nicht aktiv, da sollte das funktionieren.
Edit: der code vom Mutos Speichertest.
Quellcode: | /* * Machine-dependent startup code */ startup(p) { register unsigned i; register c;
clknumb = 0xf000; i = p; while(i <= MAXPAGE) { #ifdef MMU c = mapwork(i); *c = 0x4242; if(*c != 0x4242) break; *c = 0x5244; if(*c != 0x5244) break; #else c = memchk(i); if(c < 0) break; #endif MMU /* clearseg(i); */ maxmem++; i++; } mm_size = i; while(--i >= p) #ifdef MMU mmufree(i,1); #else mfree(coremap, 1, i); #endif MMU meminit(); dinit(); }
|
Hinter dem memchk() verbirgt sich Assembler-Code:
Quellcode: | .globl _memchk _memchk: mov bx,sp mov dx,#2(bx) mov cx,*7 shl dx,cl mov es,dx seg es mov cx,0 mov ax,#/4242 seg es mov 0,ax seg es mov bx,0 cmp ax,bx jnz memfault mov ax,#/5244 seg es mov 0,ax seg es mov bx,0 cmp ax,bx jnz memfault sub ax,ax j memret memfault: mov ax,#-1 memret: seg es mov 0,cx mov cx, ds mov es, cx ret
|
-- Gruß Stefan Dieser Beitrag wurde am 13.09.2025 um 19:04 Uhr von Ordoban editiert. |