SBC6502 je "postihnutý" tým že nedokáže priamo cez OPEN kanál do seba natiahnuť data - pretože nič také nemá k dispozícii. Niektoré veci sa pri ukladaní (a tvorbe) dát vďaka tomu komplikujú a treba to riešiť okľukou keďže priamo sa to nedá. Isteže je možné to priamo napísať do programu (zase tých potrebných byte nie je toľko že sa pri písaní cez klávesnicu z toho zamotá hlava), ale ak je k dispozícii iba binárka tak niečo čo pomôže sa celkom hodí. Preto "vytasím" pomocný program ktorý slúži pre prevod binárneho 32byte súboru (ktorý je dostupný ako hexa súbor kedy má dvojnásobnú dĺžku - teda 64byte) a potom priamo vygeneruje listing a potrebné Data riadky pre programátor PROM 74188, jednoducho už netreba ručne "dlapať" samotné hexa data do programu. Ak treba tak binárku do hexa tvaru prevedie niektorý z pomocných programov, na webe je ich dosť a dosť (napríklad bin2hex), lenže ako sa ukázalo je dosť programov ktoré ukladajú hexa znaky s malými písmenami - tak som to tam zapracoval tiež a do stringu môžu prísť aj malé znaky abecedy. Tu sa môžeme stopnúť a Data "naďatlovať" do SBC5502, ale dá sa to aj zautomatizovať. Hexa verziu takto získaných dát treba uložiť do premennej S$ v riadku č.12 kde s ňou už pracuje samotný program. Inak medzi rečou - riadok č.12 práve dosahuje maximálnu povolenú dĺžku - a to 72 znakov.
(Program si kontroluje správnu dĺžku hexa dát uložených v S$.)
Program pôvodne vedel pracovať iba s veľkými znakmi, ale jeho úprava pre prácu aj s malými znakmi abecedy bola jednoduchá.
V programe je v riadku č.12 uložená testovacia verzia obsahu dát, viď kópia obrazovky spusteného programu. Program po spustení vyžaduje zadať názov podľa ktorého potom identifikujeme vytvorené Data. Vytvorené riadky 9000÷9005 potom priamo kopírujeme do programu pre programovanie PROM 74188 alebo pre účely archivácie obsah Data riadkov ukladáme pomocou Capture v Hypertermináli.
Testovací obsah v S$ ktorý postupne zvyšuje obsah vždy o 1.
(Vypíše hexa tvar , vygenerované Data riadky a vyráta CRC.)
Listing programu:
10 CLEAR:POKE 15,80:PD=32500:CRC=0:K$=" DATA":? CHR$(12):?"Convert ..."
11 REM" 32byte binary code to 64byte in hexa code "
12 S$="000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"
13 IF LEN (S$)<>64 THEN ? "Error in S$!":END
15 ?SPC(20)"<-- name = length max. 40 characters -->"
16 ?SPC(3)"PROM"K$" NAME:";:INPUT C$:I=0:?
20 FOR F=1 TO 64 STEP 2
25 IF F=1 THEN ? "0000: ";
26 IF F=33 THEN ?: ? "0010: ";
30 A$=MID$(S$,F,2):?A$;" ";:GOSUB 100
40 NEXT F:?
51 ?:? " "K$":":?:I=PD
52 ?"9000 C$=";CHR$(34);C$;CHR$(34);":ID=32:RETURN"
53 ?"9001"K$;:GOSUB 96:?"9002"K$;:GOSUB 96
54 ?"9003"K$;:GOSUB 96:?"9004"K$;:GOSUB 96
55 PRINT"9005 CRC=";CRC;:PRINT":RETURN:REM CRC in (dec) form !"
56 END
96 FOR G=I TO I+6:?PEEK(G)",";:NEXT:?PEEK(I+7):I=I+8:RETURN
100 S=0
107 IF LEFT$ (A$,1)="F" OR LEFT$ (A$,1)="f" THEN S=240
108 IF LEFT$ (A$,1)="E" OR LEFT$ (A$,1)="e" THEN S=224
109 IF LEFT$ (A$,1)="D" OR LEFT$ (A$,1)="d" THEN S=208
110 IF LEFT$ (A$,1)="C" OR LEFT$ (A$,1)="c" THEN S=192
111 IF LEFT$ (A$,1)="B" OR LEFT$ (A$,1)="b" THEN S=176
112 IF LEFT$ (A$,1)="A" OR LEFT$ (A$,1)="a" THEN S=160
113 IF LEFT$ (A$,1)="9" THEN S=144
114 IF LEFT$ (A$,1)="8" THEN S=128
115 IF LEFT$ (A$,1)="7" THEN S=112
116 IF LEFT$ (A$,1)="6" THEN S=96
117 IF LEFT$ (A$,1)="5" THEN S=80
118 IF LEFT$ (A$,1)="4" THEN S=64
119 IF LEFT$ (A$,1)="3" THEN S=48
120 IF LEFT$ (A$,1)="2" THEN S=32
121 IF LEFT$ (A$,1)="1" THEN S=16
122 IF LEFT$ (A$,1)="0" THEN S=0
123 IF RIGHT$ (A$,1)="F" OR RIGHT$ (A$,1)="f" THEN S=S+15
124 IF RIGHT$ (A$,1)="E" OR RIGHT$ (A$,1)="e" THEN S=S+14
125 IF RIGHT$ (A$,1)="D" OR RIGHT$ (A$,1)="d" THEN S=S+13
126 IF RIGHT$ (A$,1)="C" OR RIGHT$ (A$,1)="c" THEN S=S+12
127 IF RIGHT$ (A$,1)="B" OR RIGHT$ (A$,1)="b" THEN S=S+11
128 IF RIGHT$ (A$,1)="A" OR RIGHT$ (A$,1)="a" THEN S=S+10
129 IF RIGHT$ (A$,1)="9" THEN S=S+9
130 IF RIGHT$ (A$,1)="8" THEN S=S+8
131 IF RIGHT$ (A$,1)="7" THEN S=S+7
132 IF RIGHT$ (A$,1)="6" THEN S=S+6
133 IF RIGHT$ (A$,1)="5" THEN S=S+5
134 IF RIGHT$ (A$,1)="4" THEN S=S+4
135 IF RIGHT$ (A$,1)="3" THEN S=S+3
136 IF RIGHT$ (A$,1)="2" THEN S=S+2
137 IF RIGHT$ (A$,1)="1" THEN S=S+1
138 IF RIGHT$ (A$,1)="0" THEN S=S+0
140 POKE PD+I,S:I=I+1:CRC=CRC+S:RETURN
Program:
32binaryfile_2_64bytehex_ABCDEF_abcdef.txt (2,21 kb)
_____________________________________________________
Napadá ma kopa ďalších možných vylepšení v tomto programe, ale tu je v jeho jednoduchosti sila, používa v sebe 2 podprogramy zo staršieho programu pre programovanie PROM 74188. No - čo na záver dodať - bez tohoto pomocného programu sa dá žiť, ale je to hlavne určené pre spríjemnenie práce s programátorom. Takže takto ...
Ako vidieť v samotnom programe pre programátor PROM 74188 sa už nevŕtam.
_____________________________________________________
Návrat do všetkých pokračovaní o SBC6502:
http://blog.3b2.sk/igi/post/Directory-SBC6502.aspx
____________________________________________________________
Vaše hodnotenie, Rate post: