ZX klonų CP/M diskų žiūreklis

January 14th, 2023

Atnešė diskelių kurie buvo rašyti su ZX klonu. Juos nuskaitėm su Greaseweazle, bet joks emuliatorius neleido paleisti CP/M iš disko kopijų. O ir šiaip, labai norėjosi ištraukti failus. Tačiau, nei vienas CP/M diskų analizatorius nematė failų- paprasčiausiai, mūsų “hakeriai" kai konstravo tą kastruotą CP/M kažką kitaip padarė. O “viešos" programos neleido modifikuoti disko sektorių struktūros.

Todėl teko pasirašyti nepilnai veikiančią programą:
CP/M ZX disk image browser
Diskai tai HD (80 takelių)*, 5 sektoriai takelyje (cilindre) ir 1024 baitai sektoriuje. Tačiau CP/M blokas yra 2048 baitų.

Dabartinė programa gali eksportuoti failus, tačiau kol kas nesugalvojau, kaip eksportuoti failus kurie surašyti kaip keli įrašai direktorijoje (failai didesnis nei 8*2048 baitai). Direktorija- 20 ir 21 sektorius.
Rodos pagal CP/M specifikacijas failo dydis aprašomas vienaip, tačiau mūsų “santakistai" kažkaip ignoravo tuos laukelius ir ten visur nuliai (arba aš dar nesupratau kaip). Taip pat kiek neaišku su failo ilgiu- CP/M rašo 128 baitų blokais, tačiau failai ne visada būna kartotini 128 baitams.
Svarbu, kad didžioji dalis unikalių failų išsitraukė.

Tačiau! Kitas žmogus atnešė irgi “santakos diskelių" su CP/M ir jie vėl kitokie! Gal vėliau išgaminsim ir jiems programą ir patobulinsim šią. Tačiau kiek pavargom, gal net keturis vakarus rašėm softą.

Nelabai tikiu, kad kam nors to reikia, bet programą CPMD galima nusikrauti.

*) Rašė kaip HD, bet dėl ubagystės dažnai naudojo DD diskelius. Todėl dabar jie sunkiai nusiskaito.

P.S.
Kai parašiau programą, atsiliepė vienas iš “ten" ir paaiškino kaip sukonfiguruoti jo programą darbui su šiais diskais. Programa vadinasi “Steinblume".

ARM42: 4 lempų NIXIE laikrodis

January 6th, 2023

Tai keturių lempų NIXIE laikrodžio “skeletas". Laikrodis naudoja hardwarinį RTC. PWM šviesumo valdymas, trys skaitmeniniai mygtukai, vienas analoginis (potenciometras, fotorezistorius), USB-COM jungtis laikrodžio nustatymui (sinchronizavimui). Maitinimas 9-15V. Dinaminė indikacija, vienas dešifratorius (155id1), lempas junginėja MPSA42/MPSA92 tranzistoriai. Šis modelis dabar naudoja apie 2W galios. (kogero LEDai daug naudoja :) )

4 nixie clock STM32F103 RTC
Dizainas bus kuriamas kitų žmonių. Čia tik sumestos detalės, kad patikrinti elektrinę dalį ir ištestuoti programinę įrangą. Jei dizaino autoriai pasidalins galutiniu produktu, nuotraukas įdėsim.

Programos skeletas- tai minimumas programos kuris jau veikia, tačiau nepriprogramuota visokių “custom" dalykėlių kurių tikriausiai reikės galutiniam projektui.

STM32F103 RTC NIXIE clock source code, ir STM32CubeMX projektas. Kompiliuojasi su ARM gcc t.y. visiškai nuo platformos nepriklausoma C kalba.

Su Naujais, 2023 metais!

January 1st, 2023

Sveikinu visus su Naujais, 2023-čiaisiais metais!

Ką čia palinkėti. Kai jau tapau senu diedu, tai norėčiau palinkėti visiems laimės ir sveikatos. Laimė reikalinga jums, o jūsų sveikata reikalinga jūsų aplinkiniams.

NIXIE
Ir kai visiškai stogas pradeda važiuoti nuo bėdų, lai visada atsiranda kažkoks užsiėmimas. Kaip ir šitas užsakymas. Kartais toks darbukas labai padeda atsipalaiduoti ir pagauti dvasinės ramybės “dzin budistinį" čį (氣). Tik nepagalvokit, kad pavažiavau į visokias ezoterikas.

STM32F103 ir SD SDIO kortelė

December 23rd, 2022

Straipsnis skirtas tiems MCU kurie turi SDIO geležį.

Visur yra straipsniai apie SPI SD kortelės pajungimą arba kur jau rimtesnė techniką, tai SDIO su keturiais duomenų kanalais. Tačiau nebūtina naudoti visus kanalus, galima jungti ir per vieną. Todėl, kad prijungti SD kortelę užtenka 5 laidų: Vcc ir žemė, lieka trys duomenims. Reikia SDIO_SC (clock), SDIO_CMD ir SDIO_D0. Jei norim greitesnio skaitymo- D1, D2, D3.

Surašysiu ką aš dariau, kad šios dienos (2022.12.23) STM32CubeMX pagimdytų veikiantį kodą. Seniau reikėdavo naudoti išorinę biblioteką (dažniausiai FatFS iš elm-chan), dabar šią biblioteką kubikas automatiškai įkelia ir sukonfiguruoja. Dar karta pabrėžių - viską padaro. Nereikia rašyti jokių disk-io paprogramių. Nieko nereikia rašyti.

Pradedam nuo SDIO modulio aktyvavimo:
SDIO
Režimas - 1 bitas, būtinai reikalingas pertraukimas. Nors sako, kad veikia be jo. Man neveikė. DMA galima jungti, bet nepastebėjau ko nors. Kitas parametras: SDIOCLK clock divide factor - pasididinkit, nes ant pilno greičio ne visos SD kortelės gali dirbti (ypač pajungtos ant snarglių). Aš parašiau -4, prie 72MHz SDIO clock.

Kad veiktų fatfs, reikia dar vieno GPIO pino. Be jo neleis sukonfiguruoti. Taip laidelis einantis iš lizdelio kur jungiasi prie mechaninio mygtuko- inkišta kortelė ar ne. Nors programiškai tas pinas naudojamas tik vienoje vietoje, kubikas reikalauja.

GPIO
GPIO input, pull-up tikriausiai, jei jungiklis trumpina į žemę.

Ir tik dabar galima įjungti Middleware->FATFS.
FATFS
Čia matosi tas “privalomas" D3 GPIO.

Dar galima prasisukti per fatfs nustatymus ir išjungti nereikalingas funkcijas, kad sutaupyti atminties (ypač) RAM.

Susigeneruojam kodą, ir kiek pasikuičiam jame…

Failas “fatfs_platform.c" - jame yra SD kortelės detektavimas per tą PINą. Pasitaisom kodą pagal jūsų mygtuką, arba paprasčiausia parašom “return SD_PRESENT;“. Šį failą privalom pataisyti.

Jei naudojam RTC ar šiaip ką nors sumintijom su laikrodžiu ir norim turėti failus su data, tai atsidarom failą “fatfs.c" ir pasitaisom funkciją “get_fattime(void)“.

Kaip ir viskas. O pačiu fatfs naudotis galima pagal šitą:


void test_fatfs(void)
{
  //some variables for FatFs
  FATFS FatFs; 	//Fatfs handle
  FIL fil; 		//File handle
  FRESULT fres; //Result after operations
    //Buffer for reading/writing
  BYTE readBuf[30];
	
 
  //Open the file system
  fres = f_mount(&FatFs, "/", 1); //1=mount now
  if (fres == FR_OK)
	{
	//open file for reading
	fres = f_open(&fil, "test.txt", FA_READ);
	if (fres == FR_OK)
	{
	//We can either use f_read OR f_gets to get data out of files
	//f_gets is a wrapper on f_read that does some string formatting for us
		TCHAR* rres = f_gets((TCHAR*)readBuf, 15, &fil);
		if(rres != 0) {
							print_uart((char *)readBuf);
					}
				else
					{ //error
					 //print_uart("f_gets error \r\n");
					}
	}
	f_close(&fil);
	// end of file read
 
	// file write
	//Now let’s try and write a file "write.txt"
	fres = f_open(&fil, "write.txt", FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS);
	if(fres == FR_OK)
		{
		//Copy in a string
		strncpy((char*)readBuf, "new file is made!2", 20);
		UINT bytesWrote;
		fres = f_write(&fil, readBuf, 19, &bytesWrote);
 
		if(fres == FR_OK) {
			// file ok
		} else {
			//file write error
		}
	} else {
	// file open error
	}
	//Don't forget to close your file!
	f_close(&fil);
	//end of file write
	}
	else
	{
	//mount error
	}
	//We're done, so de-mount the drive
	f_mount(NULL, "", 0);
//end of file testing
}
 

Tai disko atidarymas, skaitymas ir rašymas.

Erratum:
Jei neveikia, pasitikrink schemą, ar yra 10kΩ rezistoriai ant visų linijų link maitinimo pliuso.
Jei veikia ir lūžta- pasididink steką.
Jei prie šio modulio pradėjo neveikti UART4/USART3, tai žinokit čia šūdina mikroschema ir ji sunaikino PC10 piną. Naudokit alternatyvius UART pinus. Naujesnėse mikroschemose tai pataisyta.

Retrofuturistinis blasteris

December 10th, 2022

retrofuturistinis blasteris
:)

STM32F103 ir “tikras" CRC32

December 7th, 2022

STM32F103 (bent jau mano naudojamas) turi hardwarinį CRC32 skaičiuotuvą. Tačiau bėda- kažko tai suskaičiuotas CRC32 neatitinka kokio nors online kalkuliatoriaus rezultatui. Internetas prirašytas visko, bet niekur dorai nepaaiškinta kodėl nesutampa.
Atsakymas labai paprastas- big ar little endian skaičiuoja mūsų MCU ir dar kokia bitų seka.
CRC32 pas STM32 skaičiuojasi 32 bitų skaičiais. Todėl kokį nors baitų (ar raidžių) masyvą reikia papildyti iki kartotinio 4 dydžio. Jei masyvas sudarytas iš 32bitų elementų, reikia pasitikrinti tą “endian". Poto imti masyvą po 4 baitus, sukuisti bitų seką (gerai, kad yra komanda RBIT, Reverse the bit order in a 32-bit word.), suskaičiuoti su hardware CRC32 rezultatą ir vėl sukuisti bitus su ta pačia komanda. Jei reikia, rezultatą invertuoti.

/* tekstines eilutes CRC skaiciavimas. Kartotinis 4. Netilpe baitai ignoruojami */
uint32_t RealCRC32txt(char * buf)
{
uint32_t len=strlen(buf)/4;
return RealCRC32((uint32_t *) buf, len);
}
 
 
/* CRC skaiciavimas naudojant 32 bitu masyva. Jei tikras masyvas, tai svarbu baitu seka, jei konversija is char/byte masyvo, tada nesvarbu */
uint32_t RealCRC32(uint32_t * buf, uint32_t len) //demesio, kas 4 baitai!
{
uint32_t crc,tmp,i;
 
	  hcrc.State = HAL_CRC_STATE_BUSY;
	__HAL_CRC_DR_RESET(&hcrc);
 
	for(i=0;i<len;i++)
	{
		tmp=buf[i];
		//tmp = ((tmp>>24)&0xff) | ((tmp<<8)&0xff0000) | ((tmp>>8)&0xff00) |  ((tmp<<24)&0xff000000); //baitu sekos konverteris
		tmp = __RBIT(tmp);
		hcrc.Instance->DR = tmp;
	}
	crc = __RBIT(hcrc.Instance->DR);
	hcrc.State = HAL_CRC_STATE_READY;
	return crc;
}

Užkomentuota ilga eilutė atkomentuojama, jei reikia skaičiuoti CRC tikram 32 bitų masyvui.

Teksto “00010002″ CRC32= 1366C59F

STM32 LCD devboardas

December 5th, 2022

Rašiau, kad prisirinkau PCB nuo brokuotų Varnos žoliapjovių, su grafiniu LCD, STM32F103VGT ir BT. Viskas kaip ir veikia, bet šūdas tas BT (hosto softo normalaus neradau), o ir daugumas MCU kojų neišvedžiota. Todėl nutariau pasidaryti savo PCB.

kibiras
Kibiras broko. Bėda ta, kad beveik visos PCB lakuotos. Lakas nusiima tik mechaniškai.
Read the rest of this entry »

Ugniniai peniai

November 24th, 2022

Toks trumpas xxx postas. Ateinančiam postui reikia pasiruošti keletą chemikalų ir netikėtai gavosi egzotiška nuotrauka:

a
Tai toks savaime augantis vamzdelis iš kurio galo veržiasi liepsna ir ta pati medžiaga kuri ir formuoja vamzdelį. Kažkokio tai fizikinio ar cheminio kaprizo dėka, tie vamzdeliai gavosi kaip bybukai kurie spjaudo ugnimi.
Read the rest of this entry »

Aukso viela

November 12th, 2022

Šiam postui reikalingas “diskleimeris": Iš kur gauti tokius chemikalus be atitinkamų leidimų aš nežinau. Šios cheminės medžiagos pavojingos, o su kai kuriomis kombinacijomis- nuodingos. Jei kils mintis daryti cheminį aukso gryninimą namų sąlygomis, galiu pasakyti, kad šis biznis nėra pelningas- per didelė savikaina ir per maža marža. Apsimoka tik tada, kai dirbama su kilogramais, o tokiais kiekiais vartosi tik didelės chemijos įmonės. Gal kokioje rusijoje, kur visiems nusispjauti ant ekologijos ir sveikatos ir kur pusė chemikalų galima pavogti tai dar atsipirktu.
Antras diskleimeris- kas parodyta, tinka tik mažiems kiekiams, laboratorinėms sąlygoms, kai eksperimentui prisireikia gryno metalo. Patikėkit, bandant didinti mąstelį gaunasi daug problemų ir feilų- patikėkit mano patirtimi ir praktika. Ir visdėlto, jei norite kažką daryti tokio- pasidomėkite Italijoje gaminamom perdirbimo linijom.

Taigi, mums reikia aukso vielos. Gryno aukso vielos, kur švarumas yra 999+. Kaip pradinė medžiaga buvo panaudotas visoks auksinis šlamštas- atliekos nuo mikroschemų, sutraukytos grandinėlės ir net motinos dantis (kažkada išmainiau į naujus šiuolaikinius protezus). Auksas nėra grynas- detalės užterštos visokiais metalais, grandinėlės apie 50%, dantis buvo gal 70% (dantistai pavogė). Visi aukso gabaliukai buvo kažkada sulydyti į mažus blyniukus.
Šiuos blyniukus reikia ištirpdyti rugštyje- karališkoje, aqua regia. Tačiau, jei metale yra daugiau nei 10% sidabro, tai blyniukas netirps (reikia metalą skiesti auksu arba variu).

Au valymas
Read the rest of this entry »

FDD magnetinio srauto skaitytuvas

November 12th, 2022

Mano senienų kolekcijoje keletas kompiuterių naudoja lanksčiuosius diskus (disketes). O ir aš pats turiu gana didelę savo Amigos diskelių kolekciją. Taigis, reikalingas įrankis nuskaityti ir kartais atkurti informaciją surašyta į FD. O kartais net reikia kažkaip atkurti disketės turinį, kad paleisti kokį nors eksliusyvinį antikvarą. Atrodo galima pajungti FDD prie kiek senesnio kompo ar net panaudoti FDD su USB. Bet čia nelabai, nes šiuolaikinis kompas ir nešiuolaikinis PC skaito tik savo formatą. O egzotikos tai nelabai. Va, turiu ZX Spectrum kompiuterio, disk monitor diskų- ten sektoriai po kilobaitą. Niekas neskaito. O kaip nuskaityti Amigos diskelį? Ten pilnas ignoras į disko indeksą ir kiekvieną kartą perrašomas visas trekas. Joks PC kontroleris tos košės nenuskaitys.
Reikalingas žymiai žemesnio lygio skaitytuvas- magnetic flux reader. Yra vienas toks atviras projektas Greaseweazle. Va juo ir pasinaudosim.
Greaseweazle V4
Tai AT32F4xx, pora TTL draiverių ir USB. Galima net surinkti su STM32F103, bet pastarasis kiek silpnokas.

Tada reikia tik susirasti visus reikiamus FDD. Du variantus 5.25″ (DD ir HD), du variantus 3.5″ (teoriškai užtenka ir HD, bet kažkotai Amigos diskelių HD blogai skaitė) ir visiška egzotika- 8″ ir 3″.

O dabar kiek kitos programos, magnetinio srauto analizatoriaus screenšotai:
Read the rest of this entry »

Unhappy Tikbalang