SBC6809 - CoCo books. Part11.

By Administrator at November 25, 2023 17:36
Filed Under: SBC8085-NCB85

PDF ohľadne Coco, hlavne je to o príkazoch jazyka Basic a samozrejme aj o inom.


 

Je to v jednom väčšom (71.8MByte), zazipovanom súbore:

Coco.zip

______________________________________________________

Vaše hodnotenie, Rate post:

PBI externý dekodér D5xxh - !CCTL. Atari 800XL.

By Administrator at November 21, 2023 09:30
Filed Under: Atari

Ak potrebujete pripojiť čip 8255 (8255A) k malému Atari tak existuje viacero možností.

 

Najprv nasleduje odkaz na pôvodné zapojenie ktoré som uverejnil pre pripojenie 8255(A) cez slot pre cartridge a je tam aj verzia ktorá ráta zo zabudovaním interface priamo dovnútra Atari:

http://blog.3b2.sk/igi/post/ATARI-interface-8255.aspx

(toto by nás malo uviesť do danej problematiky)

 

Dnes si pozrieme pripojenie cez PBI port, t.j. cez zadný konektor počítača Atari 800XL (U počítačov Atari 800XE a Atari 130XE je to iné - vďaka inej konštrukcii je tam signál !CCTL priamo už k dispozícii).


Základný rozdiel je v tom, že v slote pre cartridge máme už priamo potrebný signál !CCTL t.j. kde sa adresuje priestor D5xxh, toto na zadnom PBI konektore nemáme - a preto si tento signál potrebujeme nanovo "vyrobiť" (!=aktívne v nule).

Ak potrebujeme vytvoriť adresáciu uvedeného priestoru na externom výstupe PBI zbernice tak je tu jedno pekné zapojenie ktoré bolo pred časom uverejnené na poľských Atari stránkach:


PBI dekodér D1xx  a D5xx - !CCTL, ostatná adresácia viď ďalší text.

Zapojenie prevzaté z:  www.atari.org.pl



Ako vidieť potrebujeme na to použiť 2 čipy - 74HCT00 (74LS00) a 74HCT138 (74LS138). Na obrázku sú použité čipy HCT, ale v tomto zapojení to funguje aj s čipmi uvedenými v zátvorke, HCT rada je rýchlejšia, iný rozdiel tam nie je - v dnešnej dobe skôr zoženiete HCT čipy ako LS radu - záleží na tom čo máte doma k dispozícii. (Označenie čipov ako U1 a U3 je prevzaté.) Na dekódovanie je použitých 8 horných adresných vodičov - A15÷A8, čip 74xx00 robí pomocnú logiku pre dekodér. Už len dodám klasiku - nezabudnite ku každému čipu pridať keramiku 100nF na filtráciu jeho napájania, je to dôležité pre správnu činnosť obvodov.

Pozor - pre plnú súčinnosť s obvodom 8255A ešte treba použiť ďalší t.j. tretí čip, napríklad veľmi známe zapojenie 74LS00 ktorý príslušne upraví signály RD a WR. Zapojenie s čipom 74LS00 je uverejnené v odkaze na začiatku tohoto článku, využíva tri hradlá zo štyroch (prvý obrázok v odkaze, štvrté hradlo slúži ako invertor pre signál RESET (druhý obrázok v odkaze).

Ak sa pozriete bližšie na zapojenie tak tu máme k dispozícii dekódovanie v rozsahoch:


D000h
÷D0FFh
D100h
÷D1FFh
D200h
÷D2FFh
D300h
÷D3FFh
D400h
÷D4FFh
D500h
÷D5FFh  /!CCTL
D600h
÷D6FFh
D700h
÷D7FFh


t.j. adresácia "ide" pekne po násobkoch 256byte.

Niektoré tu uvedené adresy používa systém a tak nám "zostáva" voľný rozsah na použitie iba D100
÷D1FFh a D500÷D5FFh (toto je !CCTL). Tieto dva rozsahy by mali postačovať na naše experimenty.


Tu len dodatok - rozsah D100÷D1FFh používa Atari 1090, ale to v našich končinách nie je rozšírené, takže toto by nás nemalo pri našom použití nejako zásadne obmedziť. Dtto sa týka D600÷D6FFh a D700÷D7FFh.


PBI mapovanie na D1xx.

Adresný priestor CPU od D600h do D7FFh je vyhradený pre zariadenia EBI nasledovne:
Veľkosť rozsahu zariadenia:
------ ----- ----
D0 D600h-D61Fh 32 byte
D1 D620h-D63Fh 32 byte
D2 D640h-D65Fh 32 byte
D3 D660h-D67Fh 32 byte
D4 D680h-D69Fh 32 byte
D5 D6A0h-D6BFh 32 byte
D6 D6C0h-D6DFh 32 byte
D7 D6E0h-D6FFh RI  

Región D6E0h-D6FFh D3h je vyhradený až po D6FFh. Adresný priestor CPU od D600h do D7FFh je vždy mapovaný na EBI a nevyžaduje protokol EXTENB/EXTSEL'.

 

Takže - môžeme používať rozsahy D600÷D6FFh a D700÷D7FFh - len tu pozor, tieto priestory už využíva operačný systém QMEG a a teda vtedy musíme mať prepnuté na pôvodný operačný systém - takže ak sa dá, radšej sa tomuto pamäťovému priestoru na osobné použitie vyhýbajte (leda ak s Q-MEG-om nerátame).

 

Táto adresácia sa dá vytvoriť aj inak, ale o tom zase niekedy inokedy - záleží to na tom či potrebné veci zoženiem, pretože by som to rád postavil (písať o niečom čo nemám ma až tak nebaví) a potom by som o tom napísal zase pár riadkov.

_____________________________________________________

Dodatok:

Uvedené zapojenie samozrejme priamo funguje aj na Atari 600XL.

(Na Atari 600XL je na PBI zbernici priamo vyvedené aj napájanie +5V.)

_____________________________________________________

Vaše hodnotenie, Rate post:

Programátor PREPROM-02aLV. Programmer PREPROM-02aLV. Doplnky. Part5.

By Administrator at November 15, 2023 11:33
Filed Under: Non-Atari

Môj "vozový" park programátorov od firmy ELNEC sa pomaly ale isto rozrastá. Mimo toho že mi pribudol ďalší programátor PREPROM_02aLV tak mám k dispozícii k nemu aj ďalšie veci (moduly) čo som doteraz nemal. Cena sa mi zdala primeraná a tak som do toho šiel. Dnes to bude taká malá malá obrazová galéria.

 

Programátory PREPROM-02aLV, môj starší kus je vľavo, napravo je ten "novší".

Je v o "chlp"v lepšom stave ako ten prvý, fungujú obidva.


Programátor PREPROM-02aLV, starší kus. Tu je bočnica ešte rovnakej farby ako

vrchný kryt.


Programátor PREPROM-02aLV, starší kus.


Programátor PREPROM-02aLV, "novší" kus.

Ako vidieť - zmenila sa farba bočníc spodného dielu.


Programátor PREPROM-02aLV, "novší" kus. 


A mám ďalší napájací zdroj pre programátory rady PREPROM-02(aLV).

Jedná sa o nestabilizovaný zdroj, naprázdno dodáva na výstupe 17.12V/DC.


Modul prevodu 28 pin DIL↔PLCC 32pin.


Modul prevodu 32 pin DIL↔PLCC 32pin.

 

Nejaký ten pokec na danú tému a to priamo od fy. Elnec:

Konvertor DIL_PLCC.pdf (1,31 mb)


Nasleduje diagnostic POD type I - ten som už popísal v 1.časti. Pôvodne som ho chcel postaviť - aby som ho mal taktiež vo svojej zbierke, ale prv ako som sa k stavbe "rozhýbal" tak som funkčný POD získal, rozhodne ma to potešilo - a ušetrilo mi to jeho stavbu.


Diagnostic POD type I - spodná strana.


Modul 2051 pre programovanie mikroprocesorov rady 89C2051, presnejšie 89C1051, 89C2051 a 89C4051. Takže ak ich chcete naprogramovať cez PREPROM-02aLV - tak treba mať k dispozícii ďalší, samostatný extra modul ...


Modul 2051, spodná strana.

 

Modul MCU1-LV, je známy aj pod iným názvom "modul PIC-LV" - programuje všetky

MICROCHIP PIC, od 8÷40 pinov, rodina 12Cxxx, 14Cxxx a 16Cxxx.


MCU1-LV modul, spodná strana.

 

Originálnu príručku som už neskenoval (tá moja má rok vydania 2002), je k dispozícii v 1.časti (pdf súbor) tak to tu nebudem dupľovať. Začínam mať v poslednej dobe taký pocit že som na prácu zo staršími Eprom pamäťami už celkom dobre zabezpečený ...

_____________________________________________________________

Vaše hodnotenie, Rate post:

The Micro UK101 - COMPUKIT UK101, basic program - Battleship. Part-7.

By Administrator at November 11, 2023 09:18
Filed Under: SBC8085-NCB85

Je už urobená hra Battleship SBC6502 pre SBC6502 a urobil som konverziu tejto hry aj pre SBC6809 - Battleship SBC6809 - tak som si povedal treba urobiť konverziu hry aj pre Micro UK101. Tu som sa  už pokúsil dodržať zobrazenie ako pri SBC6809, generovanie RND je pritom rovnaké ako u SBC6502, ASCII znaky na začiatku nevie správne zobraziť taktiež, o zábavu bolo postarané - ale táto konverzia bola najľahšia. Čakacie slučky v programe sú urobené pre x-tal 4.000MHz, bez zmeny budú vyhovovať aj pre použitie x-talu  4.9152MHz. rincíp zostáva rovnaký ako u SBC6502 - najprv prebieha zápis do tieňovej obrazovkovej RAM odkiaľ sa naraz vždy prepisuje celá obrazoka vždy po vykonaní nejakej akcie.

 

Úvodná obrazovka.


Tiež sa tu počíta s tým že na Micro UK101 že je dostupná RAM o veľkosti 32kB, je to dané pevnými adresami v programe pre použité dvojrozmerné pole. U týchto malých SBC je 32kB RAM nepísaným štandartom takže tu nemáme problém s veľkosťou dostupnej RAM.


Vzhľad hracieho poľa je identický ako u SBC6809.

S_battle_4_000MHz_UK101.txt (5,23 kb)


Takže teraz sú urobené 3 verzie tej istej hry - a to pre SBC6502, SBC6809 a Micro UK101, Basic je na všetkých troch spomenutých SBC ale mierne odlišný a tak boli potrebné drobné úpravy vždy pre konkrétny typ. Čo mierne prekvapuje je to, že SBC6502 a Micro UK101 používajú rovnakú verziu Basic-u a pritom nie sú na 100% kompatibilné, ale napriek tomu hra teraz funguje bez problémov na všetkých spomenutých troch typoch SBC.

 

Micro UK101

____________________________________________________________

Listing programe pre Micro UK101:

 

 1000 CLEAR:POKE 15,80:? CHR$(12):?:A=31000:B=124:REM 05.11.2023
 1160 ?:?:? TAB(24)"- Micro UK101 - Battleships game -"
 1170 ? TAB(22);"by Igi(c)2023 - http://blog.3b2.sk/igi";
 1172 GOSUB 9999
 1200 ? CHR$(12):GOSUB 2500:GOSUB 2700
 1400 ?:? CHR$(12);
 1410 ? TAB(5)"+- 20 battleships in this game,you have to destroy";
 1415 ? " at least 14 ships -+"
 1417 ? TAB(4)"+-------------+--";
 1420 ? "+....X....1111111111222222222233333333334";
 1422 ? "+-----------+"
 1425 ? TAB(18)"+Y +1234567890123456789012345678901234567890+"
 1430 GOSUB 5100
 1700 A=31000:GOSUB 2900:A=31050:GOSUB 2900:A=31100:GOSUB 2900
 1706 A=31150:GOSUB 2900:A=31200:GOSUB 2900:A=31250:GOSUB 2900
 1714 A=31300:GOSUB 2900:A=31350:GOSUB 2900:A=31400:GOSUB 2900
 1720 A=31450:GOSUB 2900:A=31500:GOSUB 2900:A=31550:GOSUB 2900
 1726 A=31600:GOSUB 2900:A=31650:GOSUB 2900
 1800 GOSUB 5100
 1805 ? TAB(18)"+Score:";:IF SC<10 THEN ?" "SC;
 1820 IF SC=>10 THEN ? SC;
 1825 ? TAB(46)"Gun shots: "GS;
 1830 IF GS<10 THEN ? "  +"
 1835 IF GS=>10 AND GS <100 THEN ? " +"
 1840 IF GS=>100 THEN ? "+"
 1845 ? TAB(18)"+------------- X or Y=0 -> End -------------+"
 1850 IF SC=14 THEN 2940
 1880 ? TAB(28)"Your choice X (1-40)";:INPUT X
 1885 IF X=0 THEN 2950
 1890 IF X>40 THEN GOSUB 9988:GOTO 1400
 1900 ? TAB(28)"Your choice Y (1-14)";:INPUT Y
 1905 IF Y=0 THEN 2950
 1910 IF Y>14 THEN GOSUB 9988:GOTO 1400
 2000 T=31700:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2002 T=31702:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2004 T=31704:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2006 T=31706:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2008 T=31708:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2010 T=31710:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2012 T=31712:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2014 T=31714:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2016 T=31716:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2018 T=31718:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2020 T=31720:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2022 T=31722:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2024 T=31724:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2026 T=31726:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2028 T=31728:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2030 T=31730:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2032 T=31732:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2034 T=31734:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2036 T=31736:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2038 T=31738:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000  
 2050 GS=GS+1
 2055 IF X<>X1 OR Y<>Y1 THEN 4000
 2250 C=C+1:?C;:FOR F=A+4 TO A+43:POKE F,46:NEXT F:RETURN
 2500 GS=0:SC=0:C=0:?"I am generating a line no.:"
 2552 A=31000:GOSUB 2250
 2555 POKE A,B:POKE A+1,32:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2560 A=31050:GOSUB 2250
 2562 POKE A,B:POKE A+1,32:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2570 A=31100:GOSUB 2250
 2572 POKE A,B:POKE A+1,32:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2580 A=31150:GOSUB 2250
 2582 POKE A,B:POKE A+1,32:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2590 A=31200:GOSUB 2250
 2592 POKE A,B:POKE A+1,32:POKE A+2,53:POKE A+3,B:POKE A+44,B
 2600 A=31250:GOSUB 2250
 2602 POKE A,B:POKE A+1,32:POKE A+2,54:POKE A+3,B:POKE A+44,B
 2610 A=31300:GOSUB 2250
 2612 POKE A,B:POKE A+1,32:POKE A+2,55:POKE A+3,B:POKE A+44,B
 2620 A=31350:GOSUB 2250
 2622 POKE A,B:POKE A+1,32:POKE A+2,56:POKE A+3,B:POKE A+44,B
 2630 A=31400:GOSUB 2250
 2632 POKE A,B:POKE A+1,32:POKE A+2,57:POKE A+3,B:POKE A+44,B
 2640 A=31450:GOSUB 2250
 2642 POKE A,B:POKE A+1,49:POKE A+2,48:POKE A+3,B:POKE A+44,B
 2650 A=31500:GOSUB 2250
 2652 POKE A,B:POKE A+1,49:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2660 A=31550:GOSUB 2250
 2662 POKE A,B:POKE A+1,49:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2670 A=31600:GOSUB 2250
 2672 POKE A,B:POKE A+1,49:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2680 A=31650:GOSUB 2250
 2682 POKE A,B:POKE A+1,49:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2684 ?:RETURN
 2700 Q=31700:?:?"I am generating 20 battleships ..."
 2705 FOR I=1 TO 20
 2710 D=INT(RND(1)*14):D=D+1:POKE Q,D
 2720 E=INT(RND(1)*40):E=E+1:POKE Q+1,E
 2725 Q=Q+2:? I;:FOR R=0 TO 650:NEXT:NEXT:RETURN
 2800 Y1=PEEK(T):X1=PEEK(T+1):RETURN
 2900 ? TAB(18);:FOR F=A TO A+44:? CHR$(PEEK(F));:NEXT F:?
 2905 RETURN
 2940 ?TAB(16)"Congratulations! You destroyed the enemy's fleet."
 2945 GOTO 2955
 2950 ? CHR$(12)
 2955 ?:?TAB(28)"(N)ew game or (Q)uit:";:INPUT A$
 2960 IF A$="N" THEN 1200
 2965 IF A$="Q" THEN END
 2970 GOTO 2950
 3000 ?TAB(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000
 3080 GS=GS+1:GOTO 1400
 4000 ?TAB(36)"Miss !!!";:GOSUB 9998:OP=120:GOSUB 5000:GOTO 1400
 5000 IF Y=1 THEN POKE (31004+X-1),OP
 5010 IF Y=2 THEN POKE (31054+X-1),OP
 5015 IF Y=3 THEN POKE (31104+X-1),OP
 5025 IF Y=4 THEN POKE (31154+X-1),OP
 5030 IF Y=5 THEN POKE (31204+X-1),OP
 5035 IF Y=6 THEN POKE (31254+X-1),OP
 5040 IF Y=7 THEN POKE (31304+X-1),OP
 5045 IF Y=8 THEN POKE (31354+X-1),OP
 5050 IF Y=9 THEN POKE (31404+X-1),OP
 5055 IF Y=10 THEN POKE (31454+X-1),OP
 5060 IF Y=11 THEN POKE (31504+X-1),OP
 5065 IF Y=12 THEN POKE (31554+X-1),OP
 5070 IF Y=13 THEN POKE (31604+X-1),OP
 5075 IF Y=14 THEN POKE (31654+X-1),OP
 5080 RETURN
 5100 ? TAB(18)"+-------------------------------------------+"
 5102 RETURN
 9988 ?TAB(37)"Error ...";:GOSUB 9998:RETURN
 9998 FOR F=0 TO 6000:NEXT:RETURN
 9999 FOR F=0 TO 20000:NEXT:RETURN

____________________________________________________________

Upozornenie:

 

Zobrazenie krížiku platí pre nastavenie fontu v Hypertermináli, kedy je jeho okno zmenšené - písmo Lucida Console, veľkosť písma 8, osobne používam najradšej túto veľkosť Hyperterminálového okna:

 

 

Ak ponecháme základné nastavenie fontu čo je písmo Terminal, veľkosť písma 14:

 

 

tak musíme v programovom riadku číslo 3000 urobiť zmenu, pôvodný text:

 

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000

nahradíme:

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=127:GOSUB 5000

  

Čiže je tu zmena hodnoty v obsahu premennej OP - po tejto zmene sa zobrazí namiesto krížiku pri zásahu lodička , ak sa zmena neprevedie bude sa zobrazovať iný, vzhľadom nie vhodný  znak. Toto samozrejme platí aj v opačnom garde. Je to dané tým, že uvedené dva fonty používajú mierne odlišnú znakovú sadu.

______________________________________________________

Vaše hodnotenie, Rate post:

SBC6809 - Basic game: Battleships. Part-10.

By Administrator at November 10, 2023 08:08
Filed Under: SBC8085-NCB85

Keď som napísal hru Battleship pre SBC6502 tak som si povedal - musí to priamo fungovať aj pre SBC6809. Chyba lávky, ako obyčajne ak si myslím že niečo bude hodne jednoduché tak som sa zase mýlil. Ako sa ukázalo - nedala sa hra napísaná pre SBC6502 priamo spustiť aj na SBC6809, niektoré ASCII znaky to z nejakých príčin čiastočne ignoruje a tak som musel urobiť čiastočnú prerábku /konverziu/ tejto hry - vďaka tomu tu "odpadla" úvodná ASCII obrazovka lode. Pri ďalšom som zistil že tiež generovanie RND vyžadovalo v sebe urobiť zmenu. Ďalšia vec - SBC6809 nepozná príkaz SPC(číslo), čiže som ho všade musel nahradiť príkazom TAB(číslo). Riadky v programe som chcel "zahustiť", boli by podstatne dlhšie ako pri SBC6502, pretože toto SBC6809 pri písaní programu dovoľuje, teda obsahy riadkov by boli extrémne dlhé, parádne to môže skrátiť zápis, na druhú stranu je to potom na úkor prehľadnosti, rozhodne sa to zle číta v terminálovom okne, takže som zostal pri pôvodnej dĺžke riadkov. Na druhú stranu - je tu len jedna verzia programu, pretože procesor 6809 beží na 1.8432MHz a teda tu nejaké zmeny clocku príliš nehrozia. Program ráta s SBC6809 a dostupnou 32kB RAM, je to dané umiestnením dvojrozmerného poľa v RAM.

No a čo dodať na záver? - teraz tomu síce chýba efektná úvodná obrazovka ale program funguje.


Jednoduchá úvodná obrazovka.

 

Aj hracie pole vďaka neschopnosti "tlačiť" niektoré znaky na obrazovku je pozmenené

a tedy prišlo k úprave vzhľadu hracej plochy.


Síce viem tam tie znaky dostať aj inakším spôsobom, ale bolo by to zbytočne zložité a tak som sa rozhodol hru nekomplikovať a vyriešil som to tak ako to je teraz. V hracom poli je to iné, tam sa zapisuje pomocou POKE priamo do RAM, tam to ide jednoduchšie a teda tam je problém na 100% vyriešený. Vyznať sa v tom dá - a hrať sa to dá tak isto. Môžem skonštatovať že teraz aj SBC6809 má funkčnú konverziu uvedenej hry.

S_battle_1_8432MHz_SBC6809.txt (5,23 kb)


SBC6809

______________________________________________________

12.11.2023

Pre tých ktorí majú radi dlhé riadky ktoré umožňuje zápis v  SBC6809 ... je tu hra uložená aj v tomto formáte, aspoň som to skúsil, funguje tak isto:

S_battle_1_8432MHz_SBC6809_long_rows.txt (4,95 kb)

(Pritom sa tu ani zďaleka nevyužíva plná dĺžka programového riadku - je to až 250 znakov.)

____________________________________________________________

Listing programu pre SBC6809:

 

 1000 CLEAR:POKE 15,80:? CHR$(12):?:A=31000:B=124:REM 05.11.2023
 1160 ?:?:? TAB(26)"- SBC6809 - Battleships game -"
 1170 ? TAB(22);"by Igi(c)2023 - http://blog.3b2.sk/igi";
 1172 GOSUB 9999
 1200 ? CHR$(12):GOSUB 2500:GOSUB 2700
 1400 ?:? CHR$(12);
 1410 ? TAB(5)"+- 20 battleships in this game,you have to destroy";
 1415 ? " at least 14 ships -+"
 1417 ? TAB(4)"+-------------+--";
 1420 ? "+....X....1111111111222222222233333333334";
 1422 ? "+-----------+"
 1425 ? TAB(18)"+Y +1234567890123456789012345678901234567890+"
 1430 GOSUB 5100
 1700 A=31000:GOSUB 2900:A=31050:GOSUB 2900:A=31100:GOSUB 2900
 1706 A=31150:GOSUB 2900:A=31200:GOSUB 2900:A=31250:GOSUB 2900
 1714 A=31300:GOSUB 2900:A=31350:GOSUB 2900:A=31400:GOSUB 2900
 1720 A=31450:GOSUB 2900:A=31500:GOSUB 2900:A=31550:GOSUB 2900
 1726 A=31600:GOSUB 2900:A=31650:GOSUB 2900
 1800 GOSUB 5100
 1805 ? TAB(18)"+Score:";:IF SC<10 THEN ?" "SC;
 1820 IF SC=>10 THEN ? SC;
 1825 ? TAB(17)"Gun shots: "GS;
 1830 IF GS<10 THEN ? "  +"
 1835 IF GS=>10 AND GS <100 THEN ? " +"
 1840 IF GS=>100 THEN ? "+"
 1845 ? TAB(18)"+------------- X or Y=0 -> End -------------+"
 1850 IF SC=14 THEN 2940
 1880 ? TAB(28)"Your choice X (1-40)";:INPUT X
 1885 IF X=0 THEN 2950
 1890 IF X>40 THEN GOSUB 9988:GOTO 1400
 1900 ? TAB(28)"Your choice Y (1-14)";:INPUT Y
 1905 IF Y=0 THEN 2950
 1910 IF Y>14 THEN GOSUB 9988:GOTO 1400
 2000 T=31700:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2002 T=31702:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2004 T=31704:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2006 T=31706:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2008 T=31708:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2010 T=31710:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2012 T=31712:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2014 T=31714:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2016 T=31716:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2018 T=31718:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2020 T=31720:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2022 T=31722:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2024 T=31724:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2026 T=31726:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2028 T=31728:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2030 T=31730:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2032 T=31732:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2034 T=31734:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2036 T=31736:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2038 T=31738:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000  
 2050 GS=GS+1
 2055 IF X<>X1 OR Y<>Y1 THEN 4000
 2250 C=C+1:?C;:FOR F=A+4 TO A+43:POKE F,46:NEXT F:RETURN
 2500 GS=0:SC=0:C=0:?"I am generating a line no.:"
 2552 A=31000:GOSUB 2250
 2555 POKE A,B:POKE A+1,32:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2560 A=31050:GOSUB 2250
 2562 POKE A,B:POKE A+1,32:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2570 A=31100:GOSUB 2250
 2572 POKE A,B:POKE A+1,32:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2580 A=31150:GOSUB 2250
 2582 POKE A,B:POKE A+1,32:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2590 A=31200:GOSUB 2250
 2592 POKE A,B:POKE A+1,32:POKE A+2,53:POKE A+3,B:POKE A+44,B
 2600 A=31250:GOSUB 2250
 2602 POKE A,B:POKE A+1,32:POKE A+2,54:POKE A+3,B:POKE A+44,B
 2610 A=31300:GOSUB 2250
 2612 POKE A,B:POKE A+1,32:POKE A+2,55:POKE A+3,B:POKE A+44,B
 2620 A=31350:GOSUB 2250
 2622 POKE A,B:POKE A+1,32:POKE A+2,56:POKE A+3,B:POKE A+44,B
 2630 A=31400:GOSUB 2250
 2632 POKE A,B:POKE A+1,32:POKE A+2,57:POKE A+3,B:POKE A+44,B
 2640 A=31450:GOSUB 2250
 2642 POKE A,B:POKE A+1,49:POKE A+2,48:POKE A+3,B:POKE A+44,B
 2650 A=31500:GOSUB 2250
 2652 POKE A,B:POKE A+1,49:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2660 A=31550:GOSUB 2250
 2662 POKE A,B:POKE A+1,49:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2670 A=31600:GOSUB 2250
 2672 POKE A,B:POKE A+1,49:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2680 A=31650:GOSUB 2250
 2682 POKE A,B:POKE A+1,49:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2684 ?:RETURN
 2700 Q=31700:?:?"I am generating 20 battleships ..."
 2705 FOR I=1 TO 20
 2710 D=INT(RND(0)*14):D=D+1:POKE Q,D
 2720 E=INT(RND(0)*40):E=E+1:POKE Q+1,E
 2725 Q=Q+2:? I;:FOR R=0 TO 300:NEXT:NEXT:RETURN
 2800 Y1=PEEK(T):X1=PEEK(T+1):RETURN
 2900 ? TAB(18);:FOR F=A TO A+44:? CHR$(PEEK(F));:NEXT F:?
 2905 RETURN
 2940 ?TAB(16)"Congratulations! You destroyed the enemy's fleet."
 2945 GOTO 2955
 2950 ? CHR$(12)
 2955 ?:?TAB(28)"(N)ew game or (Q)uit:";:INPUT A$
 2960 IF A$="N" THEN 1200
 2965 IF A$="Q" THEN END
 2970 GOTO 2950
 3000 ?TAB(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000
 3080 GS=GS+1:GOTO 1400
 4000 ?TAB(36)"Miss !!!";:GOSUB 9998:OP=120:GOSUB 5000:GOTO 1400
 5000 IF Y=1 THEN POKE (31004+X-1),OP
 5010 IF Y=2 THEN POKE (31054+X-1),OP
 5015 IF Y=3 THEN POKE (31104+X-1),OP
 5025 IF Y=4 THEN POKE (31154+X-1),OP
 5030 IF Y=5 THEN POKE (31204+X-1),OP
 5035 IF Y=6 THEN POKE (31254+X-1),OP
 5040 IF Y=7 THEN POKE (31304+X-1),OP
 5045 IF Y=8 THEN POKE (31354+X-1),OP
 5050 IF Y=9 THEN POKE (31404+X-1),OP
 5055 IF Y=10 THEN POKE (31454+X-1),OP
 5060 IF Y=11 THEN POKE (31504+X-1),OP
 5065 IF Y=12 THEN POKE (31554+X-1),OP
 5070 IF Y=13 THEN POKE (31604+X-1),OP
 5075 IF Y=14 THEN POKE (31654+X-1),OP
 5080 RETURN
 5100 ? TAB(18)"+-------------------------------------------+"
 5102 RETURN
 9988 ?TAB(37)"Error ...";:GOSUB 9998:RETURN
 9998 FOR F=0 TO 2255:NEXT:RETURN
 9999 FOR F=0 TO 7518:NEXT:RETURN

_____________________________________________________________

Upozornenie:


Zobrazenie krížiku platí pre nastavenie fontu v Hypertermináli, kedy je jeho okno zmenšené - písmo Lucida Console, veľkosť písma 8, osobne používam najradšej túto veľkosť Hyperterminálového okna:

 

 

Ak ponecháme základné nastavenie fontu čo je písmo Terminal, veľkosť písma 14:

 

 

tak musíme v programovom riadku číslo 3000 urobiť zmenu, pôvodný text:

 

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000

nahradíme:

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=127:GOSUB 5000

 

Čiže je tu zmena v obsahu použitej premennej OP - po tejto zmene sa zobrazí namiesto krížiku pri zásahu lodička , ak sa zmena neprevedie bude sa zobrazovať iný, vzhľadom nie vhodný  znak. Toto samozrejme platí aj v opačnom garde. Je to dané tým, že uvedené dva fonty používajú mierne odlišnú znakovú sadu.

____________________________________________________________

Vaše hodnotenie, Rate post:

SBC6502 - 68 - basic programs - "Battleships".

By Administrator at November 07, 2023 13:25
Filed Under: SBC6502

Tak na tento program som sa chystal dlho, veľmi dlho, úvodnú hlavičku som vyrobil v roku 2020, rozvrhol som nejaké schémy ako na to, časti programu som aj napísal  - ale stále to bolo akosi priveľmi komplikované a tak som to radšej založil do šuplíku a spalo to tam doteraz - a to ešte pred pár dňami. Teraz som vzal zo starého, rozrobeného a nedokončeného programu iba jeho pôvodnú hlavičku, kompletne všetko ostatné som urobil a napísal odznova - a to po novom, celkom inak, program je napísaný pre SBC6502 s 32kB RAM (dané pevnou lokáciou adries tieňovej obrazovky v RAM). Nemyslím že by tie pevne nastavené lokácie v RAM nejako vadili, tých 32kB RAM na takýchto SBC je dnes dá sa povedať už nepísaným štandartom. Chcel som vyskúšať ako na to viem ísť "po vlastnej osi", takže nemal som (ani som nehľadal) žiadnu inšpiráciu z podobnej hry - a teda použité riešenie je naozaj jedinečné a nie je okopírované. Možno by stálo za to tu vyskúšať použiť v programe príkaz DIM, tu som to ale nepoužil, rozhodol som sa vytvoriť si potrebné dvojrozmerné hráčske pole priamo vo voľnej RAM, pripadalo mi to zábavnejšie pri písaní programu (a vďaka tomu je program aj o poznanie kratší). Viaceré veci by sa dali v programe lepšie optimalizovať, ale za 2 dni som viac nestihol vymyslieť.


 

Čo ma viedlo k napísaniu tejto hry? Nuž mimo iného je to dané aj tým že hier čo sa hrajú v terminálovom okne v dnešnej dobe akosi niet - nakoniec výpis pri štarte samotného SBC6502 uvádza rok 1977 ... (letí to ...) a zatiaľ som len preberal a konvertoval nejaké hry, už bolo načase nadlapať svoju vlastnú jednoduchú hru. Program spolupracuje s programom Hyperterminál pod Win, iný terminálový program som na spoluprácu netestoval. Pre mazanie obrazovky je použitý typický terminálový príkaz ? CHR$(12) namiesto príkazu CLS ktorý MS BASIC pre SBC6502 nemá.

A tým že je to teraz napísané pre SBC6502 tak som si povedal že to chcem preniesť aj na UK101 a SBC6809 - nech mám tento vlastný program na tieto SBC. Už teraz ale viem že niektoré časti programu bude potrebné urobiť inak a niečo aj vynechať pretože všetko na nich nie je na 100% rovnaké.

Je tu jedna vlastnosť ktorá sa tu nedá obísť - totiž nie je tu možné prepisovať veci po celej obrazovke ako chcem priamo a teda návrat pozície kurzoru je možný len o pár znakov - a to tiež len obmedzene a pri potrebnej zmene je potom potrebné už prepisovať celú obrazovku. Vo výsledku to znamenalo urobiť si v RAM pamäti tieňovú obrazovku a zmeny prevádzať najprv v nej a až keď je tam prevedená zmena tak následne premazať displej a potom to celé naraz nanovo vypísať na obrazovku terminálu z tieňovej obrazovky. Je to síce také škrabanie sa za uchom opačnou rukou - ale na lepší systém ako na to som doteraz neprišiel (kto vie lepšie riešene - sem s ním !). Urobil som jednoduchú hru Battleships, kde sa snažíte na ploche 40 x 14 štvorčekov nájsť umiestnenie jednotlivých lodí a teda snažíte sa túto bojovú flotilu postupne likvidovať.

 

Čisté hracie pole.

 

Program vytvorí spomenuté hracie pole a potom do neho náhodne vygeneruje rozmiestnenie 20 bojových lodí nášho protivníka, našou úlohou je nájsť ich lokáciu. Pre základné zničenie nepriateľskej flotily postačuje zlikvidovať minimálne 14 lodí, potom je ich bojaschopnosť úplne ochromená. Vzhľadom k tomu že je tu k dispozícii celkove 560 možných lokácií tak je o dlhú zábavu postarané - a to zdôrazňujem - nemusíme pritom ani nájsť všetky lode protivníka. Na displeji zadávame údaje o lokácii v poradí - najprv treba zadať os X (1÷40) a potom os Y (1÷14), povolený rozsah týchto hodnôt pri zadávaní program kontroluje. Ak použijete v zadaní X alebo Y hodnotu = 0 = koniec programu.

 

 

Na tomto obrázku som nechal nájsť všetkých 14 potrebných lodí (ako priamo na to - tak túto fintu neuvádzam), pekne však vidieť že sa skutočne jedná vždy o náhodné rozmiestnenie lodí protivníka a teda situáciu pri ich hľadaní nám počítač rozhodne neuľahčuje. Pozícia zničenej lode je značená krížikom - , nepoužité pole pri našom poľovaní je vyznačené bodkou  . , program počíta celkové skóre, tak isto počíta počet potrebných striel na dosiahnutie uvedeného skóre. Zobrazenie krížiku alebo namiesto neho priamo lodičky je dané použitým fontom a veľkosťou písma - viď úplne posledný odstavec v článku.

 

Takto to vyzerá priamo v hre - vidíme zásahy - a tak isto ak trafíme vedľa - x

 

Obmedzujúcim prvkom je tu maximálne použiteľné vertikálne rozlíšenie (dané terminálovým oknom), je k dispozícii iba 22 riadkov a teda musím si vystačiť s tým čo je k dispozícii. Komunikačné riadky pod poľom majú k dispozícii 3 riadky z 22 a sú tu maximálne využité, to potom stanovilo aj maximálny použitý počet riadkov v osi Y na 14.

 

Program mám v 2 verziách,

jedna je pre x-tal 1.8432MHz:

S_battle_1_8432MHz.txt (6,47 kb)

druhá je pre x-tal 4.9152MHz:

S_battle_4_9152MHz.txt (6,47 kb)

 

 

Záver:

Medzi nami - vedel by som to hracie pole roztiahnuť a zväčšiť trebárs aj na 78 x 18 štvorčekov (to by už bolo 1404 pozícií na hľadanie), otázka je iná - nemám pocit že by to potom ešte niekoho bavilo, aj tak je to už hodne zložité, to je jediný dôvod prečo som nešiel do extrému. Hra má pokiaľ možno baviť, nie totálne otráviť.

No a keď som toto dokončil /hru som napísal v priebehu 2 dní/ som si povedal: "Skús previesť konverziu tohoto programu pre SBC6809 a tiež pre Micro UK101 ..., nemal by to byť problém." - v článku som to už spomenul - ale o tom ako to dopadlo zase už niekedy inokedy.

____________________________________________________________

Ukážka - listing programu pre SBC6502 a x-tal 1.8432MHz:

 

 1000 CLEAR:POKE 15,80:? CHR$(12):?:A=31000:B=124:REM 05.11.2023
 1030 ? SPC(12)"    _           _   _   _           _     _ "       
 1032 ? SPC(12)"   | |         | | | | | |         | |   (_)"     
 1034 ? SPC(12)"   | |__   __ _| |_| |_| | ___  ___| |__  _ _ __  ___"
 1036 ? SPC(12)"   | '_ \ / _` | __| __| |/ _ \/ __| '_ \| | '_ \/ __|"
 1038 ? SPC(12)"   | |_) | (_| | |_| |_| |  __/\__ \ | | | | |_) \__ \"
 1040 ? SPC(12)"   |_.__/ \__,_|\__|\__|_|\___||___/_| |_|_| .__/|___/"
 1042 ? SPC(12)"                                           | | SBC6502"
 1044 ? SPC(12)"                                           |_|"
 1046 ? SPC(12)"                                )_("
 1048 ? SPC(12)"                         ________|_ "        
 1050 ? SPC(12)"             ______     /==========|   ___/"
 1052 ? SPC(12)"____   _____   [\\\]___/___________|__[///]    __/"
 1054 ? SPC(12)"\ o \____[\\]__/__________________________\___[//]___"
 1056 ? SPC(12)" \   2311     |__O__O__||__O__O__||__O__O__||__O__O__|"
 1058 ? SPC(12)"  \                                                 /"
 1060 ? SPC(12)"";:FOR F=1 TO 55:?CHR$(126);:NEXT:GOSUB 9998
 1065 FOR H=1 TO 5:? CHR$(8);:NEXT:? CHR$(94);:GOSUB 9998
 1070 FOR H=1 TO 4:GOSUB 9970:NEXT:? CHR$(8)CHR$(126)
 1170 ? TAB(22);"by Igi(c)2023 - http://blog.3b2.sk/igi";
 1172 GOSUB 9999
 1200 ? CHR$(12):GOSUB 2500:GOSUB 2700
 1400 ?:? CHR$(12);
 1410 ? SPC(5)"+- 20 battleships in this game,you have to destroy";
 1415 ? " at least 14 ships -+"
 1417 ? SPC(5)"+----------+    ";
 1420 ? "|X        1111111111222222222233333333334 ";
 1422 ? " +----------+"
 1425 ? SPC(16)"+-+ Y|1234567890123456789012345678901234567890 -+"
 1430 GOSUB 5100
 1700 A=31000:GOSUB 2900:A=31050:GOSUB 2900:A=31100:GOSUB 2900
 1706 A=31150:GOSUB 2900:A=31200:GOSUB 2900:A=31250:GOSUB 2900
 1714 A=31300:GOSUB 2900:A=31350:GOSUB 2900:A=31400:GOSUB 2900
 1720 A=31450:GOSUB 2900:A=31500:GOSUB 2900:A=31550:GOSUB 2900
 1726 A=31600:GOSUB 2900:A=31650:GOSUB 2900
 1800 GOSUB 5100
 1805 ? SPC(18)"|Score:";:IF SC<10 THEN ?" "SC;
 1820 IF SC=>10 THEN ? SC;
 1825 ? SPC(17)"Gun shots: "GS;
 1830 IF GS<10 THEN ? "  |"
 1835 IF GS=>10 AND GS <100 THEN ? " |"
 1840 IF GS=>100 THEN ? "|"
 1845 ? SPC(18)"+------------- X or Y=0 -> End -------------+"
 1850 IF SC=14 THEN 2940
 1880 ? SPC(28)"Your choice X (1-40)";:INPUT X
 1885 IF X=0 THEN 2950
 1890 IF X>40 THEN GOSUB 9988:GOTO 1400
 1900 ? SPC(28)"Your choice Y (1-14)";:INPUT Y
 1905 IF Y=0 THEN 2950
 1910 IF Y>14 THEN GOSUB 9988:GOTO 1400
 2000 T=31700:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2002 T=31702:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2004 T=31704:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2006 T=31706:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2008 T=31708:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2010 T=31710:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2012 T=31712:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2014 T=31714:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2016 T=31716:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2018 T=31718:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2020 T=31720:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2022 T=31722:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2024 T=31724:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2026 T=31726:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2028 T=31728:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2030 T=31730:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2032 T=31732:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2034 T=31734:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2036 T=31736:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
 2038 T=31738:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000  
 2050 GS=GS+1
 2055 IF X<>X1 OR Y<>Y1 THEN 4000
 2250 C=C+1:?C;:FOR F=A+4 TO A+43:POKE F,46:NEXT F:RETURN
 2500 GS=0:SC=0:C=0:?"I am generating a line no.:"
 2552 A=31000:GOSUB 2250
 2555 POKE A,B:POKE A+1,32:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2560 A=31050:GOSUB 2250
 2562 POKE A,B:POKE A+1,32:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2570 A=31100:GOSUB 2250
 2572 POKE A,B:POKE A+1,32:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2580 A=31150:GOSUB 2250
 2582 POKE A,B:POKE A+1,32:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2590 A=31200:GOSUB 2250
 2592 POKE A,B:POKE A+1,32:POKE A+2,53:POKE A+3,B:POKE A+44,B
 2600 A=31250:GOSUB 2250
 2602 POKE A,B:POKE A+1,32:POKE A+2,54:POKE A+3,B:POKE A+44,B
 2610 A=31300:GOSUB 2250
 2612 POKE A,B:POKE A+1,32:POKE A+2,55:POKE A+3,B:POKE A+44,B
 2620 A=31350:GOSUB 2250
 2622 POKE A,B:POKE A+1,32:POKE A+2,56:POKE A+3,B:POKE A+44,B
 2630 A=31400:GOSUB 2250
 2632 POKE A,B:POKE A+1,32:POKE A+2,57:POKE A+3,B:POKE A+44,B
 2640 A=31450:GOSUB 2250
 2642 POKE A,B:POKE A+1,49:POKE A+2,48:POKE A+3,B:POKE A+44,B
 2650 A=31500:GOSUB 2250
 2652 POKE A,B:POKE A+1,49:POKE A+2,49:POKE A+3,B:POKE A+44,B
 2660 A=31550:GOSUB 2250
 2662 POKE A,B:POKE A+1,49:POKE A+2,50:POKE A+3,B:POKE A+44,B
 2670 A=31600:GOSUB 2250
 2672 POKE A,B:POKE A+1,49:POKE A+2,51:POKE A+3,B:POKE A+44,B
 2680 A=31650:GOSUB 2250
 2682 POKE A,B:POKE A+1,49:POKE A+2,52:POKE A+3,B:POKE A+44,B
 2684 ?:RETURN
 2700 Q=31700:?:?"I am generating 20 battleships ..."
 2705 FOR I=1 TO 20
 2710 D=INT(RND(1)*14):D=D+1:POKE Q,D
 2720 E=INT(RND(1)*40):E=E+1:POKE Q+1,E
 2725 Q=Q+2:? I;:FOR R=0 TO 300:NEXT:NEXT:RETURN
 2800 Y1=PEEK(T):X1=PEEK(T+1):RETURN
 2900 ? SPC(18);:FOR F=A TO A+44:? CHR$(PEEK(F));:NEXT F:?
 2905 RETURN
 2940 ?SPC(16)"Congratulations! You destroyed the enemy's fleet."
 2945 GOTO 2955
 2950 ? CHR$(12)
 2955 ?:?SPC(28)"(N)ew game or (Q)uit:";:INPUT A$
 2960 IF A$="N" THEN 1200
 2965 IF A$="Q" THEN END
 2970 GOTO 2950
 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000
 3080 GS=GS+1:GOTO 1400
 4000 ?SPC(36)"Miss !!!";:GOSUB 9998:OP=120:GOSUB 5000:GOTO 1400
 5000 IF Y=1 THEN POKE (31004+X-1),OP
 5010 IF Y=2 THEN POKE (31054+X-1),OP
 5015 IF Y=3 THEN POKE (31104+X-1),OP
 5025 IF Y=4 THEN POKE (31154+X-1),OP
 5030 IF Y=5 THEN POKE (31204+X-1),OP
 5035 IF Y=6 THEN POKE (31254+X-1),OP
 5040 IF Y=7 THEN POKE (31304+X-1),OP
 5045 IF Y=8 THEN POKE (31354+X-1),OP
 5050 IF Y=9 THEN POKE (31404+X-1),OP
 5055 IF Y=10 THEN POKE (31454+X-1),OP
 5060 IF Y=11 THEN POKE (31504+X-1),OP
 5065 IF Y=12 THEN POKE (31554+X-1),OP
 5070 IF Y=13 THEN POKE (31604+X-1),OP
 5075 IF Y=14 THEN POKE (31654+X-1),OP
 5080 RETURN
 5100 ? SPC(18)"|-------------------------------------------|"
 5102 RETURN
 9970 ? CHR$(8)CHR$(126)CHR$(94);:GOSUB 9998:RETURN
 9988 ?SPC(37)"Error ...";:GOSUB 9998:RETURN
 9998 FOR F=0 TO 2255:NEXT:RETURN
 9999 FOR F=0 TO 7518:NEXT:RETURN

_____________________________________________________________

Upozornenie:


Zobrazenie krížiku platí pre nastavenie fontu v Hypertermináli, kedy je jeho okno zmenšené - písmo Lucida Console, veľkosť písma 8, osobne používam najradšej túto veľkosť Hyperterminálového okna:

 

 

Ak ponecháme základné nastavenie fontu čo je písmo Terminal, veľkosť písma 14:

 

 

tak musíme v programovom riadku číslo 3000 urobiť zmenu, pôvodný text:

 

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000

nahradíme:

 3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=127:GOSUB 5000

 

Čiže je tu zmena v obsahu premennej OP - po tejto zmene sa zobrazí namiesto krížiku pri zásahu lodička , ak sa zmena neprevedie bude sa zobrazovať iný, vzhľadom nie príliš vhodný  znak. Toto samozrejme platí aj v opačnom garde. Je to dané tým, že uvedené dva fonty používajú mierne odlišnú znakovú sadu.

_____________________________________________________

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

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

____________________________________________________________

Vaše hodnotenie, Rate post:

11_2023 Blog, Notes.

By Administrator at November 02, 2023 13:11
Filed Under: Blog

02.11.2023

Dnes sa pozriem na odbery programátoru PREPROM-02aLV pri napájaní stabilizovanými 15V/DC a aj pri 12V/DC:

Programátor PREPROM-02aLV. Programmer PREPROM-02aLV. Part4.

V článku je mimo iného aj popis stavby maléh, vcelku dá sa povedať univerzálneho domáceho zdroja pre napájanie rozličných zariadení, s prepínateľnými hodnotami na jeho výstupe na 5V-12V-15V/DC.

______________________

Dodatok 04.11.2023:

V článku mi "vypadli" niektoré namerané údaje, už je to tam opravené a uvedené na správnu mieru.

_____________________________________________________

03.11.2023

Asi každý má doma nejakú krabicu s odloženými rozličnými kabelážami - všelijaké USB, RS232, paralelný kábliky a pod. Dnes doobeda som hľadal v krabici jeden konkrétny prepojovací káblik a zaskočila ma halda ošúpanej izolácie z kábla na dne krabice - to tu predtým nikdy nebolo. Po chvíľke hľadania som autora uvedeného javu objavil:

 

Takže takto to dopadne ak sa použijú nevhodné materiály na izoláciu pre USB káblik (živá myš za toto rozhodne nemôže), krabica je trvale uzavretá kvalitným vrchnákom. A krabica nie je umiestnená na slnečnom mieste, takže v tom nemá prsty ani slnko. Našťastie túto jesennú "úpravu" zhadzovania izolácie predviedol iba tento jediný káblik. Kam s ním teraz ? Akurát do koša - kde som ho aj vyfotil. Inak povedané - zase jedno parádne kurvítko v praxi.

_______________

Ďalší poznatok - Igiho zákon o uloženej kabeláži:

"Môžete do veľkej krabice uložiť kabeláž pekne stočenú, pekne kus po kuse - keď to po nejakom čase vytiahnete - je to všetko tak neuveriteľne prepojené a zamotané že Vám začína byť jasné že prechádzajúca robota bola vlastne úplne zbytočná, dopadlo to rovnako ako keby ste to tam len tak nahádzali."

____________________________________________________________

07.11.2023

Nová hra napísaná v jazyku BASIC pre SBC6502:

SBC6502 - 68 - basic programs - "Battleships".

_____________________________________________________

10.11.2023

Konverzia hry Battleships pre SBC6809:

SBC6809 - Basic game: Battleships. Part-10.

_____________________________________________________

11.11.2023

Konverzia hry Battleships pre SBC Micro UK101:

The Micro UK101 - COMPUKIT UK101, basic program - Battleship. Part-7.

_____________________________________________________

15.11.2023

Dnes som sa stal majiteľom ďalšieho kusu programátoru PREPROM-02aLV a k tomu aj nejakých ďalších vecí ktoré som doteraz nevlastnil:

Programátor PREPROM-02aLV. Programmer PREPROM-02aLV. Doplnky. Part5.

_____________________________________________________

25.11.2023

Základná literatúra pre SBC6809:

SBC6809 - CoCo books. Part11.

_____________________________________________________

Vaše hodnotenie, Rate post:

Programátor PREPROM-02aLV. Programmer PREPROM-02aLV. Part4.

By Administrator at November 02, 2023 13:10
Filed Under: Non-Atari

Pozriem sa na základné odbery programátoru PREPROM-02aLV pri programovaní 2 typov starých Eprom pamätí (2716 a 2732A) - ale dnes článok začnem hodne zoširoka, viac ako býva u mňa obvyklé.

 

PREPROM-02aLV a v ňom založená EPROM 2716

 

Už som spomenul že som si chcel postaviť nový napájací zdroj, rozhodol som sa pre taký mix klasiky transformátoru a následného nízkonapäťového DC/DC meniča. Výstupné napätie je tu možné prepínať na tri rozličné hodnoty 5V-12V-15V/DC (3IN_ONE Smile), prepínač ešte nie je celkom doriešený - akosi na prednom paneli nie je dosť miesta, z jeho zadnej strany je na ňom totiž pripojený a umiestneny aj samotný DC/DC menič - toto zásadne ovplyvnilo aj rozloženie výstupných svoriek. Pretože svorky som mal len rovnakej farby tak som použil farebné LED ktoré teraz aj priamo značia polaritu výstupu. Iné riešenie by mi už nedovolilo umiestniť na predný panel sieťový vypínač. Veľkostne som zdroj riešil tak že môže napríklad (mimo iného) trvale napájať trebár aj počítače SBC6502 (12V/DC), SBC6809 (5V/DC) a UK101 (12÷15V/DC) a teda bude k nim aj výzorom "ladiť" - a trebárs aj ešte nejaké ďalšie SBC čo ešte postavím. Tak isto môže reálne poslúžiť pre napájanie dodatočnej doštičky PROM 74188, 74S287, 74S571 pre programátor USBprog (tam treba 15V/DC), čiže tá jeho univerzálnosť použitia pre viacero zariadení sa skutočne oplatí - akurát treba potom vždy myslieť na správnu polaritu výstupného napätia na konektore, pomáha tomu výrazné značenie na použitej kabeláži k príslušnému zariadeniu.

 

Upozornenie:

Zásahy do zariadenia sú na vlastné riziko majiteľa zariadenia. Autor týchto stránok nenesie žiadnu

zodpovednosť za škody spôsobené používaním zariadení postavených podľa tu uverejnených

schém alebo zobrazených úprav.


Všetky veci pre stavbu spomenutého zdroja som mal doma k dispozícii, nekupoval som na jeho stavbu a následné sprevádzkovanie ani jednu jedinú súčiastku, stačila k tomu dostupná domáca súčiastková základňa. Použitý transformátor som pred časom dostal od známeho (bol z nejakého zabezpečovacieho zariadenia, ja som sa dostal len k transformátoru) a teda iba čakal na svoju príležitosť, dočkal sa.


Interné riešenie zdroja 5V-12V-15V/DC

Na trafáku je zaujímavé to že jeho primár je na 240V/AC.


Aha - aby som nezabudol - všetky 3 výstupné napätia v tomto zdroji sa dajú presne nastaviť viacotáčkovými trimrami, takže výstupné napätie nemusí byť iba také aké som uviedol, záleží to od toho aké napätia potrebujeme. Na prednom paneli je urobený otvor ktorým je možné nastaviť základné výstupné napätie 15V, trimer je priamo na základnej doske DC/DC meniča. Pridané trimre (2ks) - trimer vľavo nastavuje 5V, trimer napravo nastavuje 12V výstup, vlastne sa pripájajú paralelne k pôvodnému trimru a dokážu znižovať výsledné výstupné napätie, odvodené teraz od hodnoty 15V. Je tu vidieť aj pridaný chladič na doske DC/DC meniča.


Zdroj je napájaný cez transformátor 240V/AC→20V/AC, takže na napájanie vlastného meniča je po usmernení k dispozícii cca 25÷26V/DC. Doska DC/DC meniča dostala zo zadnej strany malý prídavný chladič lebo pri napájaní uvedeným DC napätím už celkom slušne hriala (na vine je stabilizátor pre LED displej). Na jeho dosku zo zadnej strany prišla tenká nevodivá silikónová podložka s aplikovanou teplovodivou pastou (izolácia je potrebná, inak by mohol nastať skrat na zadnej strane, vedú tam na doske prívody), nasleduje malý chladič zase s ďalšou teplovodivou pastou, na dosku je prichytený pomocou 5min Epoxy (pekne kol dokola), pri lepení bol chladič poriadne pritlačený voči doske meniča. Teplovodivá pasta je teraz zo všetkých strán pekne uzavretá a nehrozí jej vyschnutie, teplota dosky meniča sa v prevádzke skutočne výrazne znížil, teraz je iba mierne vlažný.

 

Síce to tu neveľmi vidno, ale sieťový  vypínač  je voči okoliu krytý priehľadným plastom proti náhodnému dotyku (lepšie vidieť na predchádzajúcom obrázku - bezpečnosť zdroja predovšetkým). Na výstupe DC zdroja napätia do DC/DC meniča je použitá 1.6A poistka. Graetz má na svojom striedavom vstupe paralelne pripojenú kapacitu 10nF (keramika), po usmernení a vyhladení 3 kapacitami ktoré majú spolu cca 2500uF (2x 1000uF/50V + 1x 470uF/35V) nasledujú ešte na DC výstupe paralelne pripojené kapacity 1nF, 10nF a 100nF (M1), všetko keramiky (slúžia pre vf odrušenie zdroja).

 

Ako som už spomenul zdroj ešte nie je celkom hotový (týka sa to už iba časti predného panelu) a nemá na sebe kryt pre displej (červené plexi) a chýbajú popisky pre prepínanie výst. napätia, prepínanie jednotlivých napätí je riešené jumperom, nepredpokladám tu však nejaké zbesilé prepínanie medzi potrebnými výstupnými napätiami takže mi to takto vyhovuje (a aj priestorovo). Je to riešené ako taký univerzálny napájací zdroj a teda mimo iného môžem ním napájať programátor PREPROM-02aLV (PREPROM-02 samozrejme tak isto) a ak treba - aj s jeho prídavnými modulmi. Osobne počítam s možným prúdovým odberom z tohoto zdroja maximálne niekde okolo hodnoty 1.5A, čo podľa mňa postačuje na napájanie pre hodne široky okruh rozličných (možných) pripojených zariadení.

Napájanie programátoru laboratórnym zdrojom akosi považujem za riešenie ísť poľovať na komára slonom, tento zdroj sa dá použiť aj iné veci a pre napájanie programátoru stačí použiť jednoduchý 12÷15V/DC/1A spínaný zdroj - a je po vtákoch, ale keď som zdroj už postavil tak som si povedal - pozri sa tiež na odbery PREPROM-02aLV ... a tiež som bol zvedavý ako bude programátor fungovať aj na deklarovaných 12V/DC - dopredu hovorím že samotné testovanie zbehlo bez najmenších problémov aj pri tejto hodnote.

 

Tak poďme na tie odbery PREPROM-02aLV.

Pri napájaní týmto stabilizovaným zdrojom 15V/DC a tak isto zmerané následne aj pri nastavení na 12V/DC, na testy boli použité Eprom pamäte 2716 (2kB, PGM napätie=25V) a 2732A (4kB, PGM napätie=21V). Zameral som na na tieto 2 typy Eprom pamätí, pretože novšie Eprom programátory už zvyčajne nepodporujú uvedené typy v ich celej šírke (teda nedajú PGM=25V), t.j. nedokážu ich vždy napáliť, zvyčajne "naplno" idú až od typu 2764 a vyššie.

 

Napájanie stabilizovaný zdroj 15V/DC:

- kľudový odber programátoru 0.12A

- pamäť Eprom 2716 (25V/write)

   zápis - 0.32A

  čítanie a verifikácia - 0.15A

___________________________

- pamäť Eprom 2732A (21V/write)

   zápis - 0.30A

- čítanie a verifikácia - 0.15A

 

Napájanie stabilizovaný zdroj 12V/DC:

- kľudový odber programátoru 0.09A

- pamäť Eprom 2716 (25V/write)

  zápis - 0.34A

  čítanie a verifikácia - 0.16A

___________________________

- pamäť Eprom 2732A (21V/write)

  zápis - 0.32A

  čítanie a verifikácia - 0.16A

 

Takže - vidieť že programátor naprosto v pohode funguje aj pri napájaní 12V/DC, akurát si pri práci "cucne" zo zdroja o niečo väčší prúdový odber, hlavne pri programovaní. Vidieť že Eprom 2732 používa novšiu technológiu a teda odber zo zdroja je potom pri programovaní o niečo menší. Odber pri programovaní EPROM nie je nijako hrozivý, takže na základné veci pre programátor naprosto postačuje aj zdroj 12V/DC/1A, ale ak máme na programátor pripojené aj prídavné moduly - tak radšej použite napájanie zdrojom 15V/DC/1A, nepôjdeme tak určite na "doraz" schopností zdroja dodať požadovaný prúd pre zariadenie, mať poruke rezervu je vždy dobré.

 

Zapojenie tu uvedeného zdroja slúži len pre inšpiráciu, nie je návodom na stavbu, dnes si spústa (= absolútna väčšina) ľudí radšej priamo hotový jednoúčelový zdroj kúpi (alebo ho má doma k dispozícii už dávno) a ďalej to nerieši, toto je skôr pre tých ktorí radi bastlia a majú dobrý pocit z toho že si postavia niečo sami a potom po zhotovení to funguje presne podľa ich predstáv.

_____________________________________________________________

12.11.2023

Možností napájania je skutočne viacero - samozrejme existuje aj jednoduchšie riešenie kedy nemusíme stavať celý nový zdroj, existuje aj možnosť kedy netreba do použitého kúpeného zdroja robiť žiaden zásah - stačí si vyrobiť tzv. konverznú prepojku ktorá nám "vyrobí" opačnú polaritu pre programátory Elnec.  Je dobré si ju potom výrazne označiť aby bolo jasné na aký účel má slúžiť. Nevýhodou takýchto univerzálnych riešení je to že sa po čase môžeme pozabudnúť - a malér je na svete. Síce si nezničíme programátor od fy. ELNEC, tie sú dobre chránené (majú v sérii zapojenú diódu, čiže opačná polarita na vstupe im neublíži, akurát nebudú fungovať) ale ak to pripojíme ako zdroj napájania na zariadenie ktorému tým dodáme opačnú polaritu ... - no, mýliť sa síce je ľudské - ale poväčšine je to potom aj drahá záležitosť.

 

Na druhú stranu - takýto zdroj bez konverznej prepojky môžeme naďalej využívať na pôvodný účel pretože bez "invertorového medzikusu" dodáva naďalej na svojom výstupe potrebné napätie a aj potrebnú polaritu pre napájanie iných zariadení.

 

Trebárs takto môže vyzerať vyrobená konverzná prepojka pre zmenu polarity na svojom

výstupe - "medzikus" /polarity changer adapter/ pre zmenu polarity na svojom výstupe.


Vľavo invertovaný výstup 15V - pól je na strednom kolíku, vpravo je vstup 15V, + pól v strede. 15V/DC spínané zdroje používajú konektor, ktorý má stredový kolík o niečo väčší, teda protiľahlý kus má v sebe kolík o väčšom priemere ako pri zdrojoch 12V/DC. Toto zabezpečuje "nevýmennosť" pripojenia zdrojov do takejto invertorovej predlžovačky.

Poznámka:

Len tak mimochodom - je to rozmer konektoru ktorý presne "pasuje" do disketovej jednotky Atari 1050 - len pozor, tam treba dodávať do jednotky striedavé napätie a to 9V/AC/3A, takže táto informácia sa hodí iba ako zdroj získania potrebného konektoru, ale to som už hodne odbočil od obsahu a zamerania tohoto článku. 


Takto vyzerá spodná strana napäťového invertoru,  výstup vpravo. Celé je to zapojené na kúsku univerzálnej doštičky kde je to vzájomne pospájkované - tu sa mení polarita zdroja na výstupe, následne je to potom pokryté teplom zmrštiteľnou bužírkou, tá to potom zároveň izoluje voči okoliu. Výstup z inventoru sa potom zapojí priamo do programátoru PREPROM-02 alebo PREPROM-02aLV, dobre poslúži pre obidva typy.


Na napájanie je použitý neupravovaný zdroj 15V/DC/1A. Jasne vidieť

že takýto spínaný napájací zdroj je naozaj malý.

 

Stále platí - tak ako vždy - jednoúčelové zdroje na jednu vec sú proste najlepšie, i keď potom občas márne pátrame kde ten konkrétny potrebný zdroj, potvora, je niekde (zase ...) naozaj dobre založený (a odložený). Ak veci skladujeme pekne spolu, pohromade (t.j. navzájom), alebo to máme na stole trvale zostavené = zvyčajne je to najlepšia cesta k tomu že nič po poskladaní a následnom zapnutí zariadenia nepohnojíme a tiež nestrávime doobedie (alebo poobedie) hrešením a márnym hľadaním niečoho čo ste pred časom niekde videli ale za toho anciáša neviete kde to bolo a kedy - strýčkovi Alzheimerovi jednoducho netreba robiť radosť.

Smile

Predviedol som tu v článkoch niekoľko možných spôsobov nasadenia rozličných zdrojov napájania pre tento programátor - takže konečné rozhodnutie aký zdroj nakoniec  použijete na takýto účel je len a len na Vás.

_____________________________________________________________

Vaše hodnotenie, Rate post:

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: