OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 23:24

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 8 ] 
Autor Zpráva
 Předmět příspěvku: Test velikosti paměti
PříspěvekNapsal: 25.05.2020, 19:14 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Po rychlém a úspěšném vyřešení optimalizace toho barevného loga ZXS mám něco obtížnějšího :)

Rád bych lepší test paměti počítače:
1. detekce velikosti
2. test na vadnou buňku

Současný MFC má detekci 48 versus 128, vše navíc (256/512/1024) jsem trošku odbyl (o5 problém s místem) a uživatel si musí povolit ručně v setupu. Test na vadnou paměť měla pouze verze 0 a ačkoliv se mi hodně líbil, jak jsem ho vymyslel, musel jsem ho z důvodu potřeby volného místa úplně odstranit.

Stránkování paměti probíhá pouze na portu 32765. Stránkovací tabulku pro ruské modely (pentagon, scorpion) jsem dal dohromady společně s Velesoftem (tedy alespoň myslím, že to byl on... :)

Rád bych, aby detekce spočívala v otestovaní (pro jistotu) všech stránek. Přeci jen jsem člověk paranoidní a kvůli nepřesné detekci mašiny jsou následně zkopírovaná data chybná raz dva... A dále, abych si mohl spustit v případě pochybností i nějaký memtest. Myslím ale, že to není reálné. Zřejmě nemůžeme jen tak libovolně (tj. bez nežádoucích následků) outovat na všech bitech portu 32765. Např. takový OUT 32765,48 nám na ZXS 128 uřízne větev definitivně. Nějaký rozumný kompromis se ale jistě najít dá.

Přikládám kódy, které jsem použil. Než je však přepsat bych raději chtěl vyvolat diskuzi o tom, jak bezpečně velikost paměti rozeznat.

Kód:
************MFC v 3.x***************
 
;stránkování přes out 32765,x
;zde jsou všechny možné x
;nula znamená konec paměti a vkládá se
;dle mašiny na onu pozici - viz. SET_PG
PAGES    defb 16
         defb 17,19,20,22,23
PAGES2   defb 80,81,82,83
         defb 84,85,86,87
PAGES3   defb 144,145,146,147
         defb 148,149,150,151
         defb 208,209,210,211
         defb 212,213,214,215
PAGES4   defb 48,49,50,51
         defb 52,53,54,55
         defb 176,177,178,179
         defb 180,181,182,183
         defb 112,113,114,115
         defb 116,117,118,119
         defb 240,241,242,243
         defb 244,245,246,247
         defb 0

;otestování velikosti paměti
;hodnota na 49152 pouze v základní 
;stránce 16 se nesmí testem změnit!
TESTMM   ld   hl,49152
         ld   bc,32765
         ld   a,(hl)
         ld   de,16*256+17
         ld   (hl),d
         out  (c),e
         ld   (hl),e
         out  (c),d
         ld   d,(hl)
         ld   (hl),a
         ld   a,d
         cp   e
;v L je 0 (HL = 49152)
;XOR A by mi zrušilo Z/NZ k CP e...
         ld   a,l
         ld   bc,DEFAU+5
         ld   de,SETUPVAR+5
         ld   (de),a
         ld   (bc),a
         ret  z
         inc  a
         ld   (de),a
         ld   (bc),a
         ret 

AX6LDIR  add  a,a
         ld   b,a
         add  a,a
         add  a,b
         ld   hl,TMM
         ld   b,0
         ld   c,a
         add  hl,bc
         ld   c,4
         ldir
         ret 

;volá se po ukončení setupu
;k nakopírovaní textu s velikostí paměti
;a přidání zarážky (nuly) na konec
;stránkovací tabulky
;A = 0 až 4
;0-48,1-128,2-256,3-512,4-1024
SET_PG   ld   a,(SETUPVAR+5)
         cp   4
         ret  z
         ld   de,T_128
         call AX6LDIR
         ld   a,(hl)
         inc  hl
         ld   h,(hl)
         ld   l,a
         ld   (hl),c
         ret 

;po otestování velikosti paměti
;se přenese text do T_SETM
         ....
         ld   a,(SETUPVAR+5)
         ld   de,T_SETM
         call AX6LDIR
         ....
T_SETM   defs 4


;defm značí adresu kde je stránkovací tabulka
;ukazuje přesně na místo kde je třeba vložit
;nulu, která znamená konec paměti
;defm je obyč text, který je třeba dostat do
;T_128 kde je text pro volbu info (SS+I)
TMM      defm "048K"
         defw PAGES+1
         defm "128K"
         defw PAGES2
         defm "256K"
         defw PAGES3
         defm "512K"
         defw PAGES4
         defm "1024"

T_SSI    defb 22,1,0
         defb 16,7,17,0,19,1
T_MDOS   defm "v .   "
         defm "D80A D80B "
         defm "D80C D80D "
         defb 18,1," "
T_128    defm "1024 "
         defb 18,0,19,0+128



************MFC v 0.87b*************

R_MEM    defw 0
R_PAGE   defw 0

;ještě prehistoricka stránkovací tabulka
PAGES    defb 16
         defb 17,19,20,22,23
         defb 0,0,0,0,0,0,0,0
         defb 0
         defb 0

;C_FIRST je nějaká adresa >49152
;je to začátek volné oblasti pro data
;při kopírování v základní stránce (16)
MEM_SYS  ld   hl,C_FIRST
         ld   (R_MEM),hl
         ld   hl,PAGES
         ld   a,(hl)
         inc  hl
         ld   (R_PAGE),hl
         ld   bc,32765
         out  (c),a
         ret 
         
MEMTEST  ld   hl,T_MEMO0
         call PMESAGE ;vypíše hlašení, že probíhá memtest
;1. test - testujem hodnotu %01010101
         ld   hx,%01010101
         call MEM_DEL
         call MEM_TST
         jp   nz,MEMEROR
         call MEM_SYS
;2. test - do každé stránky dáme kus ROM
;přičemž ale žádné dvě stránky nebudou mít
;pokaždé ty stejné hodnoty (posouváme začátek
;dat z ROM o hodnotu čísla stránky :)
         call MEM_LDI
         call MEM_SYS
;jakmile jsou všechny stránky zaplněné
;testovací sadou, teprve pak provedeme
;porovnání, zda mají správně zapsaná data
         call MEM_CP
         jp   nz,MEMEROR
         
MEM_DEL0 ld   hx,0
MEM_DEL  call MEM_SYS
         ld   hl,(R_MEM)
         ld   d,h
         ld   e,l
         inc  de
         xor  a
         ld   c,a
         ld   b,h
         sub  b
         ld   b,a
         dec  bc
         ld   a,hx
         ld   (hl),a
         ldir
         ld   hl,(R_PAGE)
MEM_D0   ld   a,(hl)
         or   a
         jr   z,MEM_SYS
         exx 
         ld   bc,32765
         out  (c),a
         ld   hl,49152
         ld   de,49153
         ld   bc,16383
         ld   a,hx
         ld   (hl),a
         ldir
         exx 
         inc  hl
         jr   MEM_D0
         
MEM_TST  ld   hl,(R_MEM)
         xor  a
         ld   c,a
         ld   b,h
         sub  b
         ld   b,a
MEM_T1   ld   a,hx
         cpi 
         ret  nz
         ld   a,b
         or   c
         jr   nz,MEM_T1
         ld   hl,(R_PAGE)
MEM_T0   ld   a,(hl)
         or   a
         jp   z,MEM_SYS
         exx 
         ld   bc,32765
         out  (c),a
         ld   hl,49152
         ld   bc,16384
MEM_T2   ld   a,hx
         cpi 
         ret  nz
         ld   a,b
         or   c
         jr   nz,MEM_T2
         exx 
         inc  hl
         jr   MEM_T0
         
MEM_LDI  call TST_L1
         ldir
         ld   bc,284
TST_L3   ld   a,h
         cp   64
         jr   nz,TST_L4
         ld   h,l
TST_L4   ldi 
         jp   pe,TST_L3
         jr   MEM_LDI
         
MEM_CP   call TST_L1
         ld   bc,16384
TST_C3   ld   a,h
         cp   64
         jr   nz,TST_C4
         ld   h,l
TST_C4   ld   a,(de)
         cpi 
         jr   z,TST_C5
         ret 
TST_C5   inc  de
         jp   pe,TST_C3
         jr   MEM_CP
         
TST_L1   ld   hl,(R_PAGE)
         ld   a,(hl)
         or   a
         jr   z,TST_L2
         inc  hl
         ld   (R_PAGE),hl
         ld   bc,32765
         out  (c),a
         ld   de,49152
         ld   b,a
         ld   a,255
         sub  b
         ld   bc,16100
         ld   h,0
         ld   l,a
         ret 
         
TST_L2   pop  hl
         xor  a
         ret 
         


Naposledy upravil MTs dne 25.05.2020, 21:17, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 25.05.2020, 20:45 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
MTs píše:
Zřejmě nemůžeme jen tak libovolně (tj. bez nežádoucích následků) outovat na všech bitech portu 32765. Např. takový OUT 32765,48 nám na ZXS 128 uřízne větev definitivně.
A preco tam treba poslat hodnotu 48 ? Pretoze z toho chces urobit ZX Spektrum 48kB ! :)

Ale hlavne nasledujuce som chcel. Prosim prosim skus pouzivat sestnastkovu sustavu. Uvidis, ze ked sa ju naucis, pojde ti programovat v asembleri ovela lepsie a vsetko bude v tejto sustave ovela jednoduchsie - ako pisem v tomto clanku. A prosim ziadne vyhovorky typu ze uz si za tie roky zvyknuty na desiatkovu, ze stareho psa novym kuskom nenaucis ... pretoze ta namaha, ktoru tomu povenujes, sa ti mnohonasobne vrati !

Napriklad aj hodnoty, ktore treba portovat na port 32765, su ako hexadecimalne cisla ovela lepsie citatelne.
Desiatokovo vidis iba nicnehovoriace cisla: 16,17...23, ale hexadecimalne su to #10, #11 ... #17 kde druha cislica priamo znamena cislo stranku, ktoru si chces nastrankovat :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 25.05.2020, 21:04 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Busy píše:
A preco tam treba poslat hodnotu 48 ? Pretoze z toho chces urobit ZX Spektrum 48kB ! :)

Na ruském stroji s 1024K to právě je normální další stránka paměti. Holt v Rusku je všechno možné. To říkali už naši dědové! :o

Busy píše:
Ale hlavne nasledujuce som chcel. Prosim prosim skus pouzivat sestnastkovu sustavu. Uvidis, ze ked sa ju naucis, pojde ti programovat v asembleri ovela lepsie a vsetko bude v tejto sustave ovela jednoduchsie - ako pisem v tomto clanku. A prosim ziadne vyhovorky typu ze uz si za tie roky zvyknuty na desiatkovu, ze stareho psa novym kuskom nenaucis ... pretoze ta namaha, ktoru tomu povenujes, sa ti mnohonasobne vrati !

Napriklad aj hodnoty, ktore treba portovat na port 32765, su ako hexadecimalne cisla ovela lepsie citatelne.
Desiatokovo vidis iba nicnehovoriace cisla: 16,17...23, ale hexadecimalne su to #10, #11 ... #17 kde druha cislica priamo znamena cislo stranku, ktoru si chces nastrankovat :)


:help: Holt já te soustavě na chuť fakt nikdy nepřišel. Bohužel.
Stejně tak těm užším fontům, které má např. mbc command́er.
Prostě každý sme nějaký...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 25.05.2020, 22:19 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
MTs píše:
Holt já te soustavě na chuť fakt nikdy nepřišel. Bohužel.
Skodaaa.... Tak prosim aspon v programoch, ktore sem davas, a ktore mame skratit / prerobit, cisla prehod do hexa. Jednak mi tym usetris namahu (nemusim si to prevadzat ja) a dvak ked je to hexa, ovela lepsie vidim kde a co by sa dalo skratit a zoptimalizovat.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 26.05.2020, 09:47 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1198
Has thanked: 360 times
Been thanked: 304 times
Nechci stouchat do vosiho hnizda, ale ta taky, pri programovani na urovni assembleru a hw, radeji hexa. Navic mi to pomaha pri ruznych maskach nebo rotacich. Takze taky prosiiim ;-)

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 26.05.2020, 11:12 
Offline
Kecálek

Registrován: 06.04.2020, 16:24
Příspěvky: 222
Bydliště: Opava
Has thanked: 31 times
Been thanked: 70 times
Ještě přiložím raději i obrázek s ohraničením konkrétních mašin (pamětí), aby to bylo jasné jak to nyní v MFC funguje.
A zatím opravdu netřeba nic kódovat, spíše potřebuji najít nějakou cestu k detekci strojů > 128K, ale tak abych outováním něco nepodělal co již nepůjde vrátit zpět...

Příloha:
mfc-strankovani.png
mfc-strankovani.png [ 13.65 KiB | Zobrazeno 7945 krát ]


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 26.05.2020, 16:13 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
MTs píše:
ale tak abych outováním něco nepodělal co již nepůjde vrátit zpět...
Na 16k a 48k nie je problem, na 128k nesmies za ziadnych okolnosti nastavit na porte #7FFD bit 5 do jednicky. Inak mozes vsetko :)
Akurat daj este pozor na Game, tam si outovanim na #7F a #5F mozes predstrankovat hornych 32kB, a na Spektre 80kB (Lamac a ostatne klony) si zase outovanim na #FD a #FF mozes odstrankovat spodnych 32kB.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Test velikosti paměti
PříspěvekNapsal: 26.05.2020, 21:02 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 21:39
Příspěvky: 1970
Bydliště: Praha
Has thanked: 85 times
Been thanked: 255 times
Podpora strankovani Lamace by se mi hodilo.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 8 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz