Quelques outils pour le KIM-1

Assembleur 6502 : https://www.masswerk.at/6502/assembler.html

Petit émulateur : https://github.com/EricSchraf/kim1(choisir <code> – Download Zip – Dézippez et lancez index.html)

Vous pouvez également le tester ici : http://schraf.chez-alice.fr/kim1/

Raccourcis clavier de l’émulateur 0-9, A-F : chiffres hexadécimaux Espace : AD · , : DA · Entrée ou + : + · G : GO · S : ST · R : RS · P : PC

Inspiré par celui-ci : https://maksimkorzh.github.io/KIM-1/

Trouver un KIM-1 : https://www.vinted.fr/catalog?search_text=MOS%20KIM-1 | https://www.ebay.fr/sch/i.html?_nkw=kim+uno+clone

Programmes vus dans la vidéo

Fibonnaci

debut:  LDA #$00
        STA $F9        ; a (affiché)
        LDA #$01
        STA $02        ; b
        CLC
suite:  LDA #$40       ; durée d'affichage
        STA $01
        PHP            ; PUSH drapeaux
aff:    JSR $1F1F      ; SCANDS
        DEC $01
        BNE aff        ; Branch if Not Equal
        PLP            ; PULL drapeaux
        BCS debut      ; Branch if C = 1
        LDA $F9
        ADC $02        ; a+b
        LDX $02
        STX $F9        ; a = b
        STA $02        ; b = a+b
        JMP suite


 @0200 A90085F9A901850218A940850108201F1FC601D0F928B0E8
 @0218 A5F96502A60286F985024C09020000000000000000000000
 ;

COMPTEUR

 * = $0200

        LDA #$00    ; A = 0
        STA $F9     ; compteur affiché (INH) = 00
debut:  LDA #$40    ; durée affichage
        STA $01     ; compteur de temporisation
boucle: JSR $1F1F   ; rafraîchit l'afficheur
        DEC $01     ; une passe de moins
        BNE boucle  ; on répète jusqu'à 0
        SED         ; SEt Decimal mode (BCD)
        LDA $F9     ; lit le compteur
        CLC         ; efface retenue avant addition
        ADC #$01    ; +1 en BCD (09 → 10, 99 → 00)
        CLD         ; CLear Decimal mode
        STA $F9     ; range le nouveau compteur
        JMP debut   ; recommence une seconde

 @0200 A90085F9A9408501201F1FC601D0F9F8A5F9186901D885F9
 @0218 4C040200
 ;

CLIGNOTANT 88

 * = $0200

debut:  LDA #$88
        STA $F9          ; INH   : 2 digits de droite
        STA $FA          ; POINTL: 2 digits du milieu
        STA $FB          ; POINTH: 2 digits de gauche
        LDA #$10         ; durée d'allumage
        STA $01
allume: JSR $1F1F        ; SCANDS : affiche 888888
        DEC $01
        BNE allume
        LDA #$00
        STA $1740        ; SAD = Segment Address Data = 0 : segments éteints
        LDY #$20         ; durée d'extinction = 20×FF
ext1:   LDX #$FF
ext2:   DEX
        BNE ext2
        DEY
        BNE ext1
        JMP debut

 @0200 A98885F985FA85FBA9408501201F1FC601D0F9A97F8D4117
 @0218 A2098E4217A9008D4017E8E8E015D0F2A0FFA2FFCAD0FD88
 @0230 D0F84C0002
 ;

DÉTECTION DES TOUCHES

 @0200 A90085F9206A1FC915B00285F9201F1F4C0402
 ;

LANCER D’UN DÉ

 @0200 A900850085F9E600A500C9069004A9008500206A1FC915B0
 @0218 07A50018690185F9201F1F4C0602
 ;

NOMBRE DE 4 CHIFFRES

        LDA #$00       ; A = 0
        STA $FA        ; dizaines/unités = 00
        STA $FB        ; milliers/centaines = 00
debut:  JSR $1F1F      ; SCANDS : rafraîchit l'afficheur
        JSR $1F6A      ; GETKEY
        CMP #$04
        BCS debut      ; touche > 3 ou pas de touche : on ignore
        STA $00        ; mémorise la touche (0 à 3)
        LSR A          ; 0,1 -> 0 ; 2,3 -> 1
        EOR #$01       ; 0,1 -> 1 ; 2,3 -> 0
        TAX            ; X=1 : octet $FB ; X=0 : octet $FA
        LDA $00
        AND #$01       ; 0 = chiffre de gauche de l'octet, 1 = chiffre de droite:
        BNE bas
        SED            ; touches 0 et 2 : +1 sur le chiffre de gauche
        LDA $FA,X
        CLC
        ADC #$10       ; en BCD : 9 + 1 -> 0, sans toucher l'autre chiffre
        CLD
        STA $FA,X
        JMP att

bas:    LDA $FA,X      ; touches 1 et 3
        AND #$0F
        CMP #$09       ; déjà à 9 ?
        BEQ rz
        INC $FA,X      ; non : +1
        JMP att
rz:     LDA $FA,X      ; oui : retour à 0
        AND #$F0
        STA $FA,X
att:    JSR $1F1F      ; attend le relâchement de la touche
        JSR $1F6A      ; (un appui = un seul incrément)
        CMP #$15
        BCC att        ; touche encore enfoncée
        JMP debut


 @0200 A90085FA85FB201F1F206A1FC904B0F685004A4901AAA500
 @0218 2901D00CF8B5FA186910D895FA4C3B02B5FA290FC909F005
 @0230 F6FA4C3B02B5FA29F095FA201F1F206A1FC91590F64C0602
 ;