1

Temat: Wspólny kod dla 6502, 65C02, 65816

Kto ma doświadcznie z kodem, który można zasemblować zarówno na gołe 6502, np.

 LDA (ptr,X) ; X=0

a przy asemblacji na 65C02 korzysta z jego instrukcji i trybów adresowania, np.

 LDA (ptr)

Drugi przykład:

 STX foo ; X=0
 STZ foo

Chodzi mi o to, żeby nie pisać za każdym razem asemblerowego ifa.

Czy znacie asemblery, które mają pseudoinstrukcje lub specjalną składnię w tym celu?
Ewentualnie zestawy makr - jakie sami używacie lub gdzieś widzieliście.

https://www.youtube.com/watch?v=jofNR_WkoCE

2

Odp: Wspólny kod dla 6502, 65C02, 65816

ja widziałem jak dotąd IF-y, np. kod cc65

umul8x16r24:
umul8x16r16:
        sta     ptr3
        stx     ptr3+1

umul8x16r24m:
umul8x16r16m:
.if (.cpu .bitand ::CPU_ISET_65SC02)
        stz     ptr1+1
        stz     sreg
.else
        ldx     #0
        stx     ptr1+1
        stx     sreg
.endif
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

3

Odp: Wspólny kod dla 6502, 65C02, 65816

Też używam ifów. W Elsie niektóre pseudorozkazy się tak zachowują, np. PHR asembluje się do PHA/TXA/PHA/TYA/PHA przy wybranym 6502, a do PHA/PHX/PHY przy 65C02/816 itp., ale całościowego systemu jako takiego nie ma. To zresztą musiałoby czasami obejmować większe sekwencje kodu, np. przy lda (ptr,x) trzeba też uwzględniać stan rejestru X - na 6502 trzeba go załadować, ale to nie znaczy, że na 65C02 załadowany stan będzie później zbędny i tego ldx można się ot tak pozbyć.

KMK
? HEX$(6670358)

4

Odp: Wspólny kod dla 6502, 65C02, 65816

Dzięki! Zrobiłem tak: https://github.com/pfusik/upkr6502/comm … a7fbe69307

https://www.youtube.com/watch?v=jofNR_WkoCE

5

Odp: Wspólny kod dla 6502, 65C02, 65816

?65c02 equ 1
:?65c02    sta    (?dest)
:!?65c02    sta    (?dest,x)

Sprytne, nie wpadłbym na to.

6

Odp: Wspólny kod dla 6502, 65C02, 65816

warto swoją drogą sprawdzić jak robi to SDCC (od niedawna wspiera 6502 i 65C02) https://sdcc.sourceforge.net/

tebe napisał/a:

ja widziałem jak dotąd IF-y, np. kod cc65

umul8x16r24:
umul8x16r16:
        sta     ptr3
        stx     ptr3+1

umul8x16r24m:
umul8x16r16m:
.if (.cpu .bitand ::CPU_ISET_65SC02)
        stz     ptr1+1
        stz     sreg
.else
        ldx     #0
        stx     ptr1+1
        stx     sreg
.endif
Atari Falcon 030+Centram14MB,CT63+128 MB,CTPCI,SuperVidel,Super Nova+ATI Mach64,Eclipse+ATI Rage IIC PCI,NetUSB,Steinberg SPDIF+Time-Lock,C-Lab Notator

7

Odp: Wspólny kod dla 6502, 65C02, 65816

Kompilator C generuje kod na taki procesor, jaki mu się wskaże.

Ja pytałem, jak zwięźle pisać wspólny kod w asemblerze na różne procesory.

https://www.youtube.com/watch?v=jofNR_WkoCE