Autore Topic: Un Semplice Text Editor  (Letto 3320 volte)

lodger

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: Ollie's Follies
Un Semplice Text Editor
« il: 05 Novembre 2009, 20:56:24 »
 Grazie a un libro mi sto avvicinando per la prima volta all'assembler per il C64.

quindi ho digitato questo listato:
Codice: [Seleziona]
;semplice text editor
;(c) 1983 di k.skier
;lexington,massachusetts
;
;*********
;costanti
;*********
cr=$0d    ;ritorna carrello
lf=$0a    ;a capo
tex=$7f    ;indicatore di inizio testo
etx=$ff    ;indicatore di fine testo
inscar='i'    ;carattere di inserimento
soscar='o'    ;caratere di sostituzione
;*********
;indirizzi esterni
;*********
tv.ptr=$fb    ;puntatore della posizione
params=$3000    ;sullo schermo dei dati di sistema
tvcol=params+3    
tvrig=params+4    
frecc=params+7    
tvsubs=$3100    
pulxy=tvsubs+$13    
tvhome=tvsubs+$2b    
tvtoxy=tvsubs+$3c    
tvgiu=tvsubs+$76    
tvvai=tvsubs+$7f  
tvpiu=tvsubs+$81  
tv.scr=tvsubs+$9b  
vedbyt=tvsubs+$a3  
tvsalv=tvsubs+$c4  
tv.pop=tvsubs+$d3  
vmpage=$3200;pagina di partenza del monitor visibile
selez=vmpage+5  
legbyt=vmpage+$95  
inc.sl=vmpage+$10d  
dec.sl=vmpage+$11a  
prpage=$3400;pagina di partenza utility di stampa
tvt.on=prpage+8  
tvtoff=prpage+$0e  
pr.on=prpage+$14  
pr.off=prpage+$1a  
pr.car=prpage+$40  
invia=prpage+$e4  
sal.sl=prpage+$112  
pop.sl=prpage+$12b  
hex.pg=$3500;indirizzo di partenza del dump esadecimale
sa=hex.pg+$52  
ea=sa+2  
setads=hex.pg+$e3  
nextsl=hex.pg+$27d  
gotosa=hex.pg+$29a  
edpage=$3e00;pagina di partenza dell'editor
edita=edpage+$c8  
;**************
;variabili
;**************
*=edpage
contat
.byte 0;contatore usato da line.2
edmodo
.byte 0; flag 0 oer sostituzione flag1 per inserimento
;**************
;text editor primo livello
;**************
editor  
jsr setbuf  ;inizializza variabili e puntatori
edloop
jsr mostra  ;visualizza una porzione del buffer
jsr edita           ;permette la correzione/movimento del buffer
clc                  
clc                  
bcc edloop          
;**************
;inizializza i puntatori del buffer
;**************
setbuf
jsr tvt.on                     ;attiva il video
jsr invia:                     ;visualizza il titolo
.byte tex,cr,lf,lf              
.byte 'inizializzazione buffer'
.byte cr,lf,lf,etx              
jsr setads                     ;legge gli indirizzi speficati dall'utente
jsr gotosa                     ;selez punta all'inizio del buffer
rts                            ;ritorna
;**************
;mostra
;**************
mostra
jsr tvsalv;salva i byte di pag zero
jsr tvhome;setta la posizione home
ldx tvcol ;pulisce 3 toghe del video
ldy #3    
jsr pulxy  
jsr tvhome
jsr tvgiu ;passa alla riga 2
jsr tvsalv
jsr line.2;visualizza il tresto della riga 2
jsr tvrec  
jsr tvgiu ;passa ala riga 3
jsr line.3;visualizza il testo della riga 3
jsr tvrec ;resetta i byte di pagina
rts       ;e ritorna
;**************
;visualizza la linea di testo
;**************
line.2
jsr sal.sl  ;salva il puntatore selez
lda tvcol    
lsr a        
tax x=tvcol/2
dex          
loop.1
jsr dec.sl  ;decrementa selez x volte
dex          
bpl loop.1  
lda tvcol   ;inizializza il contatore per
sta contat  ;visualizzare tvcol
         ;caratteri
loop.2
jsr legbyt  ;legge un carattere dal buffer
jsr tv.scr  ;lo visualizza sul video
jsr tvvai   ;seleziona la locazione successiva sul video
jsr inc.sl  ;seleziona il byte successivo del buffer
dec contat  ;e' l'ultimo carattere?
bpl loop.2  ;se no passa al successivo
jsr rec.sl  ;resetta selez dallo stack
rts         ;ritorna
;**************  
;visualizza  la linea di stato
;**************
line.3
lda tvcol  
lsr a a=tvcol/2
sbc #2 a=(tvcol/2)-2
jsr tvpiu  ; ora tv.ptr punta 2 caeìratteri piu' a sinistra del centro della linea 3
lda edmodo ;quale modo e'selezionato?
cmp #1     ;modo inserimento?
bne somodo ;se no,il modo sostituzione
lda #inscar;se si',mette in a il carattere di inserimento
clc        
bcc tvmodo  
somodo
lda #soscar;mette in a il carattere di sostituzione
tvmodo
jsr tv.scr ;visualizza il carattere di modo
lda #2      
jsr tvpiu  ; ora tv.ptr punta al centro della linea 3
lda frecc  ;visualizza la freccia
jsr tv.scr ;indice
lda #2     ; ora tv.ptr punta alla posizione riservata
jsr tvpiu  ; all'indirizzo del carattere corrente
lda selez +1;visualizza l'indirizzo
jsr vedbyt  
lda selez    
jsr vedbyt  
rts         ;ritorna  

pero' il DASM(ma anche il 64tass) mi da' alcuni errori per me incomprensibili:


eppure sono sicuro di averlo digitato correttamente :-\

 
Verde,Giallo,Rosso e Blu, e il cervello non c'è piu'! @_@

- CHI VOTA UCCIDE ANCHE TE,DIGLI DI SMETTERE ! -

pippo79

  • Utente
  • **
  • Post: 315
    • http://www.michelangelocarbonara.it
  • Gioco Preferito: last ninja 2
Un Semplice Text Editor
« Risposta #1 il: 06 Novembre 2009, 00:24:27 »
 Mmmmm....  

- in luogo del carattere  '   dovresti forse usare  "
- se metti il punto e virgola non preceduto da uno spazio ti dà syntax error
- attento a spaziare il carattere  =  dagli elementi
- non mettere più operazioni sulla stessa riga

Sono tutti piccoli errori del genere, armati di pazienza e ripercorri riga per riga per la sintassi corretta che in certe cose è piuttosto rigida.

Ciao!

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Semplice Text Editor
« Risposta #2 il: 06 Novembre 2009, 01:04:23 »
Premettendo che iniziare da un programma cosi' complesso (tuttaltro che semplice!) per di piu' concepito per un altro assembler con una sintassi differente, specialmente se non si conosce ALMENO la sintassi dell'assembler che si sta usando, e' come spararsi nelle balle da soli. Se poi aggiungiamo che se vedendo l'output dettagliato degli errori non si intuisce che basta (!) andare alle righe indicate e correggere gli errori SEGUENDO IL MANUALE (si', dasm.doc e' il manuale di dasm) direi che bisogna fare una frenata brusca e ripartire da capo da qualcosa di semplice, e solo DOPO aver letto e riletto i manuali. E' come voler fare un palazzo senza nemmeno sapere quante palate di sabbia ci vogliano per ogni sacco di cemento, e poi chiedersi perche' il palazzo sia venuto giu' alla prima pioggia.

Ora vorrei solo mettere 2 appunti ai suggerimenti di Pippo:

Citazione da: Pippo79
- in luogo del carattere  '   dovresti forse usare  "
Generalmente in dasm e' preferibile, cosi' si evitano differenziazioni tra char singoli e stringe di piu' caratteri, ma UN solo apice indica un carattere singolo quindi
Codice: [Seleziona]
inscar='i    ;carattere di inserimento
soscar="o"  ;caratere di sostituzione
sono validi, e' anche scritto nel dasm.doc (ogni tanto leggere sti benedetti dox)
Citazione da: Dasm.doc
        'c      character
        "cc.."  string (NOT zero terminated if in DC/DS/DV)

Citazione da: Pippo79
- se metti il punto e virgola non preceduto da uno spazio ti dà syntax error
- attento a spaziare il carattere  =  dagli elementi
Non so che versione di Dasm usi ma...
Codice: [Seleziona]
*=$1000
bordo=$d020;non servono mica gli spazi
    lda #0;commento attaccato
    sta bordo;anche questo
    rts;non scherziamo, funziona

Un'ultima cosa: non usare il . nelle label, e' un carattere riservato per le label locali. usa l'underline, tv_ptr anziche' tv.ptr, e' cosi' via.
« Ultima modifica: 21 Febbraio 2015, 17:26:25 da eregil »
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

pippo79

  • Utente
  • **
  • Post: 315
    • http://www.michelangelocarbonara.it
  • Gioco Preferito: last ninja 2
Un Semplice Text Editor
« Risposta #3 il: 06 Novembre 2009, 11:22:31 »
 Hai ragione Ian, però una cosa:

*=edpage  scritto così NON funziona

*= edpage sì (almeno nel mio dasm V2.20.07i)

 

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Semplice Text Editor
« Risposta #4 il: 06 Novembre 2009, 13:09:37 »
 
Citazione da: "pippo79"
Hai ragione Ian, però una cosa:

*=edpage  scritto così NON funziona

*= edpage sì (almeno nel mio dasm V2.20.07i)
aggiorna dasm, la tua versione e' vecchia come il cucco =)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

lodger

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: Ollie's Follies
Un Semplice Text Editor
« Risposta #5 il: 06 Novembre 2009, 14:23:28 »
 
Citazione da: "iAN CooG"
Se poi aggiungiamo che se vedendo l'output dettagliato degli errori non si intuisce che basta (!) andare alle righe indicate e correggere gli errori

oddio,non sono cosi' sprovveduto,sapevo che i numeri tra parantesi erano i numeri delle righe con gli errori -o_o-

cmq grazie al tuo consiglio di rinominare le label ora funziona,ma non era l'unico errore,c'erano errori proprio nel listato del libro!
per esempio in certe righe diceva:

jsr tvrec
jsr rec_sl

ma non c'era nessuna label con quei nomi O_O

quindi l'ho sostituite rispettivamente con tv_pop e pop_sl spero di non aver fatto una stupidata...ancora devo provarlo.
questo è il nuovo file corretto:

editor.txt

Ciao.
Verde,Giallo,Rosso e Blu, e il cervello non c'è piu'! @_@

- CHI VOTA UCCIDE ANCHE TE,DIGLI DI SMETTERE ! -

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Semplice Text Editor
« Risposta #6 il: 07 Novembre 2009, 00:59:08 »
Citazione da: "lodger"

jsr tvrec
jsr rec_sl

ma non c'era nessuna label con quei nomi O_O

quindi l'ho sostituite rispettivamente con tv_pop e pop_sl spero di non aver fatto una stupidata...ancora devo provarlo.
 
Fosse solo quello il problema =)
Il fatto e' che questo e' solo un pezzo dell'intero programma, basti vedere gli indirizzi definiti nell'intestazione - pessimo modo tra l'altro, mettere indirizzi di subroutines "hardcoded" a quel modo vanifica l'uso delle label, tanto vale scrivere tutti gli indirizzi espliciti in chiaro - quindi se non lo si completa non puoi provare un bel nulla.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

lodger

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: Ollie's Follies
Un Semplice Text Editor
« Risposta #7 il: 09 Novembre 2009, 18:40:01 »
 è proprio come dice iAN_CooG,debbo sostituire la sezione "INDIRIZZI ESTERNI" con altri pezzi di listato presenti nel libro
(come le utility di stampa,di schermo ecc...)

quando finiro' le scansioni capirete anche voi ;-)


Bye
;-Q
Verde,Giallo,Rosso e Blu, e il cervello non c'è piu'! @_@

- CHI VOTA UCCIDE ANCHE TE,DIGLI DI SMETTERE ! -

lodger

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: Ollie's Follies
Un Semplice Text Editor
« Risposta #8 il: 11 Novembre 2009, 20:56:16 »
 ecco,il libro è stato pubblicato:

L'Assembler per il Commodore64 e il Vic-20

il listato del TEXT EDITOR si trova a pagina 287,
per farlo funzionare pero' dovete digitare tutti i listati a partire da pagina 209 :-|

in verita',pero',non credo che sia propio obbligatorio,se a uno,per esempio,interessa  solo il "Semplice Text Editor" basta scegliersi i pezzi "utili" al programma,controllando i nomi delle LABEL) ¬_¬

Bye
;-Q
 
Verde,Giallo,Rosso e Blu, e il cervello non c'è piu'! @_@

- CHI VOTA UCCIDE ANCHE TE,DIGLI DI SMETTERE ! -