"Crash Course in Programming" Denna genomgång har fokus på programmering. Den följer PBasic-syntaxen för Basic Stamp II, men är i övrigt i stort sett frikopplad från BS2. Vissa aspekter som tas upp följer allmänna seder för programmering. Vissa styrs av språkets syntax. Nyckelperspektiv: Håll kontroll! Dela upp i block (a) funktionsblock som upprepas mer än 1 gång (b) funktionsblock som bildar en lämplig enhet. Under utvecklingen, lägg in signaler (gödsla tex med debug-rader) för att (a) kunna följa programflödet (b) kunna kontrollera om variabler ändrar värde på det sätt du vill. Kontrollera att variabler är tillräckligt stora - men inte större än nödvändigt. Programstruktur Kommentarhuvud Deklarationer Konstanter Variabler Huvudprogram Initieringar Huvudslinga, som anropar subrutiner Subrutiner - 2 slag Beskriver programmet som helhet (förutsättningar, allmän funktion, mm.) KonstantNamn con Värde Ger namn åt fasta numeriska värden. VariabelNamn var Storlek Ger namn åt utrymme i [RAM]minnet. Namnet fungerar som en pekare till ett utrymme i RAM. Mer än ett namn kan peka på ett och samma utrymme. Både KonstantNamn och VariabelNamn hittar i regel programmeraren på. Fast vissa variabelnamn finns fördeklarerade. I regel konstruerar man ett huvud program så att det mynnar ut i en ändlös slinga. Om inte, ska huvudprogrammet sluta med nyckelordet end. Annars fortsätter programflödet in i subrutinerna och kan trassla bort sej, med oväntade effekter som resultat. Som anropas med gosub. Ska avslutas med return. Som anropas från en if-sats. Ska avlsutas genom att rikta flödet med goto till lämplig plats i programmet. Gott och blandat Kommentarer ' (eller :) Talformat % binärt $ hexadecimalt inget prefix decimalt PBasic(BS2) arbetar enbart med heltal, och kan alltså inte hantera flyttal. Men man kan trixa för att nästan jobba med flyttal. (Se särskilt blad "Matematik med BS2".) Etiketter Ger namn åt adresser i programflödet. Markerar platser i programmet.
Datatyper 4 st (antal bitat inom parentes): bit (1) nib (4 = nibble) byte (8) word (16) Variabelmodifierare (utrett tidigare på annan plats). Kommandon (urval) Datahantering DEBUG /DATA, READ, WRITE Flödeskontroll GOSUB, RETURN GOTO IF THEN /BRANCH FOR, NEXT PAUSE END, /NAP, SLEEP Digital I/O INPUT, OUTPUT REVERSE HIGH, LOW TOGGLE PULSOUT PULSIN /COUNT /SHIFTIN, SHIFTOUT Tabeller LOOKUP, LOOKDOWN
Operatorer (urval) Finns 6 st "unary" (tar bara 1 operand) och 16 st "binary" (tar 2 operander) Kan också delas in i Matematiska + - * / 4 vanliga räknesätten. Fyra restriktioner gäller: 1. Enbart heltalsmatte. 2. Kommandon och operatorer har stöd för max 16-bitsvärden. BS2 kapar [övre änden] på större tal. 3. Finns inte stöd för negativa tal, men man kan själv arbeta med dem m.h.a. tex 2-komplementsrepresentation. 4. BS2 processar matematiska uttryck från vänster till utan att följa vedertagna regler för prioritering. M.h.a. parenteser kan man dock "toppstyra" detta. ** Ger övre 16 bitarna från ett 32bitars multiplikationsresultat. */ Multiplikation med ett 16bitars "bråktal". Övre byten representerar heltalet. Nedre byten representerar antal 1/256:ondelar. // Ger rest vid heltalsdivision. >> << Skifta ett steg vänster resp höger. ABS DIG Ger absolutbeloppet av ett tal ("tar bort minustecknet"). Ger decimalsiffra i ett tal sett som decimaltal. Logiska & ^ Bitvis logisk AND, OR, EXOR. &/ / ^/ Bitvis logisk NAND, NOR, EXNOR. REV Byter bittecken.
Exempel ' PBasicprogram HUR-DET-KAN-VARA ' Fil: HDKVara.bs2 ' hj 000302 ' Program för att exemplifiera programstruktur och urval av ' konstruktioner och kommandon. ' Deklarationer: Konstanter Stina con 17 'Namnet Stina betyder 17 Lage con Stina+3 'Namnet Lage betyder 20 (=17+3) Lisa con 205 ' Deklarationer: Variabler Ester var byte 'Namnet Ester betyder adressen till ett byte-stort ' utrymme som har reserverats i RAM. Edvard var Ester 'Edvard pekar på samma ställe som Ester. Evald var nib '4-bits reserverat. snurra var word '16-bits (kan användas som 65536-räknare). ' Huvudprogram: Initieringar (här minimalt...) dirh = %01010101 'Varannan pinne i I/O-blocket P15-P8 'görs till utgång och varannan till ingång. ' Huvudprogram: Utmynnande i huvudslinga stommen: 'Etikett Evald = 5 'Variabeln Evald tilldelas värdet 5. Ester.lownib = Evald 'Nu har oxå Ester värdet 5. gosub avstick 'Iväg till en subrutin. if in11 = 1 then avsteg 'Inbenet 12 kollas. 5V -> utvikning. tillbaka: goto stommen ' Subrutiner: Regelrätta subrutiner (gosub) avstick: for snurra = 1 to 5 '5 varv. Evald = Evald - 1 next for snurra = Edvard to Lisa step 50 'Oxå 5 varv. Edvard = Edvard * 2 debug dec Ester," ",hex2 Edvard," ",bin8 Ester," ",asc? Edvard,cr 'Häftig utskrift på PC-skärmen. next return 'Återvändo till anropspunkten lixom. ' Subrutiner: Villkorsgrenar (if then) avsteg:
Ester = Ester + Evald debug? Evald goto tillbaka