Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.
Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.
Kaz:
wszystko oparte jest na wrazeniachzmienna = usr(adres,parametr1,...,parametrN)
PLA ;"POBIERA DO A ILOŚĆ PARAMETRÓW"
BEQ rts ;"JEŚLI NIE MA PARAMETRÓW WRACA DO BASIC"
ASL ; "MNOŻY LICZBĘ PARAMETRÓW RAZY 2BAJTY BO TYLE JEST DANYCH NA STOSIE"
TSX ; "WSKAZNIK STOSU WKŁADA DO REJESTRU X"
STX$CC ;"ZAPAMIĘTUJE X W $CC NA STRONIE ZEROWEJ"
CLC ; "ZERUJE ZNACZNIK C PRZED DODAWANIEM"
ADC$CC;"DODAJE A DO $CC "
TAX ;"PRZEKAZUJE A DO X "
TXS ;"NOWY WSKAZNIK STOSU JEST USTAWIONY TAK JAKBY BYŁO WYKONANE (ilość parametrów*2) x PLA ->*2 bo parametry są dwubajtowe"
RTS
PLA
BEQ rts
ASL
STA$CC
TSX
STX$CB
CLC
ADC$CB
TAX
TXS
LDX#$00
LDY$CB
LDA$0101,Y ;dół stosu zwiększamy o 1 bajt bo pierwszy bajt mówi ile liczb było przekazanych jako parametry USR i jak wpiszemy prawidłowy dół stosu $100 to niestety nie dostaniemy bajtu LO ostatniego parametru z USR (trzeba by zwiększyć INC$CC jeśli się upierasz przy LDA$0100,Y)
STA$9C40,X
INY
DEX
CPX$cc00
BNE lda$oioo,y
RTS
stała = 10
lda stała
zasemblowało się na:
lda #$0a <- tak bym chciał
stała equ 10
lda stała
asembluje się na:
lda$0a
.var .byte stała = 10
lda stała
asembluje się np:
lda$037f - czyli wskazuje miejsce w pamięci gdzie jest 10=$0a a mi po prostu jest stała niezbędna żeby nie tracić cykli i pamięci.
może to być stała "wirtualna" której nie ma w pamięci a zapisuje się w kodzie programu
mads 1.9.2 build 21 (21 Jan 11)
Source: tst.asm
1
2 = 000A stala = 10
3
4 opt h+
5 org $2000
6
7 FFFF> 2000-2006> A5 0A lda stala
8 2002 A9 0A lda #stala
9
10 2004 4C 04 20 goto jmp goto
Brix:
Z czasem i tak zacznie Cię nudzić ciągłe pisanie lda - sta czy clc - adc ;);tester badlines/ atari ma je tak jak C64 ;)
org $0600
;***************************
;*** ROZWIĄZANIE ZAGADKI ***
;***************************
sei ;-< maskuj przerwania IRQ
lda #0
sta $d40e ;<- wyłącz przerwania NMI <-#0
eor #6 ;<- A=6 Hi-adresu do którego będzie rts
nop ;<- jest potrzebne aby Lo dla rts był właściwy
pha ;<- Hi adresu odkładane na stos
asl ;<- Lo tworzone w locie A=#$0c
pha ;<- Lo na stos czyli mamy HiLo=$060c
rts ;<- skok - o kurczę wygląda to na zapętlenie*
sta$d40a ;<- czekaj na linię - 7 cykli
sty$d01a ;<zmień kolor ramki na Y
iny ; to nie jest najefektywniejszy sposób
iny ; seria INY zwiększenia Y o 8 w każdym kroku
iny ; tax ;<- to jest program alternatywny
iny ; tya ;zamiast tych ośmiu INY
iny ; clc ; clc mozna sobie darować
iny ; adc#8 ; zajmuje 1 bajt mniej
iny ; tay ; a jak wywalimy clc to nawet dwa bajty
iny ; txa
lsr ; z A=#$0c robimy A=#$06
pha ; Hi=#$06 odkładamy na stos
asl ; z A=#$06 robimy A=#$0c
pha ; Lo=#$0c odkładamy na stos
rts ; rts zdejmuje adresy ze stosu i skacze pod $060c
; nic nie byłoby w tym dziwnego gdyby nie fakt że pod adresem $060c jest instrukcja RTS
*$060C rts: to jest haczyk który albo ktoś zna albo nie ;P
nie będę go tłumaczył bo jest trywialny. Dla ułatwienia dodam że procesor wcale nie skacze do $060c.
;Mad AtariXL/XE Syntax
org $08ff
sei
lda#$00
sta$d40e
eor#$9
pha
pha
rts
ldy#$00
vcy cpy$d40b
bne vcy
tu lda$1000,y
sta$d40a
sta$d01a
sta$d018
iny
bne tu
lda#$09
pha
pha
rts
org $1000
dta b($0,$0,$2,$0,$2,$2,$4,$2,$4,$4,$6,$4,$6,$6,$8,$6,$8,$8,$a,8,$a,$a,$c,$a,$c,$c,$e,$c,$e,$e)
dta b($c,$e,$c,$c,$a,$c,$a,$a,$8,$a,$8,$8,$6,$8,$6,$6,$4,$6,$4,$4,$2,$4,$2,$2,$0,$2)
dta b($0,$0,$02,$10,$12,$12,$14,$22,$24,$24,$36,$34,$36,$46,$48,$46,$58,$58,$5a,$68,$6a,$6a,$7c,$7a,$7c,$8c,$8e,$8c,$9e,$9e)
dta b($9c,$ae,$ac,$ac,$ba,$bc,$ba,$ca,$c8,$ca,$d8,$d8,$d6,$e8,$e6,$e6,$f4,$f6,$f4,$f4,$f2,$f4,$f2,$f2,$f0,$f2)
dta b($c0,$c0,$c2,$c0,$c2,$c2,$d4,$d2,$d4,$d4,$e6,$e4,$e6,$e6,$f8,$f6,$f8,$f8,$1a,$18,$1a,$1a,$2c,$2a,$2c,$2c,$3e,$3c,$3e,$3e)
dta b($4c,$4e,$4c,$4c,$5a,$5c,$5a,$5a,$68,$6a,$68,$68,$76,$78,$76,$76,$84,$86,$84,$84,$92,$94,$92,$92,$90,$02)
dta b($10,$10,$12,$10,$12,$12,$24,$22,$24,$24,$26,$24,$36,$36,$38,$36,$38,$38,$1a,$18,$1a,$1a,$fc,$fa,$fc,$fc,$1e,$1c,$1e,$1e)
dta b($1c,$1e,$1c,$1c,$2a,$2c,$2a,$2a,$28,$2a,$38,$38,$36,$48,$46,$56,$54,$56,$54,$54,$52,$54,$52,$52,$50,$52)
dta b($0,$0,$2,$0,$2,$2,$4,$2,$4,$4,$6,$4,$6,$6,$8,$6,$8,$8,$a,8,$a,$a,$c,$a,$c,$c,$e,$c,$e,$e)
dta b($c,$e,$c,$c,$a,$c,$a,$a,$8,$a,$8,$8,$6,$8,$6,$6,$4,$6,$4,$4,$2,$4,$2,$2,$0,$2)
.array katamaran .byte
[0] = 16
[1] = "KATAMARAN"
[10] = 0
.enda
write katamaran
.proc write(.word what) .var
.var what .word
------ tutaj jakis kod ------
rts
.endp
CHARSET_ADDRESS equ $D800;
org CHARSET_ADDRESS
ins '../assets/Nvdi8.fnt'
org $0580
dlist
.byte DL_BLANK8, DL_BLANK8, DL_BLANK8
.byte DL_MODE_40x24T2 + DL_LMS, a(vmem)
.byte DL_JVB, a(dlist)
vmem
.byte " LOADING... "
main
mva .hi(CHARSET_ADDRESS) chbas
mva #28 colpf1s
mva #0 colpf0s
mva #0 colpf2s
mva #0 colpf3s
mva #0 colbaks
mwa #dlist sdlstl
run main
#.hi(CHARSET_ADDRESS)
mva .hi(CHARSET_ADDRESS) chbas
mva >CHARSET_ADDRESS chbas
mva #>CHARSET_ADDRESS chbas