Quanto tempo free ha kymya?
Mentre lavori dico
Quanto tempo free ha kymya?
Mentre lavori dico
Perchè NO.
Mi è venuta 'sta cosa così... tanto per...
lo trovo stimolante.
Ho QUASI risolto tutto. Non ho capito perché se supero le coordinate 11 si rincoglionisce... forse la tabella dove ho mappato le singole righe per velocizzare avrò sbagliato qualcosa.
Avevo pensato di prendere il numero di riga e moltiplicarlo per 40. Per velocizzare la moltiplicazione per 40, posso sommare due moltiplicazioni: una per 32 (che corrisponde a 5 ROL) ad una per 8 (che corrisponde a 3 ROL). Quindi far fare 3 ROL, memorizzare il valore risultante, altri 2 ROL e sommare con il valore memorizzato.
Lavoro su minimo 3 pc alla volta (2 fisici dai quali mi collego ad almeno 3 VM contemporaneamente) e comunque ogni tanto mi trovo ad aspettare le macchine. O alla pausa pranzo...
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
I'm Major Sludgebucket (ABS). This is an alternative account I created years ago for some reason.
Dunque... so che continuerete a sbattervene il cazzo però...
...adesso la routine di plot 80x50 FUNZIONA!!!!
Adesso sto scrivendo la routine per tracciare una linea tra due punti utilizzando l'algoritmo di Bresenham che mi pare molto veloce.
E' troppo divertente! Cmq la parte per plottare il singolo punto è lunga 380byte circa comprese tabelle e buffer.
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
Mi potete aiutare su una questione matematica (byte signed)???
Vabbè, praticamente ho ottenuto e memorizzato il valore assoluto del delta tra due coordinate ( praticamente ABS(x2-x1) ) come byte signed.
Adesso devo calcolare il valore negativo. Come si fa?
praticamente ho:
A = ABS(X2-X1)
B = ABS(Y2-Y1)
C = -ABS(Y2-Y1) = -B
Avendo A e B, come calcolo C?
(tenete presente che i byte sono signed, quindi da -127 a 128 come valore e
00000010 = +2
00000001 = +1
00000000 = 0
11111111 = -1
11111110 = -2)
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
https://it.wikipedia.org/wiki/Complemento_a_due
C = ( 0 - B )
Ultima modifica di LordOrion; 27-06-17 alle 16:11
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
cazzo che soluzione semplice ed elegante!
grazie bellooohhh!
Ti mando il prg compilato appena finito.
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
Ciao Lord...
tu che sei bravo e mi capisci, se volessi "assemblerizzare" questa formula :
potrei scrivere, considerando che sono byte signed :Codice:x= x + q y= y + s d= d + 2 * (a + b)
???Codice:LDA line_x CLC ADC line_Q STA line_X LDA line_Y CLC ADC line_S STA line_Y LDA line_A CLC ADC line_B CLC ROL ADC line_D STA line_D
Perché ho "tradotto" tutto l'algoritmo ma mi spara punti a capocchia. Non ho mai "lavorato" con byte signed!
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
Kymy, vado a "rimembranze" in quanto e' una vita che non smanetto l'assembly del 6510, ma se non sbaglio l'ALU della cpu gestisce da sola l'artimetica signed. Dai una occhiata al manuale del set di instruzioni.
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
Prendi questo parere con molta fotteseganza
https://www.c64-wiki.com/wiki/ROL
Doubling signed integers in this way requires programming efforts to keep the sign bit from mixing with the other bits, causing erratic sign-changes.
Invece credo sia corretto: Usare lo shift per moltiplicare per due rischia di far uscire il bit di segno, es:
ROL 10001011 = 00010110!!
prova cosi:
Codice:LDA line_x // A <-X CLC ADC line_Q: // A = A + Q STA line_X: // Q = A LDA line_Y // A = Y CLC ADC line_S // A = A + S STA line_Y // Y = A LDA line_A // A = a CLC ADC line_B // A = A + B CLC STA temp // temp = A ADC temp // A = A + temp (= 2 * A ) CLC ADC line_D // A = A + D STA line_D // D = A
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
inutile.... l'assembly è ELEGANTE. Bella soluzione. invece di ROLlare, sommare a se stesso... provo...
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
Bof, la soluzione "elegante" si comporterebbe in modo diverso a seconda del fatto che l'operando e' positivo o negativo. Sommare se stesso e' un trick ma non la cosa piu' efficente: 3 isturzioni contro 1 del ROL e un byte di memoria extra.
Codice:LDA line_x // A <-X CLC ADC line_Q: // A = A + Q STA line_X: // Q = A LDA line_Y // A = Y CLC ADC line_S // A = A + S STA line_Y // Y = A LDA line_A // A = a CLC ADC line_B // A = A + B BMI negative CLC ROL JMP end negative: CLC STA temp // temp = A ADC temp // A = A + temp (= 2 * A ) end: CLC ADC line_D // A = A + D STA line_D // D = A
Ultima modifica di LordOrion; 28-06-17 alle 12:40
+22.437 Messaggi dillà...
Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|
ottimizzo dopo.
continua a non funzionare. vediamo se riesco a debuggare in qualche modo.
Sto utilizzando Relaunch64 (Java) come IDE (DASM) e Vice.
Sotto di BREAK e Z ... è l'unica strada per giungere alla soluzione. Rottura di palle, ma stimolante.
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
Fino al calcolo della d, tutto ok...
Dai... che sento che la soluzione è sotto mano dai!
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.
Mi sa che l'algoritmo è come al cazzo. controllato uno step alla volta e, almeno l'unico caso provato, quello che ho scritto segue l'algoritmo:
preso da qui : https://it.wikipedia.org/wiki/Algori...a_di_BresenhamCodice:swap = 0; DX = x2 - x1; DY = y2 - y1; //siccome scambio DY e DX ho sempre DX>=DY allora per sapere quale coordinata occorre cambiare uso una variabile if (abs(DX) < abs(DY)) { swap(DX, DY); swap = 1; } //per non scrivere sempre i valori assoluti cambio DY e DX con altre variabili a = abs(DY); b = -abs(DX); //assegna le coordinate iniziali x = x1; y = y1; //il nostro valore d0 d = 2 * a + b; //s e q sono gli incrementi/decrementi di x e y q = 1; s = 1; if (x1 > x2) q = -1; if (y1 > y2) s = -1; disegna_punto(x, y); disegna_punto(x2, y2); for (k = 0; k < -b; k+=1) { if (d > 0) { x= x + q; y= y + s; d= d + 2 * (a + b); } else { x = x + q; if (swap==1) { y = y + s; x = x - q; } d = d + 2 * a; } disegna_punto(x, y); }
(nb: provata in vb, funziona. quindi l'algoritmo è ok)
Ultima modifica di KymyA; 28-06-17 alle 15:51
DISCLAIMER: Questo post non invita a commettere reati ne tantomeno ad infrangere la legge (degli uomini o Divina). Quanto scritto può essere parzialmente o totalmente falso o frutto della fantasia (malata) dell'autore. L'autore non si assume responsabilità per quanto scritto, suggerito o sottointeso da questo post.