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

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Conversione Basic - Assembly
« Risposta #15 il: 11 Luglio 2004, 00:11:41 »
 Ho riletto le regole del forum ed ho tolto l'articolo... non si può infatti postare un testo molto lungo (scusa Roberto, non l'ho fatto apposta...  :overkiller: )
Ovviamente a chi interessa potrò rendere disponibile, attraverso il sito o in altro modo, tale articolo (ricordo, tratta basi numeriche, logica, struttura di un computer commodore e del 6502/10, primissime istruzioni).

 
-=MarC=ellO=-

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2437
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Conversione Basic - Assembly
« Risposta #16 il: 11 Luglio 2004, 11:55:37 »
Citazione da: "iAN CooG/HF"
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...
Ian, ti propongo uno scambio, tu vieni a fare il webmaster sfigato e io vado a fare il programmatore di successo, poi vediamo chi esaurisce prima i nervi  :)  
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 #17 il: 11 Luglio 2004, 15:41:57 »
 ne sarei felice, ma non ho una posizione di "prorammatore di successo" da offrire in cambio  ;)  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Conversione Basic - Assembly
« Risposta #18 il: 11 Luglio 2004, 20:25:03 »
 
Citazione
ma non ho una posizione di "prorammatore di successo" da offrire in cambio 

da quello che ho visto via via sul forum, sei troppo modesto... sei un grande! ciao ;)

 
-=MarC=ellO=-

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #19 il: 11 Luglio 2004, 22:53:47 »
 Ok, per quanto riguarda il programma convertito, la cosa dell'effetto rimbalzante mi ha incuriosito, e ho notato che succede perche' impiega troppo tempo a muovere lo schermo in alto di un carattere. Ho tentato prima scrivendo la routine che trasferisce byte per byte con indicizzazione, ma anche cosi' ci sono alcuni movimenti brutali in cima allo schermo. Risolto "srotolando" completamente la routine, con grande perdita di memoria (si passa da 300bytes a quasi 6000!)
Ho usato DASM che permette l'uso di macro
Codice: [Seleziona]
;scroll verticale senza IRQ
; iAN CooG/HokutoForce
    org $0801

offset  = $fe
inout   = $fd
counter = $fc

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

    .byte 0
EndOfLine
    .byte 0
    .byte 0

;---------------------------------------------
    lda $d011
    and #$f7
    sta $d011

    lda #1
    jsr $e536
    lda #0
    sta offset
    sta inout

;---------------------------------------------
linea40
    lda #$07
    sta counter

    jsr scroll
    jsr hardscroll
    jsr printstring; stampa la stringa spostata
    jsr calcoffset ; per rendere piu' evidente
                   ; l'effetto "rimbalzante"
    dec counter

;---------------------------------------------
innerloop
    lda $dc01 ; fire joy2
    and $dc00 ; fire joy1/spazio
    and #$10
    beq getouttahere

    jsr scroll
    ldx #$0a
d1  lda $d012
    bne d1
    dex
    bne d1

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

;---------------------------------------------
getouttahere
    lda #$1b
    sta $d011
    rts
;---------------------------------------------
scroll
    lda $d012
    cmp #$fe
    bne scroll  ; ripeti finche' non leggi 0

    lda $d011
    and #$f8
    ora counter
    sta $d011
   ;sta $d020

    rts
;---------------------------------------------
calcoffset

    lda inout  ; 0 all'indietro
    beq jout   ; 1 in avanti
    dec offset
    lda offset
   ;cmp #00
    beq swap
    rts

;---------------------------------------------
jout
    inc offset
    lda offset
    cmp #40-(strend-stringa)
    beq swap
    rts

;---------------------------------------------
swap
    lda inout
    eor #01
    sta inout
    rts

;---------------------------------------------
stringa
   ; ecco perche' nonostante sia un ottimo x-asm, odio dasm :-/
    .byte " ", "h"-$60,"e"-$60,"l"-$60,"l"-$60,"o"-$60," "
strend

;---------------------------------------------
printstring

    lda offset
    tax
    ldy #0
str
    lda stringa,y
    sta $0400+24*40,x
    inx
    iny
    cpy #(strend-stringa)
    bne str
    rts
;---------------------------------------------
hardscroll
;VERSIONE 1 : troppo lenta via kernal
   ;lda #$0d
   ;jmp $ffd2

;VERSIONE 2 : troppo lenta anche cosi'!!
;     ldy #$27
; trrr
; R   set 0
;     repeat 24
; RR  set R+1
;     lda $0400+RR *40,y
;     sta $0400+R  *40,y
; R   set R+1
;     repend
;     dey
;     bmi outh
;     jmp trrr
; outh
;     rts

;VERSIONE 3 : completamente unrolled
R   set 0
    repeat 24
RR  set R+1
C   set 0
    repeat 40
    lda $0400+RR *40+C
    sta $0400+R  *40+C
C   set C+1
    repend
R   set R+1
    repend
    rts
compilare con:
dasm b2l_2.asm -v2 -ob2l_2.prg -lb2l_2.lst
il file .lst serve per vedere il codice risultante, da tenere sempre d'occhio per eventuali errori.

NP: Anthrax - Persistence of Time
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #20 il: 12 Luglio 2004, 21:32:32 »
 
Citazione da: "MarC=ello"
Ho riletto le regole del forum ed ho tolto l'articolo... non si può infatti postare un testo molto lungo
Obiezione: dato che il forum "programmazione" latita di cose interessanti, e il tuo articolo lo e' io suggerirei di dare carta bianca a chi posta sorgenti e tutorials. Credo che Rob non abbia problemi a lasciare carta bianca a me, MarC=ello, Alberto, Ice00 e a chiunque altro abbia qualcosa da proporre in questo forum, perche' stiamo solo cercando di acculturarci assieme. Fine leccata :P

 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Conversione Basic - Assembly
« Risposta #21 il: 12 Luglio 2004, 21:37:43 »
 A tal proposito io avrei migliorato il programma qui sopra, portandolo a meno di 256 bytes. Pero' attendo il nulla osta per postarlo.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2437
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Conversione Basic - Assembly
« Risposta #22 il: 13 Luglio 2004, 19:03:28 »
 Non ho niente in contrario alla pubblicazione degli articoli nel forum (Marcello ha rimosso l'articolo di suo, io non ho messo parola), anche se sinceramente preferirei vedere vedere gli articoli nella loro sede naturale, e soprattutto ritengo inutile avere contenuti doppi.
Questo è il mio parere, poi se gli autori degli articoli decidono comunque di postare qui i loro articoli mi adeguerò.
D'altra parte lo scambio di opinioni e pareri è un fondamentale e su questo siamo tutti d'accordo, quindi se vi sembra una soluzione soddisfacente, io propongo di pubblicare l'articolo normalmente come si è sempre fatto, e poi aprire un topic ufficiale di discussione dedicato. Attendo le vostre opinioni.

Citazione
A tal proposito io avrei migliorato il programma qui sopra, portandolo a meno di 256 bytes. Pero' attendo il nulla osta per postarlo.

Portami l'autorizzazione in carta bollata del comune e il timbro dell'ufficio d'igiene. :mattsid:
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 #23 il: 13 Luglio 2004, 22:02:50 »
Citazione da: "Roberto"
Portami l'autorizzazione in carta bollata del comune e il timbro dell'ufficio d'igiene. :mattsid:
Ok, di portartela di persona non se ne parla ma l'ho appena spedita e la riceverai a giorni. Nell'attesa studiati questo
Codice: [Seleziona]
;scroll verticale senza IRQ v4
;   + codice hardscroll autogenerante
;   + gestione scroll mem.colore
;   + prende la stringa direttamente in ROM :)
;   + versione di soli 251 bytes !! (253-loadaddress)
; iAN CooG/HokutoForce

   org $0801

offset  = $fe
inout   = $fd
counter = $fc

table1 = $9d
table2 = $9e
tabl1h = $9b
tabl2h = $9c
currp  = $fb
flipflop = $fe
endloc = $07e8

stringa = $e47d
strend  = $e489;e48b

   .word EndOfLine
   .word 7102
   .byte $9e
   .byte "2059"

   .byte 0
EndOfLine
  ;.byte 0; lda #00 e' abbastanza (l'importante e' lo 00 per fermare il basic)
  ;.byte 0

;---------------------------------------------
   lda #0
  ;asl $d021
   sta currp
   sta table2
   sta flipflop
   lda #$04
   sta tabl1h
   sta tabl2h
   lda #$28
   sta table1
   ldy #<hardscroll
   ldx #>hardscroll
   stx currp+1
   jsr gencode

  ;lda #0; gencode termina con x=0
   stx offset
   stx inout

  ;lda $d011
  ;and #$f7
   lda #$17
   sta $d011

   jsr $e544; non serve + riempire di bianco

;---------------------------------------------
linea40
   lda #$07
   sta counter

   jsr scroll
   jsr hardscroll
  ;jsr printstring

   lda offset
   tax
   ldy #0
str
   lda stringa,y
   cmp #$40
   bcc okthis
   and #$1f
okthis
   sta $0400+24*40,x
  ;lda offset; coloriamo ogni riga con il valore di offset
  ; o meglio, ogni carattere con se stesso
   sta $d800+24*40,x
   inx
   iny
   cpy #(strend-stringa)
   bne str

   jsr calcoffset

   dec counter

;---------------------------------------------
innerloop
   lda $dc01
;brutalexit
   and $dc00
   and #$10
   beq getouttahere
  ;beq brutalexit+1;usa BRK per uscire+getouttahere = -4 bytes

   jsr scroll
   ldx #$0a
d1  lda $d012
   bne d1
   dex
   bne d1

   dec counter
   lda counter
   bpl innerloop
   jmp linea40

;---------------------------------------------
getouttahere
   lda #$1b
   sta counter
;---------------------------------------------
scroll
   lda $d012
   cmp #$fe
   bne scroll

  ;lda $d011
  ;and #$f8
   lda #$10
   ora counter
   sta $d011

   rts
;---------------------------------------------
calcoffset

   lda inout
   and #01
   beq jout
   dec offset
   beq swap
   rts

;---------------------------------------------
jout
   inc offset
   lda offset
   cmp #40-(strend-stringa-1)
   bne swapext

;---------------------------------------------
swap
   inc inout
swapext
   rts

;---------------------------------------------
gencode

mainloop
        jsr sub2;$0400 1a volta
        jsr sub2;$d800 2a volta

        inc table1
        bne i1
        inc tabl1h
i1
        inc table2
        bne i2
        inc tabl2h
i2

        lda tabl1h
        cmp #>endloc
        bne mainloop
        lda table1
        cmp #<endloc
        bne mainloop

        lda #$60; metti RTS con la prossima sub1

;---------------------------------------------
sub1
        sta (currp),y
        iny
        bne lx
        inc currp+1
lx
        rts
;---------------------------------------------
sub2
         inc flipflop
         lda flipflop
         and #$01
         tax
         lda patval,x
         sta patch1

       ;lda $0428

         lda #$AD
         jsr sub1
         lda table1
         jsr sub1
         lda tabl1h

         jsr sub3

        ;sta $0400
         lda #$8D
         jsr sub1
         lda table2
         jsr sub1
         lda tabl2h

;---------------------------------------------
sub3
patch1   byte $2c
         adc #$d4

         jmp sub1
;---------------------------------------------
patval byte $18,$2c; CLC / BIT
;---------------------------------------------
hardscroll
       ; generare il codice da qua

la routine di gencode e' ancora piu' incasinata ma fa bene il suo lavoro :)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Conversione Basic - Assembly
« Risposta #24 il: 18 Luglio 2004, 21:34:07 »
 
Citazione
Obiezione: dato che il forum "programmazione" latita di cose interessanti, e il tuo articolo lo e' io suggerirei di dare carta bianca a chi posta sorgenti e tutorials. Credo che Rob non abbia problemi a lasciare carta bianca a me, MarC=ello, Alberto, Ice00 e a chiunque altro abbia qualcosa da proporre in questo forum, perche' stiamo solo cercando di acculturarci assieme. Fine leccata

Mi ero confuso con le regole del forum di LEmon64... lì effettivamente è vietato postare lunghi testi. Direi che uno 'yuk!' alla Pippo ci sta bene... :overkiller:

Comunque stiamo cercando io e Rob di pubblicarlo nella sezione articoli, devo sistemarlo un po'... sai, devo togliere le smiles... devo cambiare l'esordio...

Ciao!

Dimenticavo: grazie per l'interessante...  
-=MarC=ellO=-

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Conversione Basic - Assembly
« Risposta #25 il: 20 Luglio 2004, 15:26:45 »
 Ciao!

L'articolo sull'assembler è stato pubblicato nella sezione "GUIDA".

 
-=MarC=ellO=-