lundi 20 octobre 2008

Premier code

Après mon fichier d'init STARTUP.ASM, voilà comment commencer doucement en programmation avec un code permettant d'afficher un background, ici en 256*240.
J'ai inclus toutes les data en fichier binaire que j'ai généré grâce au petit utilitaire d'Orion mais celui de TJ Edmister marche également très bien, j'en reparlerais ultérieurement.

; ----
; image01
; ----

.include "STARTUP.ASM"

.bank $01
.org $4000

;--------------
;main code
;--------------

main:
st0 #5 ;disable display
lda #$0C
sta $0002

st0 #9 ;init bat size 32*32
st1 #0
st2 #0

lda #bank(test_gfx)
tam #$03
inc a
tam #$04
inc a
tam #$05
inc a
tam #$06

st0 #0 ;copy pixels
st1 #0
st2 #$10
st0 #2
tia (test_gfx+$6000),$0002,$7000

st0 #0 ;copy bat
st1 #0
st2 #0
st0 #2

lda #bank(test_bat)
tam #$03
inc a
tam #$04
inc a
tam #$05
inc a
tam #$06

tia (test_bat+$6000),$0002,$700

lda #bank(test_pal)
tam #$03
inc a
tam #$04
inc a
tam #$05
inc a
tam #$06

stz $402
stz $403

tia (test_pal+$6000),$404,$200

st0 #5 ;enable display
lda #$CC
sta $0002

.wait_loop ;
jmp .wait_loop

;-----
;data
;-----
.data
.bank $06

test_gfx:
.incbin "pce_tile.bin" ; bank$06 leng $7000

test_pal:
.incbin "pce_pal.bin" ; bank$09-$0FFF

test_bat:
.incbin "pce_bat.bin"


Dans cet exemple, j'insère le code dans la première bank de la Hucard.
On initialise la taille de la BAT grâce au registre $09, puis on map toutes le bank de données.

TIA est une instruction qui permet de transférer des données par block de 8bits.

La palette ira au VCE par $0404, l'index de la palette $0400 étant auto incrémenté à chaque écriture du VCE Data port.

La Bat ira en Vram dans $0000 grace au registre $02 et par le data port $0002 (LSB data video port).

On placera les tiles en VRAM et après la BAT. Pour rappel, un tile est composé de 8*8 pixel, chaque pixel étant codé sur 4 bits (qui correspond à une des 16 couleurs de la palette associé au tile dont il fait partie).

Enfin on active le background à l'aide du registre $05.

Voilà vous avez, avec le fichier startup.asm réussis à afficher un background, sans utiliser les bibliotheques de Magic Kit.

2 commentaires:

ouasse a dit…

cool un gueux qui programme des consoles !

La PC-engine a un processeur ARM? Ca ressemble pas mal à ce que je faisais sur GBA.

Enguerrand a dit…

Non c'est un processeur 8 bits basé sur le 65c02 de MOS.

Le processeur de la GBA est un 32 bits je crois.