Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

piccola calcolatrice con z80

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[21] Re: piccola calcolatrice con z80

Messaggioda Foto UtentePietroBaima » 22 giu 2019, 11:12

IsidoroKZ ha scritto:Avevo scritto tempo fa per Z80 alcune routine per calcolare qualche funzione non lineare (radice quadrata, esponenziale, logaritmo e tangente) in BCD, ovviamente in assembler. Era la sagra del cordic!

Urca! =D>
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
77,0k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 9357
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[22] Re: piccola calcolatrice con z80

Messaggioda Foto UtenteMax2433BO » 22 giu 2019, 11:15

IsidoroKZ ha scritto:Il link a EY punta ad un articolo che è stato reso invisibile poiché è in realta un post, non un articolo. Gli avevo già detto di scriverlo come post.


... ok, grazie!!! :ok:

O_/ Max
Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

Sapere sia di sapere una cosa, sia di non saperla: questa è conoscenza. [Confucio, "I colloqui"]
Avatar utente
Foto UtenteMax2433BO
7.684 3 6 9
Master EY
Master EY
 
Messaggi: 2238
Iscritto il: 25 set 2013, 16:29
Località: Un puntino insignificante nell'universo!!

0
voti

[23] Re: piccola calcolatrice con z80

Messaggioda Foto Utentealien75 » 22 giu 2019, 11:31

Buon giorno,
ho progettato una calcolatrice basata su Z80, la quale funziona perfettamente dal punto di vista
dell'hardware. Dal punto di vista del firmware però l'unica cosa che non mi funziona è la gestione
del tastierino decimale. Con la funzione Get() applicata al recupero dei tasti non riesco a far
avanzare il conteggio della variabile count. Mi spiego meglio: se pigio un tasto della tastiera esso
dal valore '0' passa ad un valore diverso da '0' ma se lo rilascio tale valore dovrebbe tornare a '0'
ma ciò non accade. questo è il motivo per cui riesco ad inserire a display la prima cifra ma non
la seconda, la terza e così via. La funzione tastiera() ha lo scopo di far visualizzare l'incremento
della variabile 'count' ma mi viasualizza un solo incremento. Per favore aiutatemi a capire perché
una volta pigiato un pulsante se rilasciato non torna a '0'. Riporto di seguito i sorgenti e lo schema
elettrico perfettamente funzionante sul piano HW.


main.bas:
Codice: Seleziona tutto
Include "display.bas"
Include "keyboard.bas"
Dim c(3) As Short
Dim key As Long

main:

While 1
        key = tastiera()
WendEnd



keyboard.bas:
Codice: Seleziona tutto
Function tastiera() As Long
Dim d As Short Dim bin As Long inizio:
          c(0) =0
          c(1) =0
          c(2) =0
          d = 0
         c(0) = Get(00)
         c(1) = Get(01)
         c(2) = Get(02)
         d = c(0) + c(1) + c(2)
         If d <> 0 Then
                If statopin = 0 Then
                       count = count + 1
                       statopin = 1
                Endif
         Endif
         If d = 0 Then
              statopin = 0
         Endif
         bin = converti_dec(count)
         Call visualizza(00, bin)
        Goto inizio
End Function


Non riporto il corpo della funzione display.bas perché il problema non risiede lì dentro.
Avatar utente
Foto Utentealien75
15 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 31 lug 2011, 14:08

0
voti

[24] Re: piccola calcolatrice con z80

Messaggioda Foto Utentealien75 » 22 giu 2019, 11:34

Ho riportato sopra il codice in BASIC della gestione della tastiera.
Ho utilizzato il BASIC per la sua semplicità dato che SDCC (un C per Z80) era troppo complicato da utilizzare
per compilare i sorgenti. Comunque questo BASIC permette di inserire pure delle routine in ASM.
Avatar utente
Foto Utentealien75
15 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 31 lug 2011, 14:08

0
voti

[25] Re: piccola calcolatrice con z80

Messaggioda Foto UtentePiercarlo » 22 giu 2019, 13:01

PietroBaima ha scritto:All’epoca i programmatori seri utilizzavano esclusivamente l’assembler e ottimizzavano a livello di byte (di bit no, a quel livello ottimizzavano gli hardwaristi).


Bella forza, non c'era altro per i professionisti. Quanto ai programmatori "seri" penso che all'epoca lo erano più o meno tutti quelli che se ne occupavano, anche se magari erano ancora studenti; i PC "user-friendly" erano ancora in gestazione...
Avatar utente
Foto UtentePiercarlo
21,8k 6 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 5951
Iscritto il: 30 mar 2010, 19:23
Località: Milano

0
voti

[26] Re: piccola calcolatrice con z80

Messaggioda Foto UtentePiercarlo » 22 giu 2019, 13:08

alien75 ha scritto: Comunque questo BASIC permette di inserire pure delle routine in ASM.


Credo che all'epoca lo facessero tutti; con 64K di memoria massima a qualche compromesso bisognava sottostare per forza di cose... e di cose ne facevano girare comunque un bel po'! :-)
Avatar utente
Foto UtentePiercarlo
21,8k 6 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 5951
Iscritto il: 30 mar 2010, 19:23
Località: Milano

0
voti

[27] Re: piccola calcolatrice con z80

Messaggioda Foto Utentealien75 » 22 giu 2019, 13:34

Piercarlo ha scritto:
alien75 ha scritto: Comunque questo BASIC permette di inserire pure delle routine in ASM.


Credo che all'epoca lo facessero tutti; con 64K di memoria massima a qualche compromesso bisognava sottostare per forza di cose... e di cose ne facevano girare comunque un bel po'! :-)



Il problema consiste nel fatto che l' if() che contiene l'incremento della variabile count viene eseguito una volta sola
e non capisco perché, nessuno mi puo' aiutare? Dipende tutto dalle var C(0), C(1) e C(2) che non tornano mai a '0'.
perché?
Avatar utente
Foto Utentealien75
15 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 31 lug 2011, 14:08

0
voti

[28] Re: piccola calcolatrice con z80

Messaggioda Foto UtentePiercarlo » 22 giu 2019, 14:08

Ho scarsa e ormai vetustissima esperienza su questi problemi ma la chiave per risolverli sta sempre nel tener traccia un passo alla volta su come il processore svolge effettivamente una data routine ed esaminare le incongruenze tra quello che SI CREDE faccia quella routine e quello che fa realmente in pratica. I processori eseguono tutto pedissequamente al meglio, errori compresi.

Segui passo passo come viene eseguita la routine, individua il punto preciso dove sbrocca e cerca poi di individuare cosa la fa deragliare in quel punto dallo svolgimento atteso.
Avatar utente
Foto UtentePiercarlo
21,8k 6 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 5951
Iscritto il: 30 mar 2010, 19:23
Località: Milano

0
voti

[29] Re: piccola calcolatrice con z80

Messaggioda Foto UtenteMarcoD » 22 giu 2019, 15:27


c(0) = Get(00)
c(1) = Get(01)
c(2) = Get(02)


Dovrebbe leggere gli ultimi tre caratteri introdotti ?

Esistono svariati dialetti BASIC.
Nel Microsoft Quickbasic del..1986 di cui ho ancora la fotocopia di un manuale,

Usa GET esempio GET #1,I% per leggere il record I% dal file 1

Per la tastiera (standar input device) adopera INKEY$
esempio:
...
A$ = INKEY$
IF LEN(A$)<> = THEN
RISPOSTA$ = RISPOSTA$ + A$
END IF
.....

O_/
Avatar utente
Foto UtenteMarcoD
6.259 4 8 13
Master EY
Master EY
 
Messaggi: 2462
Iscritto il: 9 lug 2015, 16:58
Località: Torino

1
voti

[30] Re: piccola calcolatrice con z80

Messaggioda Foto UtenteIlGuru » 22 giu 2019, 16:45

Non puoi usare tutti i 64k per ram e rom. Devi riservare un banco di indirizzi per l'IO per poter leggere il tastierino numerico e scrivere sul display.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.129 1 10 13
Master
Master
 
Messaggi: 1363
Iscritto il: 31 lug 2015, 23:32

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti