Viser innlegg med etiketten Basic. Vis alle innlegg
Viser innlegg med etiketten Basic. Vis alle innlegg

torsdag 28. desember 2017

Machines with Software eXchangeability (SVI-738)

En gang i tiden var hjemmemarkedet for datamaskiner splittet, spennende og fylt med en hel haug med interessante løsninger man siden ikke har sett makan til. Vi hadde vår Commodore 64. britene hadde deres ZX Spectrum og amerikanerne snakker vi ikke stort om siden de foretrakk å spille på konsoller istedenfor. Alle av løsningene vidt forskjellig, ingenting av tilleggsutstyret ditt ville passe til noe annet og i alle fall ville ikke programvaren fungere - for det var de alle altfor forskjellig. På starten av 80-tallet kunne det hende at du fant en plugg som passet til noe annet, men altfor mange forsøk endte i gnister, røyk og tårer.

I dag har vi mange standarder, mer eller mindre definert av de som er igjen mens på den tiden hadde alle sin egen standard som man helst ikke skulle fortelle noen om. Lederen for Microsoft Japan, Kazuhiko Nishi, var tilfeldigvis også med i et forsøk på standardisering av tegnsett, ASCII. Han var dermed tilbøyelig for å standardisere ting på en offentlig og tilgjengelig måte, med andre ord egenskaper Microsoft skulle bruke nesten 30 år på å gjenoppdage som noe nytt og hipt! I 1983 lanserte Microsoft MSX-standarden, et av tidenes første forsøk på å standardisere en arkitektur for hjemmedatamaskiner - målet var mange produsenter av datamaskiner og tilleggsutstyr der alt dette kunne brukes sammen, men utover lignende porter og hardware så skulle programvaren også kunne brukes på alle av dem.

Var så heldig å komme over en Spectravideo 738 X'Press som så etter et nytt hjem, vel teknisk sett så ble den en del av totalprisen da jeg kjøpte min Commodore 128. Har en følelse av at jeg fikk den for en god pris så ikke selgeren skulle få for dårlig samvittighet for å blakke meg totalt, eventuelt så var han bare glad for å se den gå til noen som ville sette pris på den! Av alle MSX-maskiner av den første generasjonen så må dette sies å være en av de mest eksklusive, den har selvsagt MSX-Basic, MSX-DOS og MSX CP/M 2.2 inkludert i pakken, men det kule er at den kom med en egen eksklusiv bæreveske med plass til alt.


Et av de bedre forsøkene jeg har sett på å lage en tidlig bærbar maskin, selve maskinen har til og med et bærehåndtak i bakkant som i vesken beskytter portene i bakkant - under bruk foldes den under maskinen for å løfte den opp fra bakkanten. Strengt tatt har den ikke noe batteri eller skjerm så helt bærbar etter dagens standard var den ikke, men alle hadde vel en TV så det ordnet seg.

Maskinen jeg kjøpte kom komplett i original eske inkludert alt av manualer samt en ekstra bok på norsk, to spill på cartridge som sikkert var verdt mer enn totalprisen samt en hel haug med disketter. Har aldri følt meg så bortskjemt heldig som da jeg åpnet denne pakken. Knightmare er til og med noe så sjeldent som et vertikalt scrollende skytespill jeg har likt, til tiden å være har det god grafikk og for MSX å være ganske rå musikk!


Den bruker de samme typene disketter som en Amiga, det vil si DD-disketter (720KB, maskinen formaterte dem med 360KB kapasitet) fremfor dagens HD (1.44MB) varianter selv om de i standardiseringens ånd har valgt å bruke vanlige diskettstasjoner av den typen man også fant i de senere PC XT/AT datamaskinene så jeg aner et håp om å få sneket inn en Gotek en plass der. På den andre siden så liker jeg den fysiske diskettstasjonen som står i den nå, jeg hadde i forkant lest om at de lagde mye lyd under bruk og jeg vil si at det var en kraftig underdrivelse! Første gangen jeg hørte den i bruk trodde jeg den var i ferd med å slite seg selv i fillebiter, litt som en femåring som har oppdaget en blikkboks fylt med spiker eller noe i den dur. Definitivt en del av sjarmen!

Ved lansering i Norge i 1985 så hadde den en utsalgspris på 5900 kroner, så dette var definitivt en maskin for folk med litt mer penger for hånden. Sammenlignet med ZX Spectrum så kunne du kjøpe en slik til alle kompisene dine og fortsatt ha et par i reserve, eventuelt en Commodore 64 til deg selv og et par til dine to beste venner. Med andre ord ikke det billigste av løsninger, men til gjengjeld så var dette så profesjonelt som du fikk det på hjemmemarkedet uten å måtte velge mellom datamaskin og hus.

Med tanke på hvor forseggjort maskinen var så er det synd at disse aldri ble en stor suksess, men dette var årene da alt skjedde. I løpet av sitt første leveår så opplevde den å se lanseringen av Atari ST samt ryktene og etterhvert lanseringen av Commodore Amiga så det er mulig denne kom litt for sent, den ble det beste av 8-bit teknologi i en tid da alle ville ha 16-bit. Det hjalp heller ikke at Microsoft selv droppet all støtte for plattformen etterhvert som at de innså at IBM PC-klonene etterhvert kom til å bli tilgjengelig for hjemmemarkedet, men som så mye annet så ble det en god tanke, halvveis gjennomført!



onsdag 27. september 2017

Commodore 64G

Hadde ikke tenkt å kjøpe meg en Commodore 64 til, det vil med andre ord si at jeg allerede hadde en av dem - en 64C trygt lagret i barndomshjemmet mitt. I utgangspunktet ville jeg kun vurdert innkjøp av en av de originale modellene, de som jeg kjenner som de "stygge" Commodore-maskinene, men så hadde jeg aldri hørt om G-versjonen før jeg fikk tilbud om å kjøpe maskinen for en håndterbar mengde småpenger.

Dette er visstnok den siste modellen laget i 64-serien, og selv om de hadde sin største utbredelse i Tyskland etter utgivelsen rundt 1988 så var de i salg på de fleste markedene med liten forventning om at folk flest skulle ha råd til en Amiga 500. Når det kommer til maskinvaren, utover å være en penere utgave av den originale C64-maskinen, så var den mer eller mindre konstruert av hva enn Commodore hadde igjen på lagrene rundt omkring i verden og innmaten var dermed noe tilfeldig. Personlig, så vil jeg anta at de gikk tilbake til det opprinnelige designet på maskinen for å unngå at nye Amiga 500 og de eldre 64C skulle kunne forveksles.



Sammen med maskinen fikk jeg en strømforsyning samt en joystick som er så gammel at jeg ikke en gang har sett en av disse før, det eneste den var merket med var Joystick - muligens originalt tilbehør. Selgeren spurte hvorvidt jeg ville ha med en uoriginal diskettstasjon og en bunke kassetter, men pussig nok så var dette en vanlig kassettspiller uten mulighet for tilkobling til en Commodore - kassettene var rundt 20 blanke kassetter. Nettverkskortet fra Compaq og Xbox 360-spillene vist ovenfor til høyre var også oppi esken, tror noen ryddet halve boden nedi en eske og solgte den til meg!

Når det kommer til strømforsyninger så er de relativt skumle greier, og her mener jeg selvsagt utover hele den greie med å eksplodere og spy flammer utover hele stua... Mulig den delen var noe jeg drømte, mener at de som regel døde med et poff og så gikk sikringen. Den skumle delen er at maskinen i seg selv mangler sikring på 5 volt linjen, så når strømforsyningen feiler så gjør den vanligvis det ved å gradvis øke spenningen inntil RAM, SID-brikke og annet ekstremt dyre komponenter smelter eventuelt tar opp kjederøyking som hobby. Visstnok er de svarte strømforsyningene garantert å ha feilet gitt alderen, den jeg har er en Dan Vee og i likhet med de fra andre leverandører så er disse per definisjon i faresonen.

Det er lite man kan gjøre med selve strømforsyningene når de feiler, de er fylt med lim og med mindre man har noe magisk kjemikalie til hjelp og altfor mye tid for hånden så er det ikke mye å gjøre utover å klippe av ledningene og hive resten. Selve strømforsyningene er alltid på så lenge kontakten står i veggen, så man kan måle 5 volt linjen uten å koble på en maskin (heldigvis) - det vil si bruk av multimeter (Jippi!) mellom pin 2 og 5 (merk at nummereringen ikke er basert på fornuft, så sjekk pinout). Min målte 5.21v uten belastning og i henhold til denne oversikten så er den definitivt i faresonen, men ikke groteskt uansvarlig i bruk så langt. Med andre ord, så turte jeg å koble den til maskinen for å se hva som skjedde.


Som man kan se av bildene ovenfor så fungerte den. Det faktumet at lyset på maskinen er grønt får maskinen til å minne om en forskremt katt i høstmørket vi er på full fart inn i, men uten å forskuttere tankegang så var grønne LED-lys relativt nye på markedet og man var ikke lenger begrenset til de røde (fremgang?). I og med at jeg har hverken har en tilgjengelig diskettstasjon eller kassettspiller, så må man nesten gjøre noe smart for å få testet at lyden fungerer. Med andre ord; skrive noe i Basic som lager bråk:
10 POKE 54296, 15
20 POKE 54296, 0
30 GOTO 10
run
Den lager en svak summelyd, så da kan man kun anta at maskinen fungerer - i alle fall inntil man får tak i utstyret man eventuelt måtte trenge for å gjøre dette på en skikkelig måte.

lørdag 13. mai 2017

RC2014 Bruk av Compact Flash

Dette er et innlegg relatert til RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne egenutviklede modulen. Har laget en egen Compact Flash modul basert på ATA-standarden, det vil si bruk av kortet som en IDE-enhet - les innlegget RC2014 IDE Compact Flash for detaljer om maskinvaren. Dette innlegget håndterer programvaresiden.

Compact Flash (CF)

Modulen benytter seg av en 74HCT138N-brikke for håndtering av adresseringen, dette gjøres på samme måte som på Grant Searle sitt design samt slik det gjøres på den tilsvarende offisielle RC2014-modulen - holder disse detaljene identisk for å på sikt kunne bruke den samme programvaren uten endringer. Modulen som jeg laget vil dermed ikke skille seg fra de offisielle, informasjonen nevnt her vil med andre ord være generell og ikke spesifikk for min modul.

Binær adresse (x = don't care)
x001 0???

Som ved tidligere IO-moduler så betyr don't care at man ikke tar stilling til verdiene, men det betyr ikke at man unngår kollisjoner dersom andre enheter benytter adresser som overlapper - typisk vil dette si at modulene vil gjentas flere ganger i adresserommet for hver av kombinasjonene, i dette tilfellet på adressen $10 (16) og $90 (144).

Helt spesifikt så må A6 være lav for å aktivere 74HCT138N, selve adapteren er koblet til Y2 på denne og avgjør dermed at A5, A4 og A3 må være L H L. De resterende bit-ene benyttes for å angi registrene benyttet for å snakke med den ATA-baserte enheten.

Registre

Med adressen $10 som utgangspunkt har man følgende relevante registre tilgjengelig på enheten:

AdresseBeskrivelse
HEXDECRegisterMerknad
$1016DataData ut (les) / Data ut (skriv)
$1117Error / FeatureFeilmelding (les) / Funksjon (skriv)
$1218Sector countAntall sektorer
$1319LBA 0LBA Adresse (A0 - A7)
$1420LBA 1LBA Adresse (A8 - A15)
$1521LBA 2LBA Adresse (A16 - A23)
$1622LBA 3LBA Adresse (A24 - A27), angi enhet
$1723Status / CommandStatus (les) / Utfør kommando (skriv)

Antallet sektorer angir hvor mange sektorer man skal håndtere innenfor en enkelt lese/skrive- operasjon, minste antallet er 1 og hver sektor er 512 byte (man må håndtere hele blokken). Sektorer angis sekvensielt ved bruk av en 28-bit adresse, disse angis gjennom LBA 0 - 3. LBA 0 - 2 de første 24 bit-ene av adressen, LBA 3 inkluderer de siste 4 bit-ene i den 28-bit sektor-adressen samt at man også her angir hvilken enhet som skal adresseres (Master / Slave) - for å holde ting enkelt bruker vi her bare E0 for å lese/skrive til Master.

For å arbeide med enheten vil man kort sagt skrive til et eller flere registre, deretter sende en kommando via kommando-registeret for å få den til å utføre den. Underveis må man sjekke status-registeret for å vite hvorvidt enheten fungerer som forventet, eventuelt er klar til å motta videre kommandoer - svaret vil være en enkel byte der hver bit har følgende betydning:
765x 3xx0 - Bit (x = don't care)
1         - Busy, enheten er opptatt
 1        - Ready, enheten er klar til å motta kommando
  1       - Write Fault, skrivefeil oppstått
     1    - Data request ready, data tilgjengelig for utlesing
        1 - Command error, forrige kommando feilet

Lese data

For å benytte seg av CF-kortet må man i praksis først initialisere kortet, det vil si å sette opp de innstillingene vi trenger for å arbeide med kortet i 8-bit modus (legg merke til CF er den eneste gjenlevende maskinvaren som støtter dette, moderne harddisker gjør ikke det). Deretter skriver man en 28-bit adresse til LBA adresse-registrene, sender kommando for å gjøre data tilgjengelig for lesning og til sist må vi lese ut hele sektoren.

Det meste av programvaren jeg har sett for Z80-baserte maskiner har vært implementert i Assembly, men har for tiden ikke noen løsning for å overføre kompilert programvare til maskinen så valgte å implementere rutinene i Basic isteden.

10 print "Set CF 8-bit mode"
15 OUT 17, 1
16 OUT 23, 239

20 PRINT "Disable write cache"
25 OUT 17, 130  
26 OUT 23, 239

30 PRINT "Set sector count = 0"
35 OUT 18, 1

40 PRINT "Set address = 0"
41 OUT 19, 0
42 OUT 20, 0
43 OUT 21, 0
44 OUT 22, 224
45 OUT 23, 32

50 PRINT "Read first sector:"
55 FOR I=0 TO 511 STEP 8
60 PRINT I;":";
65 FOR B=0 TO 7
70 PRINT INP(16);
75 NEXT B
80 PRINT
85 NEXT I

Dersom man får feilmeldinger, eller at ting ikke fungerer som forventet så kan man lese ut statusen fra registeret på $17. Strengt tatt bør man sjekke statusen mellom hver av kommandoene som utføres, dette for å være sikker på at CF-kortet er klart før man fortsetter - dette har jeg hoppet over her ettersom Basic i seg selv er såpass tregt at man ikke trenger dette, men skriver man tilsvarende Assembly-kode så må man gjøre dette.

For å verifisere at det man får lest ut er korrekt, så kan man åpne kortet i en Hex editor med støtte for dette (eksempelvis WinHex) - på mitt kort gir denne visningen under (til venstre). Gitt at ingenting ryker eller lukter brent elektronikk så vil man ved bruk av skriptet ovenfor få en utskrift slik den vist under til høyre.

  

Legg merke til at en Hex-editor viser, som navnet antyder alt av data i Hex mens skriptet jeg har lagt inn viser utskrift i desimal - for å sammenligne data må man oversette mellom tallsystemene, den vanlige kalkulatoren i Windows vil kunne gjøre dette. Får man det samme resultatet på begge sider, så vet man at kortet fungerer som forventet - i det minste under optimale forhold!

fredag 12. mai 2017

RC2014 Basic

RC2014 er datamaskin jeg har brukt en del på å bygge og studere virkningsmåten til den siste tiden, for mer informasjon om maskinen i seg selv se introduksjon. Basic var det de fleste av oss utover 70 og 80 tallet kjente som operativsystemet på maskinene, men i realiteten så var det egentlig et programmeringsspråk for hvordan man arbeider med maskinen.

Basic

Den etter hvert mest kjente versjonen av Basic er utvilsomt Microsoft Basic i og med at denne på det tidspunktet var en av de mer rimeligere av alternativene - til og med Apple 1 og 2 kjørte MS Basic!

Basic kan ikke sies å være en oppfinnelse fra fra Microsoft sin side, Bill Gates selv implementerte implementerte en egen versjon av rutinene i henhold til spesifikasjonene utviklet ved universitetet Dartmouth på slutten av 60-tallet - for den langt mer komplette historien se denne artikkelen. MS utgaven fokuserte på hjemmedatamaskinene som ble tilgjengelig fra slutten av 70-tallet mens den opprinnelige utgaven opptil da hadde fokusert på stordatamaskinen.

Til tross for at det hele virker noe arkaisk og til tider vanskelig å forstå, så var utgangspunktet for systemet et ønske om å lage et system som alle skulle være i stand til å skrive og forstå uten en doktorgrad innenfor relevante fag. Her må man huske på at sammenligningen da var sett opp mot systemer der man lastet inn data ved å flippe brytere og lese av svar i form av opplyste serier av lyspærer, innlesing av data via hullkort og utskrift på papir var fortsatt relativt moderne.

Basic la opp til å skrive inn operasjoner ved bruk av tastatur og så å kunne få resultatene direkte ut på skjermen, langt mer brukervennlig og manualen på noen få sider fulgte med datamaskinen. Mitt første møte med MS Basic var via Commodore 64-maskinen jeg hadde som liten, og den fikk jeg til å gjøre enkle ting selv om jeg fortsatt var for ung til å starte på skolen.

NASCOM Basic v4.7

NASCOM versjonen er en porting av MS Basic for bruk på Z80-baserte datamaskiner slik som RC2014-maskinen jeg har, noe som vil si at brøkdelen av et sekund etter å ha slått på maskinen så kan man begynne å bruke den. Skjermbildet nedenfor viser oppstarten av systemet samt et eksempel der man bruker PRINT-kommandoen for å skrive ut en tekst på skjermen.


I utgangspunktet litt fryktinngytende for selv dagens ferske IT-teknikere i og med at alt er tekstbasert, men det er tross alt ikke den svarte magien man husker fra tiden da jeg fortsatt ikke hadde lært bokstavene. Den komplette manualen til NASCOM Basic var tross alt kun på 31 sider, inkludert introduksjon, innholdsfortegnelse og forside - den er til og med tilgjengelig på Internett.

Praktisk eksempel

Det er egentlig ikke spesielt interessant å skrive ting ut til skjermen, så et mer praktisk anvendelig eksempel er gjengitt nedenfor. Dette skriptet skriver ut innholdet av de 88 første minneadressene, og var noe jeg laget for å lese ut den første delen av ROM på maskinen.

10 FOR I=0 TO 10
20 PRINT I*8;":";
30 FOR B=0 TO 7
40 PRINT PEEK(I*8+B);
50 NEXT B
60 PRINT
70 NEXT I
Hver av linjene skrives inn som skrevet, numrene foran angir rekkefølgen disse skal utføres i og vil lagre dem uten å kjøre disse direkte. Systemene hadde ikke noen editor i tradisjonell forstand, derfor var det lurt å legge inn hopp i numrene slik at man kunne angi noe mellom linjene - benytt samme nummer for å korrigere linje.

Kommandoen list lister ut programmet slik det er skrevet inn så langt, er man fornøyd så kan man kjøre det ved bruk av kommandoen run.