Indice del forum

ATARI Italian Forum

Hardware e Software inerente la storica società di Sunnyvale

PortalPortale  blogBlog  AlbumAlbum  Gruppi utentiGruppi utenti  Lista degli utentiLista degli utenti  GBGuestbook  Pannello UtentePannello Utente  RegistratiRegistrati 
 FlashChatFlashChat  FAQFAQ  CercaCerca  Messaggi PrivatiMessaggi Privati  StatisticheStatistiche  LinksLinks  LoginLogin 
 CalendarioCalendario  DownloadsDownloads  Commenti karmaCommenti karma  TopListTopList  Topics recentiTopics recenti  Vota ForumVota Forum

Programmare in assembler in 24 ore - parte 1
Utenti che stanno guardando questo topic:0 Registrati,0 Nascosti e 0 Ospiti
Utenti registrati: Nessuno


 
Nuovo Topic   Rispondi    Indice del forum -> Software
PrecedenteInvia Email a un amico.Utenti che hanno visualizzato questo argomentoSalva questo topic come file txtVersione stampabileMessaggi PrivatiSuccessivo
Autore Messaggio
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Sab Dic 18, 22:32:27    Oggetto:  Programmare in assembler in 24 ore - parte 1
Descrizione:
Rispondi citando

Un saluto a tutti i cybernauti on line appassionati di computer Atari.
Probabilmente vi sembrerà strano programmare in assembler al giorno d'oggi ma vorrei raccontarvi la mia esperienza.
Qualche anno fa girovagando su internet venni a sapere che un polacco di nome Pawel Rosowski chiedeva aiuto per convertire il gioco IK+ per gli atari 8 bit.
Il progetto di Pawel mi pareva intrigante e io mi resi disponibile; lui mi chiese se mi sentivo in grado di mostrare il logo di IK+ in alta risoluzione, ovviamente il lavoro doveva essere fatto in assembler.
Non avevo mai programmato in assembler per gli atari 8 bit; alle superiori avevo studiato l'assembler dello Z80 per cui avevo un'infarinatura di programmazione in assembler ma il processore degli atari è il 6502.
Pensai che se mi mettevo a studiare un libro di assembler 6502 non sarei mai riuscito nell'impresa se non in tempi biblici.
Provai allora un altro approccio che si rivelò vincente.
Sapevo dell'esistenza di un compilatore C per processori 6502 che si chiama cc65.
Questo compilatore, volendo, genera codice assembler; è molto istruttivo vedere come ogni riga del codice in linguaggio C viene convertita in assembler.
Io ho scritto in linguaggio C l'algoritmo di decompressione memoria e di visualizzazione del logo ed il compilatore ha fatto il lavoro per me.
Ovviamente il compilatore fa un po' di “porcherie” che vanno poi sistemate a mano ma usando questo approccio i tempi di sviluppo sono molto veloci.
In pratica un esempio è meglio di 100 libri di assembler e l'esempio lo fornisce il nostro compilatore cc65.
Io ho imparato a programmare in assembler 6502 cercando di capire il codice che generava il compilatore; se avessi iniziato a studiare un libro di programmazione Pawel sarebbe ancora ad aspettare il suo bel logo Wink.
A proposito, se volete vedere il logo che ho fatto andate qui:
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!
e scaricate l'ultima versione di IK+.
Il logo viene mostrato durante il caricamento del programma.
Prossimamente vi posterò i miei sorgenti così potete vedere come si imposta la grafica 8 in assembler e come si scrive sulla memoria video.
Programmare in assembler è difficile ma non impossibile; se ci son riuscito io che non l'avevo mai fatto prima sicuramente ci riuscirete anche voi, basta solo partire con il piede giusto.
Se volete provare anche voi, il divertimento è assicurato; io mi sono divertito di più a programmare in assembler che a giocare al più bel videogioco.
Alla prossima.

Bye
Torna in cima
Profilo Messaggio privato
Adv



MessaggioInviato: Sab Dic 18, 22:32:27    Oggetto: Adv






Torna in cima
ataricomputers

Guru
Guru


Admin

Sesso: Sesso:Maschio

Registrato: 14/01/10 16:15
Messaggi: 406
ataricomputers is offline 

Località: Cagliari





italy
MessaggioInviato: Dom Dic 19, 12:00:26    Oggetto:  
Descrizione:
Rispondi citando

Grazie 1000 QWE per la tua disponibilità, davvero un'ottima iniziativa.
Il gioco IK+ l'avevo già scaricato un paio di settimane fà e provato sul mio 130XE e dove dire che l'impressione che ho avuto è stata ottima.
Quando vuoi cominciare con le basi di programmazione fai pure, l'idea è molto molto intrigante. Smile

Thx

_________________
Atari Italian site
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!
Torna in cima
Profilo Messaggio privato Invia email
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Dom Dic 19, 22:16:18    Oggetto:  
Descrizione:
Rispondi citando

Grazie per l'entusiasmo Maurizio, vediamo se riusciamo a coinvolgere anche qualcun altro.
Vi consiglio intanto di prendere un po' di confidenza con gli strumenti del mestiere.
Ormai non c'è più nessuno che usa un assemblatore che gira sugli atari, oggi si usano assemblatori più evoluti che girano sui pc moderni.
L'assemblatore che adesso va per la maggiore è mads:
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!

I ragazzi di Yoomp hanno usato questo assemblatore per realizzare il gioco.
Purtroppo ora vedo che adesso il manuale per questo assemblatore è solo in polacco.
Pawel Rosowski usa invece un altro assemblatore + linker fatto da lui.
Se non riuscite ad usare mads potete usare l'assemblatore incluso in cc65, solo come ultima spiaggia vi consiglio di usare l'assemblatore che uso io perchè il linker fatto da Pawel Rosowski è veramente complicato da usare.
Per programmare in assembler è indispensabile conoscere l'hardware del computer sul quale si vuole lavorare.
Potete trovare tutti i manuali che vi servono qui:
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!

La bibbia dei computer Atari 8 bit si chiama “De Re Atari” ma anche i libri che spiegano la mappa della memoria sono molto istruttivi.
Io ho ritrovato i sorgenti del programma che ho fatto ma vedo che su questo forum ci sono un po' di problemi nel fare upload/download.
Chiedo al buon Maurizio come devo procedere per condividere i sorgenti in assembler.
Nel prossimo post vi spiegherò come Pawel Rosowski voleva il logo di IK+ e le specifiche di progetto poi appena i sorgenti saranno accessibili a tutti faremo un full immersion nel codice assembler.
Torna in cima
Profilo Messaggio privato
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Dom Dic 19, 23:44:09    Oggetto:  
Descrizione:
Rispondi citando

Un po' di storia...
Pawel Rosowski aveva bisogno di visualizzare nel suo gioco il logo di IK+ in alta risoluzione come nella versione degli Atari ST o Amiga.
Pawel mi aveva passato una bitmap di 160x105; dato che il gioco occupa molta memoria Pawel aveva bisogno di comprimere la grafica del logo.
Decidemmo di usare l'algoritmo di compressione MNP5.
L'MNP5 è un semplice algoritmo usato dai modem che comprime sequenze di byte ripetuti.
L'algoritmo funziona cosi: se ci sono più di 2 byte che si ripetono si scrivono i primi 2 byte mentre il terzo byte indica quante volte si devono ripetere i byte, es:
0000000000 si comprime in
008
La bitmap di 160x105 occupa in memoria 2100 byte, con l'algoritmo MNP5 sono riuscito a comprimere l'immagine fino a circa 1700 byte.
Per realizzare il programmino in assembler ho dovuto affrontare diversi problemi:
1)impostare la grafica a 320x192 (grafica 8 del basic)
2)comprimere e decomprimere il logo
3)centrare il logo nello schermo
In basic tutto ciò è semplice mentre in assembler non è proprio banale.
Ho fatto 2 versioni del programma; nella prima versione ho usato l'indirizzamento indiretto per scrivere nella memoria video, nella seconda versione ho sostituito l'indirizzamento indiretto con l'indirizzamento assoluto.
L'indirizzamento indiretto l'ho rimosso per il semplice motivo che è molto inefficiente; solo per scrivere un byte in memoria il 6502 ci impiega una quarantina di cicli di clock.
Per simulare l'indirizzamento indiretto usando l'indirizzamento assoluto occorre usare una tecnica molto avanzata che vi spiegherò più avanti...
Torna in cima
Profilo Messaggio privato
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Mar Dic 21, 22:11:57    Oggetto:  
Descrizione:
Rispondi citando

Non riuscendo a fare l'upload dei sorgenti ve li mostro sul forum anche se non è proprio adatto perchè non vengono visualizzate le tabulazioni:



;show the initial logo in hi-res
;subroutine calls:
; incPSource
; incPDestination
;input:
; dListGr8
; compressedLogo
; lastByteOfLogo
;output:
; scrFirstHalfAdr

include "system.inc"
include "ikp.inc"

org loadBlockAdr-2
dw loadBlockAdr ;start address

org loadBlockAdr


pSource = $0080
pDestination = $0082
scrFirstHalfAdr = $8150
scrSecondHalfAdr = $9000

lda #$00 ;disable antic
sta dmactls
lda #lo(dListGr8) ;change pointer to dlist (enable gr.8+16)
sta dlptrs
lda #hi(dListGr8)
sta dlptrs+1
lda #$22 ;enable antic
sta dmactls ;now screen should be 320x192
lda #$00
sta colpf2s
lda #$3F
sta colpf1s

lda #lo(compressedLogo)
sta pSource
lda #hi(compressedLogo)
sta pSource+1

lda #lo(scrFirstHalfAdr)
sta pDestination
lda #hi(scrFirstHalfAdr)
sta pDestination+1


ldy #$06
lda #$9A;
clc
adc pDestination ;pDestination mast center the logo...
sta pDestination
bcc addHi
iny
addHi:
tya
adc pDestination+1
sta pDestination+1


; now pDestination point to row 43 and col 80
;
;draw first byte
ldy #$00
lda (pSource), Y
sta (pDestination), y
sta lastByte

mainLoop:
lda pSource+1
cmp #hi(lastByteOfLogo)
bne continueDrawing
lda pSource
cmp #lo(lastByteOfLogo)
beq endJob
continueDrawing:
jsr incPSource
jsr incPDestination
ldy #$00
lda (pSource), y
sta (pDestination), y
sta currentByte
cmp lastByte
bne updateLast
jsr incPSource
lda (pSource), y
sta repetitions
ldx #$00
repeatByte:
cpx repetitions
beq mainLoop
jsr incPDestination
inx
lda lastByte
ldy #$00
sta (pDestination), y
jmp repeatByte
updateLast:
lda currentByte
sta lastByte
jmp mainLoop
incPSource:
inc pSource
bne returnPsource
inc pSource+1
returnPsource:
rts
incPDestination:
lda currentColOfLogo
cmp #$14
bne simpleIncrement
lda #$00
sta currentColOfLogo
lda pDestination
clc
adc #$14
sta pDestination
bcc simpleIncrement
inc pDestination+1
simpleIncrement:
inc currentColOfLogo
inc pDestination
bne returnPsource
inc pDestination+1
returnPDestination:
rts
;
endJob:

forEver:
jmp forEver

rts

dListGr8:
db $70, $70, $70, $4F, lo(scrFirstHalfAdr), hi(scrFirstHalfAdr) ;; $50, $81
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $4F, lo(scrSecondHalfAdr), hi(scrSecondHalfAdr) ;; $00, $90
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $41, lo(dListGr8), hi(dListGr8) ;; $36, $80

currentColOfLogo:
db $01
currentByte:
db $00
lastByte:
db $00
repetitions:
db $00

compressedLogo:
db $00, $00, $07, $F0, $00, $00, $10, $01, $F8, $00, $00, $0B, $F0, $00, $00, $02
db $03, $18, $00, $00, $0A, $01, $9C, $00, $00, $02, $02, $FC, $00, $00, $0A, $01
db $7F, $00, $00, $02, $03, $FC, $00, $00, $0A, $01, $FF, $C0, $00, $00, $01, $03
db $FE, $00, $00, $0A, $01, $FF, $F0, $00, $00, $01, $03, $FE, $00, $00, $0A, $01
db $FF, $FC, $00, $00, $01, $03, $FE, $00, $00, $0A, $01, $FF, $FF, $00, $00, $00
db $01, $01, $FF, $00, $00, $0A, $01, $FF, $FF, $00, $C0, $00, $00, $00, $01, $FF
db $00, $00, $0A, $01, $FF, $FF, $00, $F0, $00, $00, $00, $01, $FF, $00, $00, $0A
db $01, $FF, $FF, $00, $FC, $00, $00, $00, $01, $FF, $00, $00, $02, $1C, $00, $00
db $05, $01, $FF, $FF, $01, $00, $00, $01, $FF, $80, $00, $00, $01, $3F, $00, $00
db $05, $01, $FF, $FF, $01, $80, $00, $00, $00, $FF, $80, $00, $00, $01, $63, $C0
db $00, $00, $05, $FF, $FF, $01, $80, $00, $00, $00, $FF, $80, $00, $00, $01, $DF
db $F0, $00, $00, $05, $FF, $FF, $01, $80, $00, $00, $00, $FF, $80, $00, $00, $00
db $01, $FF, $FC, $00, $00, $05, $FF, $FF, $01, $00, $00, $01, $7F, $80, $00, $00
db $00, $03, $FF, $FF, $00, $00, $00, $05, $FF, $FF, $00, $FC, $00, $00, $01, $7F
db $C0, $00, $00, $00, $07, $FF, $FF, $00, $C0, $00, $00, $04, $FF, $FF, $00, $F0
db $00, $00, $01, $7F, $C0, $00, $00, $00, $0F, $FF, $FF, $00, $F0, $00, $00, $04
db $FF, $FF, $00, $C0, $00, $00, $01, $7F, $C0, $00, $00, $00, $1F, $FF, $FF, $00
db $FC, $00, $00, $04, $FF, $FF, $00, $00, $00, $02, $7F, $C0, $00, $00, $00, $3F
db $FF, $FF, $00, $FE, $00, $00, $04, $FF, $FE, $00, $00, $02, $3F, $C0, $00, $00
db $00, $7F, $FF, $FF, $00, $FE, $00, $00, $04, $FF, $FE, $00, $00, $02, $3F, $E0
db $00, $00, $00, $FF, $FF, $01, $FE, $00, $00, $0A, $3F, $E0, $00, $01, $FF, $FF
db $01, $F8, $00, $00, $01, $7F, $FF, $FF, $04, $FA, $00, $3F, $E0, $00, $03, $FF
db $FF, $01, $F0, $00, $00, $01, $C7, $FF, $FF, $05, $00, $3F, $E0, $00, $07, $FF
db $FF, $01, $C0, $00, $00, $01, $BF, $FF, $FF, $04, $FE, $00, $3F, $E0, $00, $0F
db $FF, $FF, $01, $80, $00, $00, $01, $FF, $FF, $05, $D8, $00, $3F, $E0, $00, $1F
db $FF, $FF, $01, $00, $00, $02, $7F, $FF, $FF, $03, $FE, $00, $00, $00, $3F, $F0
db $00, $3F, $FF, $FF, $00, $FC, $00, $00, $02, $3F, $FF, $FF, $03, $80, $00, $00
db $00, $3F, $F0, $00, $7F, $FF, $FF, $00, $F8, $00, $00, $02, $1F, $FF, $FF, $02
db $E0, $00, $00, $01, $3F, $F0, $00, $FF, $FF, $01, $F0, $00, $00, $02, $0F, $FF
db $FF, $01, $80, $00, $00, $02, $3F, $F0, $01, $FF, $FF, $01, $C0, $00, $00, $02
db $07, $FF, $FF, $00, $F0, $7E, $00, $00, $02, $1F, $F0, $07, $FF, $FF, $01, $80
db $00, $00, $02, $03, $FF, $FF, $00, $8F, $FE, $00, $00, $02, $1F, $F0, $0F, $FF
db $FF, $00, $FE, $00, $00, $03, $01, $FF, $F0, $7F, $FE, $00, $00, $02, $1F, $F0
db $1F, $FF, $FF, $00, $F8, $00, $00, $04, $FF, $C0, $7F, $FE, $00, $00, $02, $1F
db $F8, $7F, $FF, $FF, $00, $F0, $00, $08, $00, $00, $02, $7F, $80, $7F, $FE, $00
db $00, $02, $1F, $F8, $FF, $FF, $01, $C0, $00, $1E, $00, $00, $02, $3F, $00, $7F
db $FE, $00, $00, $02, $1F, $FB, $FF, $FF, $01, $00, $00, $00, $3F, $80, $00, $00
db $01, $1C, $00, $3F, $FC, $00, $00, $02, $1F, $F7, $FF, $FF, $00, $FC, $00, $00
db $00, $33, $E0, $00, $00, $03, $3F, $FC, $00, $00, $02, $1F, $CF, $FF, $FF, $00
db $F0, $00, $00, $00, $2F, $F8, $00, $00, $03, $3F, $FC, $00, $00, $02, $1F, $3F
db $FF, $FF, $00, $C0, $00, $00, $00, $3F, $FE, $00, $00, $03, $3F, $FC, $00, $00
db $02, $1C, $FF, $FF, $01, $00, $00, $01, $3F, $FF, $80, $00, $00, $02, $3F, $FC
db $00, $00, $02, $13, $FF, $FF, $00, $F8, $00, $00, $01, $1F, $FF, $E0, $00, $00
db $02, $3F, $FC, $00, $00, $02, $0F, $FF, $FF, $00, $E0, $00, $00, $01, $1F, $FF
db $F8, $00, $00, $02, $3F, $FC, $00, $00, $02, $3F, $FF, $FF, $00, $00, $00, $02
db $1F, $FF, $FC, $00, $00, $02, $3F, $FC, $00, $00, $02, $FF, $FF, $00, $FC, $00
db $00, $02, $1F, $FF, $F8, $00, $00, $02, $3F, $FC, $00, $00, $01, $03, $FF, $FF
db $00, $E0, $00, $00, $02, $1F, $FF, $F0, $00, $00, $02, $3F, $FC, $00, $00, $01
db $0F, $FF, $FF, $00, $00, $00, $03, $0F, $FF, $C0, $00, $00, $02, $3F, $FC, $00
db $00, $01, $3F, $FF, $F8, $00, $00, $03, $0F, $FF, $00, $00, $03, $3F, $FC, $00
db $00, $01, $7F, $FF, $E4, $00, $00, $03, $0F, $FE, $00, $00, $03, $3F, $FC, $00
db $00, $01, $7F, $FF, $1C, $00, $00, $03, $0F, $FE, $00, $00, $03, $3F, $FC, $00
db $00, $01, $3F, $F0, $FC, $00, $00, $0A, $3F, $FC, $00, $00, $02, $0F, $FC, $00
db $00, $02, $FF, $FF, $02, $F0, $00, $00, $01, $3F, $FC, $00, $00, $01, $0C, $1F
db $FC, $00, $00, $01, $01, $1F, $FF, $FF, $01, $F8, $00, $00, $01, $1F, $F8, $00
db $00, $01, $1E, $1F, $FC, $00, $00, $01, $02, $FF, $FF, $02, $F0, $00, $00, $01
db $1F, $F8, $00, $00, $01, $1F, $1F, $00, $FE, $00, $00, $01, $03, $FF, $FF, $01
db $FE, $00, $00, $02, $1F, $F8, $00, $00, $01, $0F, $9F, $FE, $00, $00, $01, $03
db $FF, $FF, $01, $C0, $00, $00, $02, $1F, $F8, $00, $00, $01, $07, $CF, $FE, $00
db $00, $01, $01, $FF, $FF, $00, $C0, $00, $00, $03, $1F, $F8, $00, $00, $01, $07
db $F7, $FE, $00, $00, $02, $FF, $F8, $3C, $00, $00, $03, $1F, $F8, $00, $00, $01
db $03, $FB, $FE, $00, $00, $02, $7F, $E7, $FC, $00, $00, $03, $1F, $F8, $00, $00
db $01, $01, $FD, $FE, $00, $00, $02, $3F, $C7, $FC, $00, $00, $03, $1F, $F8, $00
db $00, $01, $01, $FE, $FE, $00, $00, $00, $02, $1F, $07, $FC, $00, $00, $03, $1F
db $F8, $00, $00, $02, $FF, $3E, $00, $00, $02, $0E, $07, $FC, $00, $00, $03, $1F
db $F8, $00, $00, $02, $7F, $CE, $00, $00, $02, $04, $03, $F8, $00, $00, $03, $1F
db $F8, $00, $00, $02, $3F, $F6, $00, $00, $03, $03, $F8, $00, $00, $03, $1F, $F8
db $00, $00, $02, $1F, $F8, $00, $00, $03, $03, $F8, $00, $00, $03, $1F, $F8, $00
db $00, $02, $1F, $FE, $00, $00, $03, $03, $F8, $00, $00, $03, $1F, $F8, $00, $00
db $02, $2F, $FF, $80, $00, $00, $02, $03, $F8, $00, $00, $03, $1F, $F8, $00, $00
db $02, $37, $FF, $E0, $00, $00, $02, $03, $F8, $00, $00, $03, $0F, $F0, $00, $00
db $02, $37, $FF, $F0, $00, $00, $02, $03, $F8, $00, $00, $03, $0F, $F0, $00, $00
db $02, $3B, $FF, $FC, $00, $00, $02, $03, $F8, $00, $00, $03, $0F, $F0, $00, $00
db $02, $7D, $FF, $FF, $00, $00, $00, $02, $01, $F0, $00, $00, $03, $0F, $F0, $00
db $00, $02, $7E, $FF, $FF, $00, $E0, $00, $00, $01, $01, $F0, $00, $00, $03, $0F
db $F0, $00, $00, $02, $7F, $7F, $00, $FF, $F8, $00, $00, $01, $01, $F0, $00, $00
db $03, $0F, $F0, $00, $00, $02, $7F, $BF, $FF, $FE, $00, $00, $01, $01, $F0, $00
db $00, $03, $0F, $F0, $00, $00, $02, $7F, $DF, $FF, $FF, $00, $80, $00, $00, $00
db $01, $F0, $00, $00, $09, $FF, $EF, $FF, $FF, $00, $F0, $00, $00, $01, $E0, $00
db $00, $00, $7F, $FF, $FF, $04, $FE, $00, $FF, $F7, $FF, $FF, $00, $FC, $00, $00
db $01, $40, $00, $00, $00, $C7, $FF, $FF, $05, $00, $FF, $FB, $FF, $FF, $01, $80
db $00, $00, $03, $BF, $FF, $FF, $04, $FE, $00, $FF, $FD, $FF, $FF, $01, $E0, $00
db $00, $03, $FF, $FF, $05, $F8, $00, $FF, $FE, $7F, $FF, $FF, $00, $FC, $00, $00
db $03, $7F, $FF, $FF, $03, $FE, $00, $00, $00, $FF, $FE, $3F, $FF, $FF, $01, $80
db $00, $00, $02, $3F, $FF, $FF, $03, $80, $00, $01, $FF, $FE, $1F, $FF, $FF, $01
db $F0, $00, $00, $02, $1F, $FF, $FF, $02, $E0, $00, $00, $00, $01, $FF, $FE, $0F
db $FF, $FF, $01, $FE, $00, $00, $02, $0F, $FF, $FF, $01, $80, $00, $00, $01, $01
db $FF, $FF, $00, $03, $FF, $FF, $02, $80, $00, $00, $01, $07, $FF, $FF, $00, $F0
db $60, $00, $00, $01, $01, $FF, $FF, $00, $01, $FF, $FF, $02, $C0, $00, $00, $01
db $03, $FF, $FF, $00, $87, $E0, $00, $00, $01, $01, $FF, $FF, $00, $00, $FF, $FF
db $02, $E0, $00, $00, $01, $01, $FF, $F0, $07, $E0, $00, $00, $01, $01, $FF, $FF
db $00, $00, $7F, $FF, $FF, $01, $E0, $00, $00, $02, $FF, $C0, $07, $E0, $00, $00
db $01, $03, $FF, $FF, $00, $00, $1F, $FF, $FF, $01, $C0, $00, $00, $02, $7F, $80
db $07, $E0, $00, $00, $01, $03, $FF, $FF, $00, $00, $0F, $FF, $FF, $01, $80, $00
db $00, $02, $3F, $00, $07, $E0, $00, $00, $01, $03, $FF, $FF, $00, $00, $07, $FF
db $FF, $01, $00, $00, $03, $1C, $00, $07, $E0, $00, $00, $01, $03, $FF, $FF, $00
db $00, $01, $FF, $FF, $00, $FE, $00, $00, $05, $07, $E0, $00, $00, $01, $03, $FF
db $FF, $00, $00, $00, $00, $FF, $FF, $00, $FC, $00, $00, $05, $07, $E0, $00, $00
db $01, $03, $FF, $FE, $00, $00, $00, $3F, $FF, $F8, $00, $00, $05, $07, $E0, $00
db $00, $01, $03, $FF, $FE, $00, $00, $00, $0F, $FF, $F0, $00, $00, $05, $07, $E0
db $00, $00, $01, $03, $FF, $FE, $00, $00, $00, $03, $FF, $E0, $00, $00, $05, $03
db $C0, $00, $00, $01, $03, $FF, $FE, $00, $00, $01, $FF, $C0, $00, $00, $05, $03
db $C0, $00, $00, $01, $03, $FF, $FE, $00, $00, $01, $3F, $80, $00, $00, $05, $03
db $C0, $00, $00, $01, $03, $FF, $FC, $00, $00, $01, $0F, $00, $00, $06, $01, $80
db $00, $00, $01, $01, $FF, $FC, $00, $00, $01, $02, $00, $00, $0B, $01, $FF, $FC
db $00, $00, $10, $FF, $F8, $00, $00, $10, $7F, $F0, $00, $00, $10, $3F, $E0, $00
db $00, $10, $0F, $80, $00, $00
lastByteOfLogo:
db $07

endOfCode:
Torna in cima
Profilo Messaggio privato
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Mar Dic 21, 22:55:14    Oggetto:  
Descrizione:
Rispondi citando

Nel precedente listato si nota che il programma parte impostando il nuovo Display List per abilitare la grafica a 320x192 (grafica 8+16) .
Per chi non lo sapesse il Displey List è un programma speciale che viene eseguito dal chip Antic; le istruzioni del display list non hanno niente a che fare col 6502.
Questa è una caratteristica unica degli Atari 8 bit, gli altri computer non hanno il concetto del display list.
Il resto del programma non fa altro che leggere il logo compresso e copiare i dati nella memoria video.
pSoure e pDestination sono i puntatori di input ed output.
Se non avete già il mal di testa e avete delle domande sono a vostra disposizione.
Torna in cima
Profilo Messaggio privato
ataricomputers

Guru
Guru


Admin

Sesso: Sesso:Maschio

Registrato: 14/01/10 16:15
Messaggi: 406
ataricomputers is offline 

Località: Cagliari





italy
MessaggioInviato: Ven Dic 24, 12:52:50    Oggetto:  
Descrizione:
Rispondi citando

Grazie QWE per questa prima guida alla programmazione in assembler.
Se devo fare una piccola puntualizzazione, mi sarebbe piaciuto partire dalle fondamenta, ad esempio cosa sono le sigle che si usano in assembler LDA, JMP, ecc, magari seguiti da piccoli esempi di codice (startabile direttamente sul computer atari) che ne dimostrano il funzionamento.
Cosa sono i puntatori di input e output (pSource e pDestination)?
Puoi fare un parallelismo con i comandi Basic?

Ancora grazie per questo tuo contributo
Maurizio

PS: Per fare gli upload prova a comprimere il file/s in formato zip. La compressione non è necessaria se i files sono immagini gif o jpg. Purtroppo non ho molto tempo per configurare il forum...quindi abbiate un pò di pazienza. Smile

_________________
Atari Italian site
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!
Torna in cima
Profilo Messaggio privato Invia email
Qwe

Apprendista
Apprendista


Iscritti



Registrato: 15/12/10 21:59
Messaggi: 89
Qwe is offline 

Località: Bologna





italy
MessaggioInviato: Lun Gen 03, 18:09:48    Oggetto:  
Descrizione:
Rispondi citando

Ciao a tutti.
Scusate ma non ho proprio avuto tempo per entrare nei dettagli.

Il 6502 è un processore con un numero molto limitato di registri che sono:
Il Program Counter
Lo Stack Pointer (puntatore di catasta)
L'Accumulator
Index Register X
Index Register Y
Processor Status

Il Program Counter tiene traccia della prossima istruzione da eseguire
Lo stack è una particolare area di memoria, viene usata per salvare i valori dei registri o per passare parametri alle subroutine; lo Stack Pointer punta all'ultimo elemento inserito nello stack.
L'Accumulatore è il registro più importante, è l'unico registro su cui vengono eseguire operazioni logico/matematiche
I registri X e Y di solito vengono usati per contenere indirizzi di memoria o valori temporanei
Il Processor Status è un registro speciale che cambia il valore dei suoi bit in funzione del risultato contenuto nell'Accumulatore; serve per fare i confronti.

I registri A, X, Y possono essere caricati con valori assoluti o con variabili della memoria.
I bit dei registri possono scorrere a destra o a sinistra.

I programmi in assembler non fanno altro che leggere e scrivere valori sulla memoria.
LDA significa carica l'Accumulatore (Load Accumulator)
STA significa memorizza l'accumulatore (Store Accumulator)
La stessa cosa vale per i registri indice
LDX e LDY caricano i registri indice
STX e STY memorizzano i registri indice

Per chi vuole approfondire l'argomento c'è questo libro in italiano:
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!
Torna in cima
Profilo Messaggio privato
ataricomputers

Guru
Guru


Admin

Sesso: Sesso:Maschio

Registrato: 14/01/10 16:15
Messaggi: 406
ataricomputers is offline 

Località: Cagliari





italy
MessaggioInviato: Lun Gen 03, 19:46:18    Oggetto:  
Descrizione:
Rispondi citando

Grazie qwe per spiegazione e il link...
_________________
Atari Italian site
Solo gli utenti registrati possono vedere i link!
Registrati o Entra nel forum!
Torna in cima
Profilo Messaggio privato Invia email
Mostra prima i messaggi di:   
Nuovo Topic   Rispondi    Indice del forum -> Software Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi Topic in questo forum
Non puoi rispondere ai Topic in questo forum
Non puoi modificare i tuoi messaggi in questo forum
Non puoi cancellare i tuoi messaggi in questo forum
Non puoi votare nei sondaggi in questo forum
Non puoi allegare files in questo forum
Non puoi downloadare files da questo forum





ATARI Italian Forum topic RSS feed 
Powered by MasterTopForum.com with phpBB © 2003 - 2008