SBC6502 - 10 - software.

By Administrator at júna 29, 2016 05:46
Filed Under: SBC6502

 

Keď už máme postavený mikropočítač, tak by sa patrilo mať k nemu aj nejaké vlastné programové vybavenie, postupne sem budem nejaké tie "programové drobotiny" dopĺňať (tu uvedené mini programy fungujú bezo zmeny vo všetkých verziách SBC6502). No a najjednoduchšie sa veci píšu v Basicu - aj keď rýchlosť nie je najväčšia, ak Vám nevyhovuje - tak potom choďte na strojový kód - tam je to vykonávanie predsa len o poznanie rýchlejšie.

 

Výpisy dávam tak,  že sa bez problémov cez Hyperterminál nakopírujú do SBC6502 a následne spustia príkazom RUN.

(V zásade sa jedná o čiste textové súbory.)

 

Pripomeňme si nasledovné - Basic príkazy ktoré sú k dispozícii pre SBC6502:


ROM BASIC - details of what has been included/excluded

INCLUDED TOKENS

END, FOR, NEXT, DATA, INPUT, DIM, READ, LET, GOTO, RUN, IF, RESTORE, GOSUB, RETURN, REM, STOP, ON, NULL, WAIT, DEF, POKE, PRINT, CONT, LIST,CLEAR, NEW, TAB(, TO, FN, SPC(, THEN, NOT, STEP, SGN, INT, ABS, USR, FRE, POS, SQR, RND, LOG, EXP, COS, SIN, TAN, ATN, PEEK, LEN, STR$, VAL, ASC, CHR$, LEFT$, RIGHT$, MID$

+, -, *, /, ^, AND, OR, >, +, <


_________
UNPROGRAMMED TOKENS

LOAD, SAVE

___________________________________________________________

Stopnutie počas behu programu sa robí pomocou  CONTROL+C,  spôsobí to potom:

"BREAK IN LINE XXXX"

(v prerušenom programe pokračujeme ďalej bez problémov ak použijeme príkaz CONT + Enter)

____________________________________________________

Poznámka:

Príkaz PRINT CHR$(12), ktorý tu v programoch robí "zmazanie" obrazovky funguje pod programom Hyperterminal, preto tento príkaz nemusí korektne fungovať pod inými terminálovými programami ! Toto platí aj pre niektoré iné CHR$, takže znova upozorňujem - programy som testoval pod Hyperterminálom !

 

Jednoduchý trik ako dosiahnuť 80 znakov riadku:

(ak máme nastavených trebárs 72 znakov v riadku) - bez potreby reštartu SBC6502 stačí zadať príkaz POKE 15,80 - alebo priamo zadať tento príkaz do prvého riadku Vášho programu - po spustení programu sa potom zobrazenie nastaví na 80 znakov v riadku.

___________________________________________________________

 

Všetky tu uvedené programy fungujú v základnej, teda už v 7 čipovej verzii SBC6502 (x-tal SBC6502 = 1.8432 MHz) a samozrejme aj na neskôr rozšírených verziách.

 

Program č.1 - výpočet 2 paralelne zapojených odporov, tak isto je to zároveň výpočet pre 2 do série zapojené kondenzátory:

 PRG1_2xPR_2xSC_bas.txt (615,00 bytes)

 

____________________________________________________________

Program č.2 - výpočet dvoch sériove zapojených odporov, tak isto je to zároveň aj výpočet pre 2 paralelne zapojené kondenzátory:

PRG2_2xSR_2xPC_bas.txt (604,00 bytes)

 

 

Tieto dva programy som si napísal z dlhej chvíle, niečím som postavený SBC6502 predsa len potreboval otestovať ...

____________________________________________________

Program č.3 - Logoutov retrobenchmarkový test, pôvodný zdroj: Retrobenchmark test

Program som mierne upravil pre SBC6502 - nevyžaduje napríklad zápis pre premenné v tvare LET= atď., dokonca ho práve zápis bez LET urýchľuje o pár percent v tomto programe (je to cca 8%) - a to je už merateľné, čiže občas len treba skúšať čo SBC6502 pri výpočte dokáže urýchliť. Je to síce len drobnosť, ale výsledkom je vcelku významné zrýchlenie spracovania dát.

PRG3_Retrobenchmark_test_bas.txt (293,00 bytes)

 

Dosiahnutý čas tohoto testu (x-tal =1.8432MHz) = 36 sec pre W=250


Dosiahnutý čas testu (x-tal=6.00MHz) = 11.30 sec. pre W=250


V prípade ak zachováme pôvodnú štruktúru LET = atď. sa výsledný čas predĺži na cca 39 sekúnd. Skúšal som nastaviť hodnotu až na W=6000, ale to už potom "spapá" skoro kompletne celú dostupnú 32kB RAM. Čas pre vykonanie sa potom predĺži tesne nad 1 hodinu. Maximálna možná použitá hodnota W=7500 kedy už zostáva voľných iba niečo nad 1800 byte RAM. Čas ktorý program potrebuje na vykonanie potom už dosahuje na hodnotu 1h23m52s ...

 

Dosiahnutý čas tohoto testu (x-tal =1.8432MHz) = 1h23m52sec pre W=7500


Dosiahnutý čas testu (x-tal=6.00MHz) =  25m27sec. pre W=7500

 

Kto chce nech si testuje aj takéto hodnoty, ale funguje to aj pri takomto čísle !

(07.10.2019 - doplnené hodnoty testu pri x-tal =6.00MHz)

____________________________________________________________

Programové vybavenie pre rozširujúcu LED dosku:

Pozor, program je urobený na takt hodín =1.8432MHz !

(pri rýchlejšom takte sa urýchli zmena zobrazenia na LED)


Program č.4 -Basic program - efekt "KNIGHT RIDER":

PRG4_Knight_rider_bas.txt (1,30 kb)

(adresy čipu 8255 sú nastavené pre SBC6502 s verziou 32kB RAM, v REM riadku je už pripravené aj nastavenie pre 40kB a 46kB RAM verziu)

_ _ _ _ _ _ _ _ _ _ _ _

Program č.5 - Basic program rozšírené LED DEMO SHOW (obsahuje 9 rozličných  efektov):

PRG5_LED_demo_show_bas.txt (5,00 kb)

(adresy čipu 8255 sú nastavené pre SBC6502 s verziou 32kB RAM, v REM riadku je už pripravené aj nastavenie pre 40kB a 46kB RAM verziu)

___________________________________________________________

TESTY RAM

Pozor, prvý 1kB RAM sa netestuje - v ňom sa nachádzajú pracovné adresy  SBC6502 + je tam umiestnený aj náš testovací Basic-ový program !

 

Program č.6 - jednoduchý RAM MEMORY TEST pre verziu 32kB RAM, testuje sa tu každá pamäťová bunka RAM v rozsahu 1024-32767(dec), postupne sa testujú na obsah 0h, 55h, AAh, FFh.

PRG6a_Memory_test32kB_bas.txt (537,00 bytes)

Tento program postupne vypisuje práve testované 1kB bloky RAM.

- - - - - - - - - - - - - - - - 

Upravená verzia toho istého (len trošku lepšia otimalizácia - ale nárast rýchlosti je fakt merateľný):

PRG6a1_Memory_test.txt (489,00 bytes)

Testuje sa každá pamäťová bunka RAM v rozsahu 1024-32767 (dec), postupne sa testuje na obsah 0h, 55h, AAh, FFh.

- - - - - - - - - - - - - - - - - - - -

Tento program robí kompletný test RAM v rozsahu 1024-32767 (dec) na všetky obsahy buniek v plnom rozsahu 0h-FFh, pozor, trvá to fakt dlho ... (je to Basic), vypisuje sa každá testovaná bunka:

PRG6a2_Memory_test31kB_bas_full.txt (435,00 bytes)

dá sa aj takto:

PRG6a2_Long Memory_test bas_full.txt (412,00 bytes)

Rýchlosť ? Otestuje kompletne - 4kByte RAM za hodinu ... a zase na druhú stranu ak to pobeží tak dlho a zbehne to bez chyby tak máte naozaj 100%-ne zaručene funkčnú SBC6502-ku.

- - - - - - - - - - - - - - - - - - - -

Nasleduje najrýchlejší Basic-ový testovací program pamäte - riešené ako podprogram, najprv sa plnia všetky bunky jedným obsahom a potom sa hneď tento obsah zase na jeden záťah testuje. Jednoznačne najrýchlejší program.


PRG6a3_Memory_test31kB_bas.txt (433,00 bytes)

Testuje sa každá pamäťová bunka RAM v rozsahu 1024-32767 (dec), postupne sa testujú bunky RAM na obsah (hexa) 0h, 55h, AAh, FFh,  dekadicky je to potom 0d, 85d, 170d, 255d.

______________________________________________________________________________

Program  - jednoduchý MEMORY TEST pre verziu 40kB RAM:

PRG6b_Memory_test40kB_bas.txt (537,00 bytes)

Testuje sa každá pamäťová bunka RAM v rozsahu 1024-40959 (dec), postupne sa testuje na obsah 0h, 55h, AAh, FFh.

____________________________________________________

Program - jednoduchý MEMORY TEST pre verziu 46kB RAM:

PRG6c_Memory_test46kB_bas.txt (539,00 bytes)

Testuje sa každá pamäťová bunka RAM v rozsahu 1024-47103 (dec), postupne sa testuje na obsah 0h, 55h, AAh, FFh.

_____________________________________________________________________________

Program č.7 - ASCII MANDELBROTova množina - 32kB RAM - základná verzia:

PRG7a_Mandelbrot_ASCII_bas.txt (392,00 bytes)



Poznámka: program sa dá "zraziť" do menšieho počtu riadkov, potom ale prestáva byť prehľadným, ponúkam jedno z možných riešení:

"Stlačená" verzia:

PRG7b_Mandelbrot_ASCII_bas.txt (342,00 bytes)

Pozor, do prvého riadku treba zaradiť príkaz POKE 15,80 t.j. nastaviť  80 znakov na riadok.

_____________

Ďalšia ASCII verzia Mandelbrotovej množiny:

10 ? CHR$(12):POKE 15,80:MAXITER=20
20 LET C$=" .,'~!^:;[/<&?oxOX#  "
30 FOR Y=-39 TO 39 STEP 2
40 FOR X=-39 TO 39
50 CREAL=X/20
70 CIMAG=Y/20
80 ZREAL = CREAL
90 ZIMAG = CIMAG
95 COUNT = 1
100 ZM = ZREAL*ZREAL
105 ZN = ZIMAG*ZIMAG
107 ZL = ZM+ZN
110 IF ZL>4 THEN GOTO 170
120 ZT=ZM-ZN+CREAL
130 ZIMAG=ZREAL*ZIMAG*2+CIMAG
140 ZREAL=ZT
150 COUNT=COUNT+1
160 IF COUNT<MAXITER THEN GOTO 100
170 PRINT MID$(C$,1+COUNT,1);
180 NEXT X
185 PRINT ""
190 NEXT Y
200 END

_________________________________________________________

Program č.8 - Basic CREATIVE COMPUTER - 32kB RAM:

(oddychovka)

PRG8_Creative_computer_bas.txt (3,38 kb)

 

_________________________________________________________

Programč.9 - LUNAR LANDING SIMULATION - 32kB RAM

(Program som upravil na rozlíšenie 80 znakov v riadku a pre SBC6502 terminálové zobrazenie)


 

PRG9_LEM1_bas.txt (2,96 kb)

 

 

__________________________________________________________

Program č.10 - konverzia údajov medzi Celsiom, Fahrenheitom a Kelvinom navzájom:

 

PRG_10_temperature_conversion_bas.txt (1,59 kb)

Občas treba prekonvertovať teplotu do inej sústavy, takže vtedy sa tento program hodí, navyše bez problémov funguje aj v iných Basicoch.

_________________________________________________________

Program č.11- test RAM:

Jednoduchý krátky test RAM, orezané všetko čo sa len dá, automaticky rozpozná verziu s 46kB, 40kB alebo 32kB RAM. Dôvod prečo sú všetky zbytočnosti orezané je ten, že celý program sa musí zmestiť do prvého kB pamäte (preto sa testuje až druhý kB RAM a vyššie):

Quick_memory_test_32kB_46kB_bas.txt (552,00 bytes)

Testuje sa každá pamäťová bunka RAM (mimo prvého kB), postupne sa testuje na obsah 0h, 55h, AAh, FFh.

Poznámka:

Na riadok č.15 by sa program nemal dostať v žiadnom prípade, preto je ho možné vypustiť.

__________________________________________________________

Program č.12 - zase tester RAM:

Ďalší veľmi jednoduchý krátky test RAM ktorý som napísal, doslova je to tu "ohlodané na kosť", aby bol program čo najkratší. Testujú sa bunky RAM na hodnoty 85 a 170, t.j. binárne sa testujú bity 01010101 a 10101010. Vďaka minimalizácii veľkosti programu je testovaný rozsah RAM skutočne veľký - 656÷32767 (dec). Program si sám vypočíta prvý voľný byte pamäte na testovanie, je uložený v premennej A. Výhodou je slušná rýchlosť programu, nevýhoda ? - nemusia sa zachytiť všetky problémy s RAM - ale na prvotné otestovanie to naozaj postačuje.

 

1 A=32780-FRE(0):FOR F=A TO 32767:PRINT F
3 POKE F,85:IF PEEK(F)<>85 THEN 6
4 POKE F,170:IF PEEK(F)<>170 THEN 6
5 NEXT:END
6 PRINT "Problem":PRINT F, PEEK(F)

___________________________________________________

Program č.13 - veľmi jednoduchý tester kontrolného súčtu obsahu Eprom 27128 pre SBC6502, čo je obsah OS od Searle Granta:

Pretože tu nemáme k dispozícii Save a Load a ani Get a Put tak som urobil veľmi jednoduchý tester obsahu Eprom pre OS SBC6502, síce pri tomto riešení sa môžu v istých prípadoch "nepodarené" bitíky maskovať /prekryť/ a chyba sa neprejaví, ale je to málo pravdepodobné. Je to proste najjednoduchšia pomôcka na kontrolu, hlavne ak nič iné nie je v danom okamžiku poruke. Kontrolná suma sa robí vždy po 1kB, t.j. pekne vždy po 1/16 kapacity OS. Takto sa dá skontrolovať čo potrebujeme bez toho aby sme museli vyberať Eprom z pätičky.

Pôvodne som chcel všetko uložiť do DATA riadkov a potom spusiť kontrolu t.j. teda mať to tak ako by to malo byť, ale ukázalo sa že 32kB RAM je na to naozaj príliš malá - po prvý krát sa ukázalo že 32kB RAM SBC6502 na niečo nestačí  Tongue out a tak som nakoniec použil toto riešenie.

 

Listing programu:

600 ? CHR$(12);
610 ? SPC(2)"Simple SBC6502 OS checksum"
620 ? SPC(4)"original Grant Searle OS"
630 ? SPC(12)"Igi 2016":?
640 ? " kb:    test range:    chksum:"
660 FOR G=1 TO 16:READ A,B,C,D:GOSUB 810:NEXT G
670 END
690 REM A=num.kB,B-start addr.,C-end,D-checksum
700 DATA 1,49152,50175,132540
702 DATA 2,50176,51199,133737
704 DATA 3,51200,52223,129893
706 DATA 4,52224,53247,136578
708 DATA 5,53248,54271,138394
710 DATA 6,54272,55295,135629
712 DATA 7,55296,56319,133096
714 DATA 8,56320,57343,154493
716 DATA 9,57344,58367,261120
718 DATA 10,58368,59391,261120
720 DATA 11,59392,60415,261120
722 DATA 12,60416,61439,261120
724 DATA 13,61440,62463,261120
726 DATA 14,62464,63487,261120
728 DATA 15,63488,64511,261120
730 DATA 16,64512,65535,242797
800 ? "Bad checksum !":RETURN
810 IF A<10 THEN ?" ";
820 ? A"  "B"-"C" ";
830 Q=0:FOR F=B TO C:Q=Q+PEEK(F):NEXT F
840 IF Q=D THEN ? " Passed":RETURN
850 ? " Bad checksum !":RETURN

Checksum SBC6502 ROM.txt (964,00 bytes)


Časom som sem doplnil aj časy behu programu OS checksum pre:

x-tal 1.8432MHz: 44.4sec

x-tal 2.4576MHz: 33.3sec

x-tal 4.0000MHz: 20.6sec

x-tal 4.9152MHz: 16.6sec

 

Poznámka:

Pri tejto príležitosti som natrafil na zaujímavú chybu.

Ak máte program napríklad :

10 FOR F=1 TO 3:READ A: ? A:NEXT

15 END

20 Data 1,2,3

Tak program zahlási chybu v riadku 10, pričom chyba je reálne v riadku č.20 - zápis ma byť správne 20 DATA 1,2,3 ...

__________________________________________________________

 

Viete ako na to ? - teda ak máte počítač s Win7 /32 alebo 64bit/ a potrebujete mať k dispozícii aj Hyperterminál, ktorý už nie je súčasťou Win7 ?

Je to celkom jednoduché, stačí ak si z počítača kde je nainštalovaný Hyperterminál (typicky sa jedná o počítač s WinXP), adresár je typicky tu:

(pričom platí že v ceste namiesto tu použitého slova tester potom treba zadať konkrétne prihlasovacie meno)

Tu potom stiahnete nasledovné súbory a následne si ich prekopírujete na svoj počítač do samostatného adresára, jedná sa o tieto súbory:


hypertrm.dll
hticons.dll
hypertrm.exe
hypertrm.hlp
hypertrm.chm

 

Následne spustíte súbor hypertrm.exe - je to funkčné vrátane ikôn a tiež aj nápovedy.

___________________________________________________

Návrat do všetkých pokračovaní o SBC6502:

http://blog.3b2.sk/igi/post/SBC6502-0-UvodIntroduction.aspx

__________________________________________________________

Vaše hodnotenie, Rate post:

Comments

16. 6. 2018 18:56:30 #

trackback

Directory SBC6502

Directory SBC6502

Igi blog |

Info o autorovi

Volám sa Igor Gramblička, bydlisko: Bratislava, Slovakia. Môj nick: Igi. Blog je o mojich záujmoch, predtým som pracoval ako IT špecialista na počítačové siete a redakčné systémy pre viaceré denníky - až som pred rokmi nakoniec v jednom z nich zakotvil a kde som to potiahol až do konca mojej profesnej kariéry.

Rok, mesiac, počet článkov: