64 Clock – Commodore 64 – Basic V2

Rivista: Compute! – Numero: 43 – Anno 1983 – Trascrizione: Francesco Fiorentini

Nell’attesa di presentarvi un ben piú corposo listato, ho deciso di regalarvi questo veloce listato Basic per il Commodore 64.

Questo programmino, utilizzando una routine in Assembly, stampa un comodo orologio per il nostro amato C64. Per rendere completo il regalo, troverete, dopo il listato Basic del programma, la routine Assembly decodificata tramite l’interpretazione delle righe DATA presenti nel programma.

Il listato originale di 64 Clock e’ stato pubblicato sulla rivista Compute! numero 43 di Dicembre 1983, edita da COMPUTE! Publications Inc. ABC.

Titolo: 64 Clock
Piattaforma: Commodore 64
Linguaggio: Basic V2
Versione originale: Paul F. Schatz
Pubblicazione: Compute! – numero 43
Anno: 1983
TrascrizioneFrancesco Fiorentini
Anno: 2021
Download: C64 Clock
Note: Il codice é stato leggermente modificato dall’originale.

Istruzioni
Per impostare l’orologio – run 200
Per cambiare il colore – poke 49263,colore
Per cambiare la posizione – poke 49207,colonna
–> 0-sinistra, 14-metà, 28-destra
Per rimuovere il display – sys 49152
Per attivare il display – sys 49155

Qui di seguito trovate il codice da copiare sul vostro Commodore 64.

Il codice é stato ottimizzato per essere copiato su CBM prg Studio. Gli Screen Codes presenti nel listato originale, sono stati manualmente sostituiti da quelli standard utilizzati da CBM prg Studio.

Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘&gt’ e ‘&lt’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.

Listato:  64 Clock – Commodore 64 – Basic V2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
5 rem compute! issue 43 - december 1983
6 rem RetroLiPS project
10 a=0:fori=49152to49296:readj:pokei,j:a=a+j:nexti
20 if a<>16834 then print "error in data statements" : end
25 sys 49155
30 print "{clear}{down}{down}{reverse on} clock for c64 {reverse off}"
40 print : print "to set the clock - run 200"
50 print "to change the color - poke 49263,color"
52 print "to change position - poke 49207,column"
56 print "   0-left, 14-mid, 28-right"
60 print "to remove display - sys 49152"
70 print "to activate display - sys 49155"
90 end
100 data 76,30,192,120,173,20,3,141,28,192,169,45,141,20,3,173,21
110 data 3,141,29,192,169,192,141,21,3,88,96,49,234,120,173,28,192
120 data 141,20,3,173,29,192,141,21,3,88,96,173,24,208,41,240,74
130 data 74,133,254,169,0,133,253,160,0,173,11,220,72,41,127,162,186
140 data 32,120,192,173,10,220,32,120,192,173,9,220,162,174,32,120,192
150 data 173,8,220,32,137,192,104,16,3,169,144,44,169,129,32,141,192
160 data 169,141,145,253,169,216,133,254,169,1,145,253,136,16,251,108,28
170 data 192,72,32,133,192,104,32,137,192,138,32,141,192,96,74,74,74
180 data 74,41,15,9,176,145,253,200,96
200 rem clock setting routine
210 print "{clear}{down}{down}{reverse on} set the clock " : print
220 poke 56335, peek(56335) and 127 : rem set time of day clock
230 input "am or pm"; a$
240 a=128 : if left$(a$, 1)="a" then a=0
250 input "hour"; a$ : if len(a$)>2 then print "error" : goto 250
260 gosub 500 : if n>18 then print "error" : goto 250
270 poke 56331,a+n : rem set hours
280 input "minutes"; a$ : if len(a$)>2 then print "error" : goto 280
290 gosub 500 : if n>89 then print "error" : goto 280
300 poke 56330,n : rem set minutes
310 input "seconds"; a$ : if len(a$)>2 then print "error" : goto 310
320 gosub 500 : if n>89 then print "error" : goto 310
330 poke 56329,n : rem set seconds
340 print "when you are ready to start the clock,"
350 print "press any key."
360 get a$:if a$=""then 360
370 poke 56328,0 : rem start clock
380 goto 30
500 if len(a$)=1 then t=0 : goto 520
510 t=val(left$(a$,1))
520 u=val(right$(a$,1))
530 n=16*t+u : return

Per completezza, forniamo la routine Assembly presente nel listato nelle righe tra 100 e 180.
Il listato Assembly é stato decodificato tramite il programma Decomp v. 1.1 creato da Marco Pistorio.

Listato:  64 Clock – Commodore 64 – Assembly


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
.pc=$C000

    jmp lbc01e
    sei
    lda $0314   //irq
    sta $c01c
    lda #$2d
    sta $0314   //irq
    lda $0315   //irq
    sta $c01d
    lda #$c0
    sta $0315   //irq
    cli
    rts
    and ($ea),y
lbc01e: sei
    lda $c01c
    sta $0314   //irq
    lda $c01d
    sta $0315   //irq
    cli
    rts
    lda $d018   //vic memory control register
    and #$f0
    lsr
    lsr
    sta $fe
    lda #$00
    sta $fd
    ldy #$00
    lda $dc0b   //cia1, time-of-day clock, hours + am/pm fla
    pha
    and #$7f
    ldx #$ba
    jsr lbc078
    lda $dc0a   //cia1, time-of-day clock, minutes
    jsr lbc078
    lda $dc09   //cia1, time-of-day clock, seconds
    ldx #$ae
    jsr lbc078
    lda $dc08   //cia1, time-of-day clock, 1/10 seconds
    jsr lbc089
    pla
    bpl  $c061
    lda #$90
    bit $81a9
    jsr lbc08d
    lda #$8d
    sta ($fd),y
    lda #$d8
    sta $fe
    lda #$01
lbc070: sta ($fd),y
    dey
    bpl lbc070
    jmp ($c01c)
lbc078: pha
    jsr lbc085
    pla
    jsr lbc089
    txa
    jsr lbc08d
    rts
lbc085: lsr
    lsr
    lsr
    lsr
lbc089: and #$0f
    ora #$b0
lbc08d: sta ($fd),y
    iny
    rts

Share

One thought on “64 Clock – Commodore 64 – Basic V2

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.