Autore Topic: Kick Assembler  (Letto 3335 volte)

marcom_to

  • Neo-iscritto
  • *
  • Post: 43
  • Gioco Preferito: Mean Streak
Kick Assembler
« il: 23 Maggio 2008, 00:06:42 »
 Ciao a tutti,
mi sono messo alla ricerca di un cross-assembler comodo da usare e mi sono trovato di fronte a questo: http://www.theweb.dk/KickAssembler/Main.php . Trattasi di Kick assembler. E' stato amore a prima vista. Non si tratta di un normale assemblatore da utilizzare su pc, bensi' un compilatore di codice assembly e pseudo codice. Mi spiego: utilizzando alcune macro facilmente intuibili e scrivendo poche righe di codice in pseudo-assembler interpretate in java, e' possibile fare cose come caricare file nativi da c64, come programmi, audio e immagini, creare routine di autostart, lavorare con vettori senza impazzire piu' di tanto. Ho letto il manuale fornito. Ovviamente potete continuare ad usare il codice assembler nativo se non vi piacciono le macro. Alcuni esempi:

definite una macro per cambiare il colore del bordo

.macro SetBorderColor(color) {
lda #color
sta $d020
}

e la richimate cosi all'interno del vostro programma passando il parametro numero colore:
:SetBorderColor(0)

con la direttiva .print e' possibile dare feedback all'utente di di una variabile, del contenuto di una locazione di memoria per un debug piu' semplice.

caricare in accumulatore funzioni matematiche, es seno, coseno o random di un seme

// Load a with a random number
lda #random()*256

usare array e hashtable! Qui l'esempio di un hashMap. Per chi conosce java il codice si legge da se:

// Define the table
.var ht = Hashtable()
// Enter some values (put(key,value))
.eval ht.put(“ram”, 64)
.eval ht.put(“bits”, 8)
.eval ht.put(1, “Hello”)
.eval ht.put(2, “World”)
.eval ht.put(“directions”, List().add(“Up”,”Down”,”Left”,”Right”))
// Retrieve the values
.print ht.get(1) // Prints Hello

caricare file da filesystem ed autoeseguirli. Esempio di load e autostart di una bitmap koala paint

.const KOALA_TEMPLATE = "C64FILE, Bitmap=$0000, ScreenRam=$1f40, ColorRam=$2328,
BackgroundColor = $2710"
.var picture = LoadBinary("picture.prg", KOALA_TEMPLATE)
.pc = $0801 "Basic Program"
:BasicUpstart($0810)
.pc =$0810 "Program"
lda #$38
sta $d018
lda #$d8
sta $d016
lda #$3b
sta $d011
lda #0
sta $d020
lda #picture.getBackgroundColor()
sta $d021
ldx #0
!loop:
.for (var i=0; i<4; i++) {
lda colorRam+i*$100,x
sta $d800+i*$100,x
}
inx
bne !loopjmp
*
.pc = $0c00 .fill picture.getScreenRamSize(), picture.getScreenRam(i)
.pc = $1c00 colorRam: .fill picture.getColorRamSize(), picture.getColorRam(i)
.pc = $2000 .fill picture.getBitmapSize(), picture.getBitmap(i)

E poi cicli for, loop e quant'altro.
Il manualetto in pdf e' di 40 pagine, ma molto esplicativo. Scaricando il programma troverete all'interno il jar, il manuale ed alcuni esempi. Dovete avere java sul vostro pc (1.5) e potete provare a compilare subito in questo modo da linea di cmd:
java -jar KickAss.jar

Ciao a tutti,

Marco
Another visitor! Stay a while. Staaaaay, FOREVER!!!!

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Kick Assembler
« Risposta #1 il: 23 Maggio 2008, 00:37:32 »
 Non e' propriamente una "news" dato che e' del 2006, ultima release 2007/09, l'ho nomnato qualche giorno fa in un altro thread iniziato da te.
Si, diciamo che le macro in linguaggio ad alto livello possono fare gridare alla meraviglia, ma non e' certo una novita', la maggior parte delle cose che hai descritto e' fattibilissima con dasm:

Codice: [Seleziona]
MAC setborder
    lda #{1}
    sta $d020
ENDM

MAC waitframe
    lda $d012
    bpl *-3
    lda $d012
    bmi *-3
ENDM

MAC setp
    word .eop
    word {1}
    byte $9e
    byte [{2}]d
    byte 0
.eop
    word 0
ENDM

    *=$0801
start
    echo "current PC =", *
    setp 7102,2061
    echo "current PC =", *

M SET 1
REPEAT 20

    setborder M
    waitframe

M SET M+1
REPEND

    rts
eof
    echo "end of file at ", eof, "size = ", eof-start

Dipende molto da come uno e' abituato, io aborro simili pastrocchi quando lavoro in asm, perche' devo andarmi a vedere COME genera il codice quella certa macro, se vedo invece direttamente il codice e' di piu' facile manutenzione.

Se vuoi divertirti cerca il demo nascosto nel jar, senza andare a sbirciare su CSDb. B)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Kick Assembler
« Risposta #2 il: 23 Maggio 2008, 09:37:09 »
 Sposto il thread in Programmazione.

marcom_to, un consiglio, usa i tag "code" per racchiudere il codice.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.