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
;