Autore Topic: Conversione Basic - Assembly  (Letto 5342 volte)

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Conversione Basic - Assembly
« il: 19 Giugno 2004, 11:41:33 »
 Ok,propongo anch'io qualcosa.  :)
Questo è un programma Basic sullo scrolling verticale tratto dalla guida del Programmatore.
Provate a tradurlo in LM  :)
Codice: [Seleziona]
 10 poke53265,peek(53265)and247        
  20 printchr$(147)                    
  30 forx=1to24:printchr$(17);:next    
  40 poke53265,(peek(53265)and248)+7:print
  50 print"     hello";
  60 forp=6to0step-1
  70 poke53265,(peek(53265)and248)+p
  80 forx=1to50:next                    
  90 next:goto40

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
Conversione Basic - Assembly
« Risposta #1 il: 19 Giugno 2004, 12:23:23 »
 Non vale se sbircio nel monitor del Vice, vero? :P
Ho capito di odiare le firme...

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Conversione Basic - Assembly
« Risposta #2 il: 19 Giugno 2004, 14:11:39 »
 
Il monitor del VICE non ti è di nessun aiuto,perchè se scrivi un programma in Basic il C64 non te lo converte in linguaggio macchina :D  ;)  

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
Conversione Basic - Assembly
« Risposta #3 il: 19 Giugno 2004, 14:52:20 »
 Prima o poi imparerò che esiste una "leggera" differenza tra interpretare e compilare!  :D  
Ho capito di odiare le firme...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #4 il: 19 Giugno 2004, 17:27:11 »
Citazione da: "djwiper"
Prima o poi imparerò che esiste una "leggera" differenza tra interpretare e compilare!  :D
Anche compilando il basic del c64, non otterresti un granche' ;)
inizia col tradurre le poke con lda/sta
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
Conversione Basic - Assembly
« Risposta #5 il: 20 Giugno 2004, 13:41:43 »
Citazione da: "iAN CooG/HF"
Citazione da: "djwiper"
Prima o poi imparerò che esiste una "leggera" differenza tra interpretare e compilare!  :D
Anche compilando il basic del c64, non otterresti un granche' ;)
inizia col tradurre le poke con lda/sta
Ci provo... Casomai busso da voi! :P  
Ho capito di odiare le firme...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #6 il: 05 Luglio 2004, 01:09:52 »
 Non ce' nessuno che vuole farsi avanti?
POKE 53265,0 diventa
lda #$00
sta $d011

per fare un addizione in A
clc
adc #numero (A ora vale A+numero)

La routine per stampare un carattere e'
lda #carattere
jsr $ffd2

dai! o devo pensare che siete una manica di codardi? (vediamo se toccandogli l'amor proprio qualcuno si sveglia  :D)  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Conversione Basic - Assembly
« Risposta #7 il: 05 Luglio 2004, 11:37:26 »
 
Diamogli una spinta ulteriore :)
Prima parte della soluzione
Codice: [Seleziona]
           LDA $D011
            AND #$F7
            STA $D011     ; poke 53265,peek(53265)and247
            LDA #$93
            JSR $FFD2      ; print chr$(147)
            LDX #$00
            LDA #$11
LOOP    JSR $FFD2
            INX
            CPX #$18
            BNE LOOP      ; for x=1 to 24:print chr$(17);:next
Et maintenant,à vous! :D  

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Conversione Basic - Assembly
« Risposta #8 il: 09 Luglio 2004, 21:33:58 »
 Anticipo, per chi ha difficoltà, che ho scritto un articolo di 14 pagine sulle prime nozioni del linguaggio macchina. Ancora devo parlarne con Rob e dobbiamo decidere l'eventuale collocazione... cmq spero che questo possa essere di aiuto per iniziare.
Gli argomenti trattati sono: basi numeriche, logica, archittettura di un computer, architettura del 650x e prime istruzioni, con un programma di esempio.
Sto anche lavorando al capitolo 5 della guida di riferimento, dedicato al l.m... ho fatto 44 pagine, mi mancano le routine del KERNAL e anche questo capitolo sarà disponibile - e mi auguro che tutto questo materiale sia di aiuto per chi è all'inizio.

Ciao

(dal che si deduce che sono tornato attivo nel sito...) ;)  :c64:  
-=MarC=ellO=-

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #9 il: 09 Luglio 2004, 21:41:42 »
 
Citazione
Anticipo, per chi ha difficoltà
Il problema e' che non ci sta provando nessuno. La difficolta' e' nostra nel trovare degli alunni volenterosi :mellow:
Citazione
(dal che si deduce che sono tornato attivo nel sito...)
Buon lavoro dunque ;)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Conversione Basic - Assembly
« Risposta #10 il: 09 Luglio 2004, 22:22:03 »
 Ragazzi, io credo di incarnare il livello medio dei visitatori del forum, ovvero.. ci capisco ben poco, anzi niente.
Chi è interessato alla programmazione, certamente si è già costruito una minima base di conoscenza grazie ai propri mezzi, ed esercizi come quello proposto da Alberto o gli altri di Marcello risultano troppo facili.
Chi invece è un potenziale studente, ma non ha ancora sentito la molla scattare dentro di sè, troverà gli esempi un pò troppo avanzati per cominciare.

Ad ogni modo, io mi sono trovato di fronte ad uno scoglio invalicabile, ci ho voluto provare lo stesso, e sono riuscito ad arrivare qui:

Citazione
LDA $D011
           AND #$F7
           STA $D011

Cioè: 10 poke53265,peek(53265)and247

Con mooooolta fatica, e senza la possibilità di verificare che quanto scritto.
O meglio, la possibilità di verificare l'ho avuta quando, nello stesso momento ho scoperto che Alberto aveva postato la soluzione.
Ma purtroppo secondo me postare la soluzione nuda e cruda non ha molto significato se non la si spiega (parlo sempre da ignorante in materia, vi ricordo) per filo e per segno.

Secondo me sarebbe più opportuno verificare che [Primo]  qualcuno degli utenti del forum sia interessato ( e qui do ragione ragione a Ian, credo che purtroppo non ci siano), e poi [Secondo]in base alle conoscenze e preparazione di tali utenti, impostare gli esempi e lezioncine.

Se dunque vi interessa il parere dell'utente medio, io vedrei meglio una serie di "pilloline" di Assembly, piuttosto che esempi così articolati. Sto parlando di argomenti veramente terra terra.
Ad esempio la prima pillolina potrebbe essere la spiegazione di LDA e STA, giusto per iniziare i principianti ai più elementari concetti del linguaggio assembly, che impone un modo di pensare diverso da quello dal più comunemente utilizzato basic.

Questo lo dico come potenziale studente (chissà se davvero avrei il tempo per andare a fondo).
Come webmaster del sito non posso che ammirarvi  per il vostro entusiasmo e la vostra voglia di mantenere viva questa sezione che, proprio grazie a voi, sta avendo comunque un successo e una vitalità che non mi sarei aspettato quando ho creato questa sezione del forum.

Fatemi sapere i vostri commenti, ragazzacci.  :stordita:
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #11 il: 09 Luglio 2004, 22:56:08 »
 
Citazione da: "Roberto"
Secondo me sarebbe più opportuno verificare che [Primo]  qualcuno degli utenti del forum sia interessato ( e qui do ragione ragione a Ian, credo che purtroppo non ci siano)
E questo il punto. Non c'e' nemmeno stata una domanda. non uno che abbia proposto uno straccio di riga di codice chiedendo se era giusto e poteva continuare o come continuare perche' si e' impantanato...
Quindi se non riceviamo almeno un "e' troppo difficile, spiega come!" non vedo nemmeno perche' continuare. Altro che "facciamo un gioco assieme"!
Cazzarola, ai miei tempi (LOL sembro un vecchio) non c'era nessuno a cui chiedere e si imparava cosi':
10 disassemblare
20 provare
30 goto 10

ora che si ha la possibilita' di interagire in tempo reale con chi ne sa qualcosa di piu', e soprattutto i dox in rete a gratis, dovrebbe essere tutto piu' facile. Ma forse e' piu' facile premere shift/runstop che scrivere
Codice: [Seleziona]
*=$0801

    .word EndOfLine
    .word 7102
    .byte $9e
    .asc  "2061"

    .byte 0
EndOfLine
    .byte 0
    .byte 0

;10 poke53265,peek(53265)and247
    lda $d011
    and #$f7
    sta $d011

;20 printchr$(147)
    lda #$93
    jsr $ffd2; CHROUT, stampa un carattere

;30 forx=1to24:printchr$(17);:next
  ; da 0 a 23 anziche' da 1 a 24
    ldx #$00
    lda #$11
loop1
    jsr $ffd2
    inx
    cpx #$18
    bne loop1

;40 poke53265,(peek(53265)and248)+7:print
linea40
    lda $d011
    and #$f8
    clc
    adc #$07
    sta $d011
  ;print da sola significa andare a capo: stampare un chr(13)
    lda #$0d
    jsr $ffd2

;50 print"   hello";
    lda #<stringa
    ldy #>stringa
    jsr $ab1e    ; STROUT, stampa una stringa puntata da YA

;60 forp=6to0step-1
    lda #$06
    sta counter
innerloop
;70 poke53265,(peek(53265)and248)+p
    lda $d011
    and #$f8
    clc
    adc counter
    sta $d011

;80 forx=1to50:next
  ;un ciclo di attesa sufficente
    ldx #$08
d1  lda $d012
    bne d1
    dex
    bne d1

;90 next:goto40
    dec counter
    lda counter
    cmp #$ff    ; negativo?
    bne innerloop; no, fai la next
    jmp linea40  ; si, ripeti il tutto

counter
    .byte 0
stringa
    .asc "   HELLO"
    .byte 0
  ; le stringhe sono terminate da un chr(0)
e perdere tutto sto tempo per un programma che non serve a niente...
Rant mode off.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Conversione Basic - Assembly
« Risposta #12 il: 10 Luglio 2004, 10:54:10 »
 Un piccolo consiglio: io ho imparato i primi rudimenti di Assembler del C64 sugli ultimi 3 numeri di Videobasic della Jackson. Lì venivano spiegati alcuni concetti fondamentali: i registri, LDA, STA, salti condizionati e incondizionati... Può servire come base. (Questo nopn vuol dire che sono un esperto: so leggere un po' il codice Assembler, non sono un programmatore)

Su Edicola C64 ci sono le cassette Videobasic, ma non le scansioni delle riviste. Forse è il caso di rispolverare lo scanner...
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Conversione Basic - Assembly
« Risposta #13 il: 10 Luglio 2004, 11:03:55 »
 Fabrizio, se vuoi contribuire, sei più che benvenuto: http://ready64.altervista.org/italiano/oth...basic/index.php

Io ho i primi 6 numeri, per ora ho iniziato scansionando le prime 10 pagine del primo numero, poi ho preferito concentrarmi sulla scansione di CCC, che trovi sempre nel sito.
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Conversione Basic - Assembly
« Risposta #14 il: 10 Luglio 2004, 11:14:43 »
 
Per tradurre un programma simile in LM basta la Guida del programmatore,o anche l'ottimo libro di Jim Butterfield sull'assembly (ehp...sempre inglese permettendo,ma ad ogni modo garantisco che i concetti esposti,per chiunque abbia un minimo di interesse,sono molto semplici da capire).
Cmq,questi sono proprio I RUDIMENTI DEL LM (ecco perchè ho deciso di postare un programma Basic da tradurre,e non subito un bel listatone macchina che facesse uso dei registri del CIA1).
Comunque,commento le poche righe di soluzione scritte
Codice: [Seleziona]
          LDA $D011; carica il reg.53265 in accumulatore
           AND #$F7 ; mette l'accum.in AND con 247
           STA $D011; mette il risultato in 53265
           LDA #$93  ; carica l'accum.con il valore ASCII di CHR$(147)
           JSR $FFD2 ; stampa il carattere

           LDX #$00  ; inizializza contatore
           LDA #$11  ; codice ASCII carattere da stampare
LOOP    JSR $FFD2; stampa CHR$(17)
           INX          ; incrementa contatore
           CPX #$18 ; contatore = 24?
           BNE LOOP ; no,ripeti (ciclo eseguito 23 volte)