Startsidan  ▸  Texter  ▸  Teknikblogg

Anders Hesselbom

Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.

Några knep för att få fart på Commodore BASIC i C64

2023-09-17

Commodore BASIC 2.0 på Commodore 64 har några kända prestandaproblem, och denna enkla kod har implementerat några stycken:

10 S=TI
20 X=0.01
30 FOR A=0 TO 255
40 REM
50 REM
60 REM
70 X=X+0.01
80 POKE 16384,A
90 REM
100 REM
110 REM
120 NEXT
130 S=TI-S
140 PRINT "TIME" S
150 PRINT "RESULT " X

Programmet startar en tidtagning och 256 gånger görs en flyttalsberäkning och ett heltal skrivs till en minnesadress (16384). Programmet tar 327 jiffies i tid. (En jiffy är ungefär 1/60 sekund.)

Att hitta ett radnummer tar tid, så om man optimerar genom att radera alla REM-satser, blir exekveringstiden istället 299 jiffies.

10 S=TI
20 X=0.01
30 FOR A=0 TO 255
70 X=X+0.01
80 POKE 16384,A
120 NEXT
130 S=TI-S
140 PRINT "TIME" S
150 PRINT "RESULT " X

Om man dessutom lägger alla radnummer tätt ihop, försvinner faktiskt en jiffie till.

0 S=TI
1 X=0.01
2 FOR A=0 TO 255
3 X=X+0.01
4 POKE 16384,A
5 NEXT
6 S=TI-S
7 PRINT "TIME" S
8 PRINT "RESULT " X

Att tolka ett heltal tar tid, så genom att skapa en variabel innehållande adressen 16384 behöver tolken bara göra det arbetet en gång.

0 S=TI
1 X=0.01
2 N=16384
3 FOR A=0 TO 255
4 X=X+0.01
5 POKE N,A
6 NEXT
7 S=TI-S
8 PRINT "TIME" S
9 PRINT "RESULT " X

Detta skalar bort ytterligare 81 jiffies, så att programmet nu inte tar mer än 217 jiffies. Den sista optimeringen vi kan göra, är bara lämplig när arbetet som utförs inte kräver att bildskärmen är aktiv. Genom att stänga av bildskärmen, försvinner en tidskrävande arbetsuppgift, vilket gör att processorn kan lägga mer fokus på BASIC-programmet. På adress 53265 ligger normalt värdet 27, vilket betyder att skärmen ska vara aktiv. Genom att sätta 11 på adressen, stänger man av skärmen, när arbetsuppgiften är klar, kan man aktivera skärmen igen genom att återställa värdet till 27.

0 POKE 53265,11
1 S=TI
2 X=0.01
3 N=16384
4 FOR A=0 TO 255
5 X=X+0.01
6 POKE N,A
7 NEXT
8 S=TI-S
9 PRINT "TIME" S
10 PRINT "RESULT " X
11 POKE 53265,27

Vi är nu nere på 205 jiffies för samma arbetsuppgift, vilket är 63% av ursprungstiden på 327 jiffies. BASIC är fortfarande lite för slött för att vara användbart när datorspel ska byggas, men om man väljer BASIC i kommersiell mjukvara, är det viktigt att göra rätt.

De delar av Pirates! som inte kräver realtidsexekvering är faktiskt skrivna i BASIC, och även spelet Artworx Strip Poker var skrivet i BASIC.

Categories: Retro

Leave a Reply

Your email address will not be published. Required fields are marked *



En kopp kaffe!

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Bjud på en kopp kaffe!

Om...

Kontaktuppgifter, med mera, finns här.

Följ mig

Twitter Instagram
GitHub RSS

Public Service

Folkbildning om public service.

Hem   |   linktr.ee/hesselbom   |   winsoft.se   |   80tal.se   |   Filmtips