Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Kotlin dla 6502  (Przeczytany 282 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline qus

  • Level 3
  • ***
  • Wiadomości: 198
Kotlin dla 6502
« dnia: 24 Kwiecień 2019, 18:57 »
Ktoś tu pisał, że mam problemy z Atalanem, jeśli dobrze kojarzę. Przyznaję się, miałem z nim tyle problemów, że postanowiłem rzucić to gówno w cholerę i napisać swój własny kompilator (ach, już się wprost nie mogę doczekać, aż sobie w nim otworzę ramkę, to będzie prawdziwy Mt Everest kompilatorstwa!) Póki co jestem w stanie skompilować np. taki programik:

package pl.qus.wolin
/*
import c64.kernal

const val urzadzenie: ubyte = 8

fun setLfs^0xffba(lfn: ubyte^r.a, dev: ubyte^r.x, channel: ubyte^r.y)
fun setNam^0xffbd(len: ubyte^r.a, name: word^r.xy)
*/

var tlo: ubyte^53281
var b: uword //= 0 - inicjalizacja w obrębie pliku powoduje empty stack exception!


fun testFunction(arg1: uword, arg2: uword): uword {
    return arg1+arg2
}


fun testThrow(arg1: uword, arg2: uword) {
    throw 12345
}

fun testCatch() {
    try {
        testThrow(4,2)
    } catch (ex: word) {
        b=0xcafd
    }
}

fun testIf() {
    if(tlo == 2)
        b = 50000
    else if(tlo == 3)
        b = 50001
    else
        tlo++
}

fun testIncrement() {
    tlo++
}

fun main() {
    var pi: float

    //pi = 3.14


    //setLfs(1, urzadzenie, 1)
    //setNam(razyDwa(2),"dupa")
}

Jeśli ktoś jest zainteresowany postępami, zapraszam tu:

http://forum.6502.org/viewtopic.php?f=2&t=5622&p=68650#p68650



Offline qus

  • Level 3
  • ***
  • Wiadomości: 198
Odp: Kotlin dla 6502
« Odpowiedź #1 dnia: 06 Styczeń 2020, 13:48 »
Jako mały update program wywołujący grubego, czerwonego ducha:

package pl.qus.wolin

var screen: ubyte[]^1024

var spritesOn: ubyte^0xd015
var sprite0X: ubyte^0xd000
var sprite0Y: ubyte^0xd001
var spritesFat: ubyte^0xd01d
var spritesTall: ubyte^0xd017
var sprite0Color: ubyte^0xd027

fun main() {
    spritesOn := 1
    spritesFat := 1
    spritesTall := 1
    sprite0X = 100
    sprite0Y = 100
    sprite0Color = 2
}

kompiluje się do tego

; setupHEADER


;**********************************************
;*
;* BASIC header
;*
;* compile with:
;* cl65.exe -o assembler.prg -t c64 -C c64-asm.cfg -g -Ln labels.txt assembler.s
;*
;**********************************************
            .org 2049
            .export LOADADDR = *
Bas10:      .word BasEnd
            .word 10
            .byte 158 ; sys
            .byte " 2064"
            .byte 0
BasEnd:     .word 0
            .word 0
            ;


; setupSPF=251[ubyte],40959[uword]


; prepare function stack
__wolin_spf := 251 ; function stack ptr
__wolin_spf_hi := 251+1 ; function stack ptr

__wolin_spf_top := 40959 ; function stack top
__wolin_spf_top_hi := 40959+1 ; function stack top
    lda #<__wolin_spf_top ; set function stack top
    sta __wolin_spf
    lda #>__wolin_spf_top
    sta __wolin_spf+1

; setupSP=143[ubyte]


; prepare program stack
__wolin_sp_top := 143 ; program stack top
__wolin_sp_top_hi := 143+1 ; program stack top
    ldx #__wolin_sp_top ; set program stack top

; setupHEAP=176[ubyte]


__wolin_this_ptr := 176
__wolin_this_ptr_hi := 176+1


; allocSPF,#0

 

; call__wolin_pl_qus_wolin_main[adr]

    jsr __wolin_pl_qus_wolin_main

; ret

    rts

; function__wolin_pl_qus_wolin_main

__wolin_pl_qus_wolin_main:

; bit53269[ubyte]=#1[ubyte],#1[bool]


    lda 53269
    ora 1
    sta 53269


; bit53277[ubyte]=#1[ubyte],#1[bool]


    lda 53277
    ora 1
    sta 53277


; let53248[ubyte]=#100[ubyte]


    lda #100
    sta 53248

; let53249[ubyte]=#100[ubyte]


    lda #100
    sta 53249

; let53287[ubyte]=#2[ubyte]


    lda #2
    sta 53287

; ret

    rts

; label__wolin_indirect_jsr

__wolin_indirect_jsr:

; goto65535[adr]

    jmp 65535