OldComp.cz

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


Právě je 16.04.2024, 12:06

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 19 ]  Přejít na stránku Předchozí  1, 2
Autor Zpráva
 Předmět příspěvku: Re: Loxley - tohle ze je BASIC?
PříspěvekNapsal: 22.02.2022, 23:17 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3659
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
Taaaaakze, pozrel som sa tej hre trosku na zubky, a cele je to jeden oooobrovsky oj.... oblb, ktory by som ja osobne zo sutaze basicovych hier okamzite diskvalifikoval. Temer cela hra je totiz napisana v strojaku, ktory si, aby sa nepovedalo, sem-tam spusti nejaky kusok basicu. A aby sa este viac nepovedalo, tak veci na obrazovku zobrazuje v basicu prikazmi PRINT s vhodne nastavenym znakovym fontom.

Ako to funguje:
Na zaciatku v uvodnom basicu sa spravi CLEAR 24579 ktory nastavi SP na presne danu hodnotu. Nasledne sa loadne prvy kodovy blok hry, ktory kompletne prepise systemky, basic a aj cely zasobnik. Kedze sa zasobnik prepisal vhodne predpripravenymi datami, vykonavanie skoci tam, kam chce programator a odteraz uz veselo bezi poctivy strojak !

Avsak, jedna velka finta tohto strojaku sa skryva prave v tom "with ROM calls". Nie su to ziadne seriozne ci dokumentovane romkove rutinky, ale "iba" rozne kusky rutin v romke, z ktorych je vyskladany cely strojak hry a ktore autor pouziva ako "instrukcie".

Napriklad ked potrebuje naplnit register HL, tak skoci na #10A6 kde je POP HL : RET, t.j. register HL sa naplni z vyssie spomenych vhodne predpripravenych dat zo zasobniku, a nasledny RET skoci zase na nasledujucu "instrukciu".
Ked potrebuje nieco zapisat do pameti, skoci napriklad na #16FD kde je LD (HL),C : INC HL : LD (HL),B : RET
Ked potrebuje urobit v pameti vecsie zmeny (vymazat/presunut blok) tak vyssie spominanym sposbom naplni registre BC,DE,HL a skoci na #19F7 kde je LDIR : POP HL : RET
Ked potrebuje nieco porovnat, skoci napriklad na #05E0 kde je CP #01 : RET. Roznych takychto porovnabvaciek aj s inymi cislami je v romke viac, tak si vyberie ktora sa mu hodi.
Podmieneny "skok" si urobi napriklad skokom na adresu #102E kde je RET NZ : LD SP,HL : RET Toto funguje tak ze ak je NZ tak pokracuje dalsou "instrukciou" v sekvencii na zasobniku, ale ked nie, tak naplni SP inou hodnotou a spusti "zasobnikovu sekvenciu" na uplne inom mieste v pameti.
Samotne #102F LD SP,HL : RET predstavuje potom nepodmieneny skok v ramci zasobnikovej sekvencie "instrukcii".
Ked potrebuje vykonat nejaky kusok v basicu, tak vyssie spominanymi sposobmi ponastavuje systemky basicu a skoci na #1B7D, kde sa spusti interpreter basicu. Vykonavana cast basicu konci prikazom STOP (co urobi RST #08 : DB #08 a toto si odchyti error handler ktory nastavi SP podla hodnoty ERRSP:23613 a urobi RET. V pameti je tu samozrejme uz predpripravena dalsia zasobnikova sekvencia, ktora sa potom zacne "vykonavat".

Cela hra, aj ked v nej usilovne bezi strojak, sa paradoxne zaobide bez akehokolvek USR. To preto, lebo k prvemu spusteniu strojaku doslo prave na zaciatku tym ze loadovany blok prepisal zasobnik a nad celou dalsiou cinnostou uz vladne strojak riadeny predpripravenymi zasobnikovymi sekvenciami.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Loxley - tohle ze je BASIC?
PříspěvekNapsal: 22.02.2022, 23:48 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1404
Has thanked: 130 times
Been thanked: 71 times
Busy píše:
Milsa píše:
Veď som tam písal, že s použítím POKE. Neviem presne aké parametre BASICové rutiny používajú, ale v princípe som to myslel takto: Pripravíš dáta do pamäte cez POKE, kľudne aj viac dát naraz a potom len spúšťaš cez USR...
Ako uz vyssie napisal dex, USR pouzit nemozes, pretoze volas priamo svoj vlastny strojak kde si mozes robit co len chces, a to uz potom nie je cisty basic. A v demach Cowina a Balik je vsetko v cistom basicu, ani jedno USR nie je pouzite.

Inak, rozmyslal som nad tvojim navrhom najprv naPOKEovat parametre, nasledne nacitat parametre vo vlastnom strojaku a potom priame volanie vykonnej casti prikazu do romky (ak som to spravne pochopil). Napriklad:
Kód:
POKE 40000,riadok : POKE 40001,stlpec : POKE 40002,CODE "x" : RANDOMIZE USR 50000
Strojak:
Kód:
org 50000
ld a,#16 ; Kod pre AT
rst #10
ld de,40000
ld bc,3
jp #203C
Ale cele toto mi stale vychadza ovela pomalsie, nez normalne poctive vykonanie basic prikazu PRINT AT riadok,stlpec;"x"

Musí, lebo to celé spracováva. Ale nahádž všetko a potom volaj v jednom riadku viac USR za sebou. Vtedy by to už malo byť rýchlejšie, lebo to pomalé nahadzovanie sa spraví predtým.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Loxley - tohle ze je BASIC?
PříspěvekNapsal: 23.02.2022, 00:50 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
Busy píše:
Taaaaakze, pozrel som sa tej hre trosku na zubky, a cele je to jeden oooobrovsky oj.... oblb, ktory by som ja osobne zo sutaze basicovych hier okamzite diskvalifikoval. Temer cela hra je totiz napisana v strojaku, ktory si, aby sa nepovedalo, sem-tam spusti nejaky kusok basicu. A aby sa este viac nepovedalo, tak veci na obrazovku zobrazuje v basicu prikazmi PRINT s vhodne nastavenym znakovym fontom.

Jedna z kategórii je
Pure BASIC: žiadne rutiny assembleru, okrem tých, ktoré sú súčasťou samotnej ZX Spectrum ROM.

Presné info tu:
https://bytemaniacos.com/web/?page_id=3877


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Loxley - tohle ze je BASIC?
PříspěvekNapsal: 23.02.2022, 12:38 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3659
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
Antony/DTA píše:
Pure BASIC: žiadne rutiny assembleru, okrem tých, ktoré sú súčasťou samotnej ZX Spectrum ROM.
Tak z "pravneho hladiska" je to sice nenapadnutelne, lebo PC registrer beha iba po romke, ale fakticky je to cele ofintene tak, ze ten basic je tam naozaj v podstate len "do poctu" a uplne to popiera celu filozofiu a ducha basicovej sutaze :shrug:


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ů: 19 ]  Přejít na stránku Předchozí  1, 2

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 4 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:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz