Tag Archives: SOFT

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

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”.

MS… ir vėl?

MS: Ar naudojat Edge, jis toks geras.
L: Ne.
MS: Ar nori Edge?
L: Ne.

Praeina kiek laiko. Ir po kažkiektais updeitų…
startup
MS: Nenori, nenori. Va ir naudojies.

Dar patiko užrašas- “high impact”

Taigis, eikit į “startup” arba Lietuviškai “paleisties” ar kaip ten ir išjungiam.

Dar karta galios matuoklis

Praėjo dešimt metų ir vėl prireikė elektros galios matuoklio… Va tai laikas bėga. Senąjį modelį aš vieną padovanojau, kitą pardaviau ir sau nepalikau. Buvo dar kelios PCB, keli dar skaitliukai. Bet va firmwarė man nepatiko. Norėjosi universalesnės, rimtesnės ir dar norėjosi kitokių funkcijų. Teko kiek pakrapštyti galvą ir gavosi nauja firmvarė, bet prietaiso konfiguravimas dar labiau užsikomplikavo. Teko parašyti ir konfiguravimo utilitą.

Va softo ekrano vaizdeliai:
ADE7758
Čia nešiojamas kompas pajungtas. Matosi kad galima rašyti į bet kurį ADE7758 registrą ar į EEPROMą. EEPROM laikomos visos registrų reikšmės ir dar kelios konstantos, kaip srovės trafo koeficientai ir įtampos daliklio parametrai.
Continue reading →

Softas Vanta XRF grafikams

Jau kelis metus Olympusas negali padaryti normalaus softo. Net elementariausios klaidos dar nepataisytos, o jau dėl grafikų tai išviso neklausk. O dirbant kartais reikia palyginti visą XRF spektrą- pvz palyginti medžiagos “fingerprint”. Ne tik palyginti, bet ir pažymėti svarbesnes zonas, uždėti markerius. Ir aišku, gražiai atspausdinti ar eksportuoti į pdf failą.
Visas softas parašytas per kokius penkis vakarus ir grynai “for fun”. Kartu kiek daugiau išmokau apie .NET galimybes.

Kad naudotis programa, reikia kaip nors išeksportuoti XRF spektrą į CSV failą. Tai irgi ne iškarto pavyksta, bet galima nugalėti Olympuso kvailystes ir šiaip ne tai ištraukti duomenis. Toliau reikia pašalinti pirmas 40 eilučių ir pirmą stulpelį (gal vėliau padarysiu automatinį importą).

Darbinis pavyzdys, trys medžiagos, labai panašios. “Standartinis” grafikas, matomas originaliam softe atrodo maždaug taip:
XRF
Continue reading →

Proto mankšta: SVG kalbos interpretatorius

Viskas prasideda nuo mažos nesamonės: nutariau ant vieno 3D spausdinto gaminio padaryti USB jungties logotipą. Kokio nors STL failo greitai nusikrauti niekur neradau (for free arba download be registracijos). Tada sau galvoju- nu yra gi SVG iliustracija, ten gi grynas vektorius, tereikia jį tik “ištempti” į viršų (extrude) ir viskas bus čiki.

Ir tada pradidėjo… Mano 3D printeriavimo ir modeliavimo programa tokių failų nepriima. Gerai, ji netobula ir ne tam skirta. Online konverteris kažko irgi neveikia:
Defektuotas STL
Matom kaip nukando gabaliuką nuo kvadratėlio.
Continue reading →

VB.NET ir bitai, bei tekstai

Kaip apsukti bitų seką iš LSB į MSB? Galima padaryti ciklą ir kiekvieną bituką perkopijuoti į kitą baitą. Atrodo paprasta užduotis ir šiuolaikiniam 32/64 bitų kompui paprastas reikalas. Taip ir atrodė, kol nepabandėm prasukti megabaitus… Chmm, atrodo lėtokai. Galima daryti su 256 variantų look-up lentele. Keista atrodo, bet irgi ne taip greita kaip atrodo… x86 ar 64 tikrai turi kokias nors komandas tokioms operacijom… bet VB.NET nusprendė, kad to nereikia…

O ką siūlo internetiniai maniakai…? Wow:

a = ((buferis(i) * &H202020202UL And &H10884422010UL) Mod 1023UL) ' no way! 3 operacijos

Kas per? Bet veikia! Ir gana greitai veikia… geras. Buvo dar keli variantai kurie veikia su C ar C# ar C++, bet perrašius į VB jau neveikia. Spėju dėl “overflow”, nes VB neleidžia daryti perpildymo tokiose operacijose.

O kas dėl teksto? Ogi vėl lėtai veikia. Visose VB.NET pavyzdukuose naudojama:

tekstas="Tekstas"+kazkas.ToString+"dar kazkas"+vbCrLf
arba
sampleStr = "Hello" & " World"

Viskas kaip ir veikia. O bet tačiau! Jei pabandytumėm tokias operacijas padaryti su keliais milijonais teksto gabaliukų, pastebėtume, kad kompas intensyviai dirba. Tačiau lėtai. Kame reikalas? Ogi MS programuotojai nusprendė, kad nafig optimizuoti tą kodą (matyt dėl suderinamumo- tai dėl atminties rezervavimo subtilybių) ir kiekviena operacija tai naujo “string” sukurimas ir kopijavimas į jį. Techniškai du stringai nesusijungia, o sukuriamas trečias stringas i kurį kopijuojama pirmų stringų turinys. Darant milijonus operacijų, tai labai pasijunta.
Kaip tai sprendžiasi? Juk stringų klijavimas yra viena iš pamatinių demokr….ptfu programavimo principų. Yra net specialios stringų programavimo kalbos (perlas?) ir panašiai.

MS sukūrė dar vieną kintamųjų tipą: System.Text.StringBuilder(). Va į šitą galima klijuoti kiek nori visokiausių teksto stringų. Ir tai darosi tikrai greitai. Milijonus teksto gabaliukų suklijuoja akimirksniu palyginus su senu metodu (dešimtys sekundžių).

Kas moka programuoti, tai tokie reikalai visiškai nestebina. O man tai tikrai atradimai. O jei dar pašnekėti apie Multi Thread… 🙂

8 bitų šriftų įrankis

Laikas nuo laiko programuoju visokius niekalus ir kartais prireikia rašyti tekstą į grafinį ekraniuką. Kad ir į tokį:
8 bit font on graphics lcd
(tai ekraniukas iš Husqvarnos automatinės žoliapjovės. Iš broko)

Ir kad nesukti galvos dėl šriftų aš naudojų “klasiką”- vogtus šriftus iš Atari, Commodore, ZX Spectrum ar net Texas Instruments TI99/4A kompiuteriukų. Dar galima naudoti šriftus iš IBM PC video plokščių BIOSo. Svarbu tik nenaudoti tokį specifinį šriftą kur naudoja visi Kinijos programuotojai. Dabar, jau tik pamatęs ekraniuko tekstą galiu atpažinti ar tai Kinijos programuotojų darbas.

Ekraniukai skirtingi- jų ekrano atminties rodymo sistema skiriasi, todėl kartais reikia šriftą manipuliuoti- apversti, veidrodinti, pasukti ar pastumti. Kartais nereikia visų simbolių ar reikia papaišyti kažką specifinio. Tokiam darbui jau reikia specialaus softo. Tačiau čia bėda- softas iš interneto dažnai daro biški ne taip, kaip man reikia. Vieną dieną “triuko plionkė” ir per kelius vakarus gimė mano softas. Jis skirtas man, bet gali pasinaudoti ir blogo skaitytojai. Gal pravers. Bėda ta, kad programa skirta šiuolaikiniams kompams, o šie reikalauja, kad programa turėtų elektroninį parašą. Deja, parašas kainuoja, o aš tikrai iš to nedarau pelno. Todėl softas yra “self signed” ir instaliavimo metu iššoka visokie gąsdinantys įspėjimai.

8 bit font editor rotator C exporter for MCU

Mano programa minimalistinė. Ji gali užkrauti binarinį failą- kokį nors sena ROM dumpą, sukompiliuotą “firmwarą” ir leidžia jį kiek paredaguoti. Jei binarinis failas turi kokį nors 8 bitų pločio sriftą ar grafiką, galima tai surasti ir panaudoti.
Programa gali: redaguoti pixelius, įterpti baitą, ištrinti baitą, sukeisti bitų seką (MSB-LSB), pastumti bitus į abi puses su praradimu ar be jo (cikliškai), dirbant su 8 baitų blokais- pasukti 8×8 taškelių matricą pagal ar prieš laikrodžio rodyklę ar sukeisti baitų seką: manipuliacijų rezultatas- 8 bitų šriftas sukinėjasi į bet kurią pusę, apsiverčia ar gaunasi veidrodiškas atspindys.
Visos šitos manipuliacijos reikalingos kai reikia pakeisti rodymo kryptį ar vaizdą LCD ekrane.
Gautą rezultatą galima išsaugoti binariniam faile arba išeksportuoti į C kalbos “source code”.

Pati programa kartas nuo karto atnaujinama, todėl jį turi specialų puslapį: FontRotator install page.

Programa parašyta naudojant nemokamą Microsoft Visual Studio 2019, Basic kalboje. Deja reikalauja naujoviško kompiuterio. Turėtu veikti ir 32 bitų sistemoje, tačiau neturiu kur išbandyti,

Angliškos mini instrukcijos: Fontrotator- free bitmap font editor manual.

ARM:0020 smurtinis hardcorinis žaidimas Rogue

Jau rašiau, kad internetuose radau Rogue žaidimo source code kuris netikėtai susikompiliavo ant mano kompiuterio. Deja ant kitų kompiuterių jis neveikė. Bandžiau tokį iškrypimą, kaip perkelti source code į Microsoft Visual Studio Express, bet ten tikriausiai iš principo negali veikti jokie senoviški C kalbos failai- microsofto programa pranešinėjo keistas klaidas. Numojau į tai ranka ir pagalvojau- jei kompiliuojasi su gcc, tai kodėl jis nesikompiliuoti ir su ARM gcc (AVR tai gal per silpnas). Pasirodo, puikiausiai kompiliuojasi. Teko tik išpjauti dali paprogramiu susijusiu su failais ir prikabinti savo. Taip gavosi toks monstras:

Rogue running on STM32F103 MCU USB

Tai USB-COM-Rogue su STM32F103. Tereikia tik USB terminalo. Po tiekos programinimo, manau UART versija dar greičiau gautusi. Dar beliko viską sukultūrinti, nes dar liko visokių bugų- pvz. po žaidėjo mirties, jis kaip zombis toliau gali vaikščioti po labirintą. Nesvarbu, kad jau parodė mirties ekraną- turėjo pasileisti žaidimas iš naujo, bet kažkaip neišsivalė buferiai ir viskas liko iš seno žaidimo. Visiškai nesupratau dėl TERMCAP failo- vieną įdėjau ir veikia, įdėjau antrą- neveikia. Vėl įdėjau pirmą- neveikia. Veikia tik iš vakar dienos backupo. Originalus source kodas gana užsuktas. Užtat ir ant ARM gcc kompiliuojasi be jokių “warningų”.

Žaidimo source code ir kompiliuotas HEX. Dėmesio! Binaras gaunasi didelis (92kB ir neaišku kiek RAM jam reikia) ir tikrai neveiks ant BluePill. Jis veikia ant mano “white pill“, su pilnaverčiu STM32F106RET6.

Rogue: hardcorinis smurtinis žaidimas

Yra toks tekstinis (!) žaidimas pavadinimu Rogue. Pasinorėjau pažaisti, pajusti tikrą 2D grafiką (smegenyse), todėl paieškojau guglėje. Radau, bet nepatiko valdymo mygtukai. Todėl nutariau persidaryti į savo variantą, tuo labiau, kad source kodas yra. Kompiliuojant pasipylė srautas “warningų”, o aš mėgstu, kai kompiliuojasi visiškai be nieko… Teko pavargti kelias dienas- senovės programišiai labai mėgo “nutylėjimus” ir ignoravo viską iš eilės. Dabar rezultatas sumažėjo iki vieno įspėjimo:


> "make.exe" all
cc -g -c -DUNIX -DUNIX_SYS5 -Iinc -MMD -MP -MF"build/levo.d" src/levo.c -o build/levo.o
cc -g build/monster.o build/ring.o build/rogue.o build/levo.o build/random.o build/machdep.o build/object.o build/zap.o build/play.o build/main.o build/inventory.o build/save.o build/pack.o build/room.o build/level.o build/instruct.o build/init.o build/hit.o build/move.o build/score.o build/trap.o build/throw.o build/use.o build/message.o build/spec_hit.o build/lcurses.o -lcurses -Wl,-Map=build/../rogue.exe.map,--cref -Wl,--gc-sections -o build/../rogue.exe
/usr/lib/gcc/i686-pc-msys/6.4.0/../../../../i686-pc-msys/bin/ld: symbol `stdscr' missing from main hash table
size build/../rogue.exe
text data bss dec hex filename
114789 22240 5405 142434 22c62 build/../rogue.exe

> Process Exit Code: 0
> Time Taken: 00:01

Mano indelis- kogero visi “h” failai ir “makefile”. Sekantis etapas- šis smurtinis žaidimas turi suktis ant mikrokontrolerio.

Rogue source code C ir sukompiliuotas EXE failas. Veikia ant Windows 10.

Kaip susikompiliavo? Tikrai nežinau. Mano kompe pilna visokių C kompiliatorių ir kažkuris pasirodo kompiliuoja ir windowsinius exe failus.

Atari kompiuterio OS ROM darymas

Labai lėtai remontuoju senoviška Atari 800XL kompiuteriuką. Jis jau buvo kiek tobulintas mūsų meistrų, plėsta atmintis, dėtos rusiškos mikroschemos ir šiaip kūšis laidų. Jis vos vos veikė ir ekranas mirgėjo dėl atminties problemų. RAM čipų keitimas nepadėjo, todėl nutariau atstatyti pradinį, fabrikinį variantą. Deja nuardžius visas ataugas, kompiuteriukas nepasileido. Tiesa, oscilografas kažką rodė, bet vaizdelio nebuvo. Poto sekė pertraukos matuojamos metais. Prieš kokią savaite nutariau- reikia rašyti testinį ROMą ir žiūrėti kas ten blogai. Firminio testinio ROMo kažkaip greitai internete neradau.
Todėl teko kiek prisiminti 6502 asemblerį:
Atari ROM linker
Tik pradėjau ne su šiuo, o online versija. Tik buvo bėda, kad HEX kodukus reikėjo rankutėmis perrašyti į ROM čipo failą ir tik vėliau paleisti pradžiai emuliatorių, o poto viską perkelti į hardwarę.
Continue reading →