______________________________________________________________________________ ...................................................................2222222.... ................................................................22222222220... ..............................................2202222222222..22000............ ..................................22000.....20222222222200000200002........... .................................2002202...2222200222.220000000200000000022... ....................220002......22222200..2200002.......2200000...20000000000. ....................22222202....2220000022200000..........200002........200000 .....200000.........2222200000222200220000000002..........200002........20000. .....00222202........2220022000000002200002000002........2000002000020000000.. ....2222200000.......220002200000002.2000000000000222222000000..2000000002.... ....220000200002......20000..200002..220000200000000000000002.......22........ ...2220002.2200002....220002...22.....200002..0000000000002................... ...220000..222000002...20000..........200000......2222........................ ...000000000000000000..200000..........00002.................................. ..220000000022020000002.200002.........22.......______________________________ ..0000002........2000000220022.................| .200000............2002........................| AMOSPro SLN extension v2.0 .200002........................................| af Søren Nielsen 220002.........................................|______________________________ ------------------------------------------------------------------------------ Sln extension v2.0 af Søren Nielsen dokumentation Indledning ---------- Er det ikke irriterende, når Amos Pro har alt, undtagen lige netop nogle små simple kommandoer som man skal bruge, for at gøre sit program bare nogen lunde hurtigt? Jeg er selv i gang med et strategi spil a la empire, warlords m.fl. Der gik ikke lang tid før jeg opdagede at Amos manglede nogle helt elementære funk- tioner, som jeg kender fra bla. C og pascal. Nar man laver et array vil Amos kun reservere 4 bytes til hvert tal, således at der kan bruges tal imellem ±2147483648. Men jeg skulle "kun" bruge et array på 100*100 med tal imellem 0 og 120, og burde derfor kunne reservere arrays med kun en byte til hvert tal, og derfor spare ca. 30k i hukommelse. Som alle sikkert har gættet er dette en Amos Pro extension, som gerne skulle løse dette problem, samt en hel del andre. Alle kommandoer starter med "s", for at undgå et 'crash' med andre kommando- er, og for at man kan se hvilken extension de kommer fra. Jeg har forsøgt at gøre de fleste kommandoer så korte som muligt, ved at forkorte dem noget ned, f.eks. "S Ainit" istedet for "S Array Initialize" Der skulle gerne være et par programeksempler til nogle af koommandoerne et sted... de skulle gerne lette forståelsen lidt. Dette er sikkert ikke den sidste version af sln extension, og jeg vil derfor gerne have nogle ideer til nye kommandoer. Jeg vil være meget glad for hvis der fulgte programeksempler med forslagene, især i assembler. Hvis jeg har tid, lyst, evner osv. vil nye kommandoer hurtigt se dagens lys. Jeg har selv en del ideer i øjeblikket, bla. nogle flere sample kommandoer og en serie fil-kommandoer. Jeg er dog noget i tvivl med fil-kommandoerne, da de findes i flere andre extensions (Ldos & Craft), og det er derfor ikke sikkert, at de bliver til noget. Installering ------------ Kopier filen "AMOSPro_Sln.lib" hen i dit APSystem direktory, og skriv navnet i extenison listen på plads nr. 24 Source koden skulle gerne være at finde sammen med resten af filerne. Det betyder at du kan ændre extension nummeret, hvis nr. 24 allerede er brugt. Du skal bare have en assambler, hente source koden ind i den, og finde følgende linie: ExtNb equ 24-1 ;Extension number -1 Ændr nummeret så det passer til dine behov, assambel programmet, gem ob- jekt koden som "AMOSPro_Sln.lib" (eller hvad du nu har lyst til) og rette configurationen så den passer. Læg dog mærke til at du sandsynligvis bliv- er nød til at ændre nogle assambler options for at få det til at virke. (Slå "Auto Alloc" fra, eller slå "Ensure PC-relative code" til). Registrering ------------ Eftersom Sln extension fra og med version 2.0 er blevet shareware, BØR man lade sig registrere for at støtte den fremtidig udvikling. Shareware beløb- et er sat til 30 kr (mere accepteres), så ALLE burde kunne være med. Hvis du sender en diskette+returporto med (eller en 10'er ekstra), sender jeg den næste version af Sln extension, så snart den er færdig. Hvis du sender penge i et brev, så husk at skjule dem bag nogle stykker pa- pir, og sørg for at mønter ikke klirer. Ellers kan man ikke være sikker på om brevet når uåbnet frem. Sammen med Sln extension, skulle du gerne finde filen "Sln_Registrering", som er en ascii-tekst, jeg meget gerne vil have udfyldt af alle, der regi- streres. Skriv den af, print den ud, send den på diskette - jeg er ligeglad hvordan. Jeg stiller ingen krav om at man skal registrerer efter "2 ugers brug" eller lignende, og Sln extension har ingen specielle begrænsninger for dem, der ik- ke er registrerede. Iøvrigt vil jeg meget gerne se alle de sensationelle programmer i laver, så derfor er i velkomne til at sende lidt source med, når i registrerer. Fejl & Problemer ---------------- Jeg hader allerede dette afsnit, men det er sikkert meget godt at have med alligevel. -Siden version 1.0 af SLN extension er tokenlisten blevet ændret en smule ved et uheld. Helt konkret betyder det at amos ikke er i stand til at genkende visse af kommandoerne fra v1.0, når du installerer v2.0. Så derfor: Hvis du bruger "S Volume","S Iconify" og ALLE sample kommandoer- ne, er du nød til at gemme programmet som ascii, og hente det ind igen når v2.0 installeret. Husk at gemme alle residente banker særskilt, de vil naturligvis ikke blive gemt sammen med ascii filen. -S Mouse Key funktionen tester ikke højre muse knap -Amos crasher hvis "Track Play" kommandoen bruges, når Sln extension er installeret. Der er to måder at undgå dette problem på: Enten bruger du de player kommandoer sln extension byder på, eller du LOADER det modul du vil spille under programmet, altså ingen permanente banker med tracker moduler. Jeg forstår ærlig talt ikke denne fejl, den er dybt mystisk... Kommandobeskrivelse ------------------- -S Mouse On Starter et interrupt, som aflæser en mus i port 2. Da det kører som et interrupt, på lige fod med AMAL og interface, generer det ikke resten af AMOS synderligt. Der vil naturligvis være en hastighedsnedsættelse, men den er så lille at jeg endnu ikke har lagt mærke til den overhovedet. -S Mouse Off Slår interrupt aflæsningen af en mus i port 2 fra. -=S X Mouse -S X Mouse= X position Sætter/aflæser x koordinaten for mus 2. Koordinaten vil løbende blive opdateret hvis musen er slået til (S Mouse On). -=S Y Mouse -S Y Mouse= Y position Som "S X Mouse" bortset fra at det er y koordinaten. -=S Mouse Button Virker næsten som "Mouse Key" i Amos, bortset fra at højre museknap IKKE bliver aflæst. (Jeg aner ikke hvordan man gør, ved andre det?.) Funktionen returnerer ganske simpelt 1 hvis venstre knap er trykket ned, ellers 0. -S Ainit nr,celle størrelse,x,y,z -S Ainit nr,adresse/bank,celle størelse,x,y,z Initialiserer et array med op til 3 dimensioner. Nr er array nummeret der er et nummer imellem 0-7, som alle array kommandoer senere refererer til. Celle størrelse er enten 1,2 eller 4 afhængig af hvor mange bytes, der skal være til hvert tal. 1 byte=tal imellem 0-255, 2 bytes=tal imellem ±32768 og endelig 4 bytes der kan indeholde tal imellem ±2.147.483.648. X, Y og Z er størrelsen af array'et i de forskellige dimensioner. Hvis der kun ønskes et 1 dimensionelt array skal y sættes til -1, og tilsvarende skal Z være lig med -1 for 2 dimensionelle arrays. Læg mærke til at hvis f.eks. x sættes til 5 (og y til -1), så er der reserve- ret 6 lagerceller af den ønskede størrelse, og ikke 5 som man måske skulle tro (0 tæller også). Dette er præcist det samme som med den normale Dim kom- mando. Den første udgave af kommandoen reserverer selv lagerplads, og frigører den igen når array'et slettes. Anden udgave opretter array'et på en bestemt adresse, uden at ændre noget i hukommelsen, dvs. at du selv skal reservere hukommelsen. Når array'et igen slettes vil hukommelsen ikke blive frigivet automatisk. Hvis du istedet for en adresse angiver et bank nummer, bruges adressen på banken, som parameter (=Start(nr)). Arrayet kan enten slettes med "S Aerase" eller det kan reserveres igen, hvorved det gamle automatisk bliver slettet. Hvis X parametret sættes til -1 vil array'et blive slettet, uden at et nyt bliver oprettet. Muligheden for selv at definere adressen lavede jeg specielt til turbo plus extension's scene kommandoer. Disse scene kommandoer tegner ikoner med en forbløffende fart, fordi alle icon nummerne er gemt i en bank. Denne bank kan nu defineres som et 2-d. array (undtagen de første 8 bytes), og man kan så ændre værdierne som i ethvert andet array. Funktionen kan også bruges hvis man skal have overført arrays imellem to programmer. Man kan selv reservere hukommelse via exec, og overføre adres- sen med "Command Line$". Programmerne Chain1.AMOS og Chain2.AMOS viser det- te. -=S Asize (Nr) Returnerer størrelsen på array (nr) i bytes. Nr er arraynummeret imellem 0 og 7, som blev brugt med "Sln Ainit". Giver nul hvis Array'et ikke er reser- veret. -=S Abase (nr) Returnere startadressen på et array. Hvis værdien er nul er array'et ikke reserveret. -=S Axsize (nr) -=S Aysize (nr) -=S Azsize (nr) Returnerer henholdsvis x,y eller z størrelsen for et array. Hvis den pågældende dimension ikke er defineret er resultatet nul. F.eks. er Z vær- dien altid nul i et 2 dimensionelt array. -S Aset nr,x,værdi -S Aset nr,x,y,værdi -S Aset nr,x,y,z,værdi Disse kommandoer sætter en værdi i 1-, 2- eller 3 dimensionelle arrays. Et 3 dimensionelt array kan godt få sat værdierne med kommandoerne til et el- ler to dimensionelle arrays, uden at der kommer en fejlmelding, man skal ba- re ikke regne med at værdien er hvor den burde være. Den anden vej rundt vil der straks komme en fejlmelding, ligesom hvis x,y eller z parameterne er større end defineret med "Sln Ainit". -=S Array (nr,x) -=S Array (nr,x,y) -=S Array (nr,x,y,z) Henter en værdi fra et array, præcis modsat af "S Aset". -=S Atype (nr) Giver som resultat størrelsen af hver celle i et array. Værdien kan enten være 0 (array ikke defineret), 1, 2 eller 4. -S Aclear nr Nulstiller et array, uden at ændre på array definetionen. Der vil ikke ske noget hvis array'et ikke er defineret. -S Aerase nr Sletter en array defination og frigør eventuelt hukommelsen. Svarer til "S Ainit nr,1,-1,0,0", hvor celle størelsen er sat vilkårligt og x værdien er sat til -1. -S Aerase All Sletter alle arrays. S Iinit nr,adresse/bank,variabel adresse/bank Initialiserer en bruger-interrupt rutine. Denne rutine skal være i maskin- kode, og fungerer på lige fod med AMAL, Interface m.fl.. "Nr" er nummeret på interruptet. Dette skal være imellem 0 og 7 ligesom array nummeret. "Adresse/bank" er adressen, eller bank nummeret, på interrupt rutinen. Nor- malt vil man bruge en bank, hvor et maskinkode program er loadet med "Pload" kommandoen. "Variabel adresse/bank" er en adresse/bank til de variabler, som rutinen skal have overført (hvis det er en bank overføres adressen på den- ne). Her kan interrupt rutinen hente eller gemme forskellige værdier, og derigen- nem kommunikere med resten af programmet. Adressen kan pege på en variabel, et array, en bank, i realiteten hvad som helst. Hver eneste gang interrupt rutinen kaldes (hvert vbl), overføres ad- ressen i a0. Det er nu fuldstændig op til rutinen hvad den vil bruge adressen til. Interrupt rutinen kan bruge registrene d0-d7 og a0-a3 frit. Hvis andre registre bliver brugt er man næsten sikker på at der går noget galt...... stol på guruen!! For at slette et enkelt interrupt skal kommandoen bruges med nul som adresse, alle andre værdier for adressen vil blive brugt. Det betyder at hvis du har overført en forkert adresse går computeren 100% ned! Hvis der i forvejen findes en interrupt rutine med det pågældende nummer, vil den blive erstattet af den nye. -S Ierase Denne kommando fjerner alle bruger interrupts (AMAL, interface, music osv. bliver ikke påvirket). Andre måder at fjerne interrupts på er ved hjælp af "Default" kommandoen eller bruge kommandoen "S Iinit" med nul som adresse. Alle interrupts er naturligvis slettet når Amos programmet startes. -=S Ifree Returnerer antallet af ledige interrupts. -=S Ibase (nr) Giver adressen på den pågældende interrupt rutine. Giver nul hvis den ikke er initialiseret. -=S Iadr (nr) Denne kommando returnerer en interrupt rutines variabel-adresse. -S Compare$(Streng$,søgestreng$,start,slut) Kommandoen udfører en mere eller mindre mærkelig sammenligning af to tekst- strenge, som ikke desto mindre kan være ganske praktisk. Hvert eneste tegn imellem "start" og "slut" i "Streng$" bliver sammenlignet med hvert tegn i "søgestreng$". Hvis der er overensstemmelse bliver positionen returneret, ellers returneres 0. I mit program "Source Analyser v2.0" bliver denne kommando brugt intensivt, og har forøget hastigheden med 15-20 gange for hele programmet, i forhold til den version, der ikke bruger kommandoen (v1.1). Den bedste måde at skrive assembler udvidelser til et program på, er ved at lave en extension, fremfor at loade assembler rutinerne ind i banker. -S Volume Kanaler,Volume Starter et lille interrupt, som regulerer lydstyrken for forskellige kana- ler. "Kanaler" er et bitmap for hvilke kanaler, der skal påvirkes. "Volume" er, naturligt nok, lydstyrken, og skal være imellem 0 og 63. Kommandoen er beregnet til at skrue ned for protracker moduler m.m. Afbryd volume kontrollen ved at bruge kommandoen med 63 som lydstyrke. Meto- den er ikke ideel, da alle samples vil blive afspillet med samme styrke, uan- set hvordan mudolet er lavet. Er der nogen der har en god player-rutine til protracker 3.1, som kan indbyg- ges i udvidelsen? Jeg ville blive meget glad, hvis der var nogen der kunne sende mig en, og jeg kunne så sandsynligvis lave en bedre volume styring. Eks: 'Et protracker modul kører i baggrunden, som skal "fade's" ud.. For X=63 To 0 Step -1 S Volume %1111,X : Rem alle kanaler wait 5 Next 'Stop derefter modulet... 'Slå volume kontrol fra: S Volume %1111,63 -S Sam Bank Reserve -S Sam Bank Reserve Nr Sln extension indeholder et helt nyt sample system, som skulle kunne er- statte det gamle fuldt ud. Alle samples er kædet sammen på samme måde som bobs, sprites og iconer, og man kan derfor nemt slette og indsætte nye samples. De to ovenstående kommandoer reserverer en ny sample bank. Bank nr 6 er standard, men et hvilket som helst nummer kan bruges. Banken er en permanent databank på 8 bytes. Den indeholder ikke andet end adressen på det første sample. Man kan naturligvis sagtens have mange sample banks, som man så kan skifte imellem med næste kommando... -S Sam Bank=Nr Nr er nummeret på en ny sample bank, som man vil bruge. -=S Sam Bank Kommandoen giver nummeret på den bank, der bliver brugt til sample bank. -S Sam Bank Erase -S Sam Bank Erase Nr Sletter den aktive sample bank, eller en udspecificeret bank (nr), og fri- giver alt hukommelse. Brug til enhver til denne kommando frem for Amos' egen erase kommando til at slette bankerne, da amos ikke vil frigive den hukommel- se som samplerne optager. -S Sam Load Navn$ -S Sam Load Navn$,nr Loader sample "navn$", og linker den til sample banken. Udfra hvilken kom- mando du bruger, vil den enten blive tilføjet i listen, eller skudt ind som "Nr". Hvis det ønskede sample er et iff sample (8svx), vil den korrekte frekvens automatisk blive indlæst, og iff-headeren vil derefter blive "skåret" af. Loades et raw sample bliver frekvensen sat til 8000, som standard. Frekvens- en kan naturligvis ændres til enhver tid. Hvis filnavnet ikke indeholder stien til samplet, vil den aktive sti blive brugt (=Dir$). De load'ede samples vil blive placeret i fast ram, hvis det er muligt, el- lers i chip ram. Når de så skal afspilles af "S Sam Play" kommandoen bliver de evt. kopieret til chip mem for at blive afspillet. Under afspilning skal samples'ne være i chip mem. Kopieringen vil naturligvis tage et øjeblik, og hvis man ikke kan vente på det kan man loade samples'ne med følgende komman- do: -S Sam Chip Load Navn$ -S Sam Chip Load Navn$,nr Kommandoen fungerer præcist som ovenstående, men loader samples'ne direkte til chip mem. -=S Sam Freq(Nr) Returnerer frekvensen for sample "nr". Hvis samplet ikke eksisterer vil der kommer en fejlmeddelelse. -S Set Freq Nr,Frekvens Sætter frekvensen "Frekvens" for sample "Nr". Hvis samplet ikke eksisterer vil der komme en fejlmeddelelse. -S Sam Clip Nr,Start,Slut Kommandoen definerer en den af samplet som et clip, og ved fremtidige "S Sam Play" kommandoer vil det blive brugt. "Nr" er sample nummeret, "start" er starten af den indskrænkede del, og Slut er slutningen på dette. Hvis start er større end slut, vil der komme en fejlmeddelelse. Hvis slut er større end selve samplet vil slutningen af samplet blive brugt som argument, altså ingen fejlmeddelelse. For at slette et defineret clip sættes slut parametret til 0 uanset start pa- rametret. -=S Sam Length(Nr) Overraskende nok returnerer denne kommando længden af sample "Nr". Hvis samp- let ikke eksisterer vil resultatet være 0. -S Sam Play Nr,Antal gange,Kanaler,Volume Dette er den centrale kommando i hele sample systemet, og den afspiller overraskende nok de loadede samples. "Antal gange" er antallet af gange sam- plet skal afspilles. Er denne værdi 0 spilles samplet uendeligt, eller til en "S Sam Stop" kommando. Hvis der er defineret et clip for samplet er det kun denne del, der vil blive afspillet. Programeksemplet "SamPlay.AMOS" viser brugen af: S Sam Bank Reserve, S Sam Load, S Sam Chip Load, S Sam Play og S Sam Length -S Sam Del Nr Sletter et sample og frigiver hukommelsen. -S Sam Base Nr Giver adressen på sample headeren til sample "Nr". Selve samplet følger efter 24 bytes senere. Headeren indeholder oplysninger om frekvens, længde, clip m.m. Jeg vil fraråde at pille ved noget medmindre man ved hvad man gør. Head- eren er beskrevet i source koden til Sln extension, søg efter "Sample Header". -S Sam Stop Kanaler Stopper samples i de specificerede kanaler. Parametret er som altid et bit- map. Evt. reserveret hukommelse til afspilning vil blive frigivet, og man kan atter hvile ørene. -S Sam Bank Save Navn$ -S Sam Bank Save Navn$,Nr Da man ikke kan bruge amos' normale kommandoer til at save sample banker, er her to tilsvarende. Man bør lægge mærke til at sample banken kun er perma- nent for at undgå overflødig loadning, hvergang programmet køres. Der er ing- en grund til at loade banken ind hver gang programmet køres, da samples'ne bliver i hukommelsen. Man er derimod nød til at loade alle sample banker, når man har loadet selve programmet, selvom sample bankerne stadig er opført i bank listen. Parametrene til save kommandoerne er kun et filnavn, hvis den aktive bank skal saves, og et banknummer hvis andre banker skal gemmes. -S Sam Bank Load Navn$ -S Sam Bank Load Navn$,Nr Disse to kommandoer loader sample banker fra disk, enten som nummer 6, eller som "Nr". -S Iconify Titel$,X,Y,Bredde Bag de lidt kryptiske parametre gemmer der sig definitionen på et workbench vindue. Vinduet er 12 pixels højt, og består derfor kun af titelbjælken. "Titel$" er vinduets titel,"X" & "Y" er dets x og y koordinater, og endelig er "Bredde" bredden af vinduet. Kommandoen "ikonificerer" amos, ved at skifte til workbench skærmen, og op- rette et lille vindue. Ved at trykke på "luk"-knappen lukkes vinduet, og amos kommer tilbage. Hvis workbench'en ikke i forvejen var åben, bliver den åbnet. Alle AMAL ruti- ner bliver frosset. Alle bruger interrupts og musik interrupts fortsætter, og det er derfor ikke nødvendigt at afbryde moduler, samples osv. Mens amos er "ikonficeret" virker den normale taste-kombination, der skifter mellem amos og workbench ikke. Amos husker dog, hvis man har trykket og skif- ter så imellem amos og workbench'en, når man lukker vinduet. Til denne kommando er der også et lille programeksempel. -S Track Play Bank/adresse -S Track Play bank/adresse, antal gange -S Track Play bank/adresse, antal gange, start pattern Disse kommandoer starter afspilningen af et protracker modul fra en bank eller adresse. "Antal gange" er antallet af gange modulet skal spilles, hvis det er nul spilles modulet uendeligt, ligesom hvis parameteret helt udelades (modulet stoppes med "S Track Stop"). "Start Pattern" er ganske simpelt start positionen, som normalt er nul=starten af modulet. Protracker player'en har Rune Keller været så flink at fremskaffe, og den understøtter alle protracker kommandoer til og med PT3.10. Playeren er naturligvis koblet sammen med sample playeren, så de kanaler, der afspiller samples bliver koblet midlertidigt ud af PT-playeren. Det vil sige at alle samples afspilles normalt, mens PT-playeren naturligvis vil mangle nogle kanaler. -S Track Stop Stopper et igangværende modul, startet med "S Track Play". -S Track Load modul_navn$ -S Track Load modul_navn$,bank nr Første version loader et modul ind i bank 7, mens anden udgave loader mo- dulet til en angivet bank. Hvis bankerne eksisterer i forvejen, vil de uden varsel blive slettet. "S Track Load" kommandoerne svarer nøje til amos' egen "Track Load" komman- do, og de kan bruges i flæng. Grunden til at S Track Load kommandoerne er lavet er, at man så helt kan undgå at bruge nogen kommandoer fra music extension. Hvis man bruger bare en enkelt kommando fra en extension, bliver hele datazonen og diverse andre code stumper inkluderet i programmet. Mængderne af dette afhænger naturlig- vis af, hvor godt det er programmeret. -S Track Volume vol% Denne kommando sætter volumestyrken på modulerne, når de bliver afspillet. Kommandoen kan både bruges inden og under afspilningen. Den nye volumestyrke sættes i % af den oprindelige, og eventuelle variati- oner i lydstyrken bevares. Dette er den væsentligste grund til at bruge den- ne kommando istedet for "S Volume". "vol%" er en procent værdi mellem 0 og 255, hvor 100% angiver normal volume. Bemærk at man skruer op for lyden ved at sætte en værdi over 100. Computeren har dog en max. lydstyrke, som overskrides. -=S Track Length (adresse/bank) Kommandoen returnerer ganske simpelt længden af modulet i patterns. Ikke antallet af definerede patterns, men antallet af ppatterns, der skal gen- nemløbes inden modulet er færdigt. -S Track Tempo= speed -=S Track Tempo Første version sætter tempoet for modulerne, mens den anden returnerer det nuværende tempo. "Speed" angiver antallet af vbl's imellem, hver node, og jo lavere denne værdi er, jo hurtigere er tempoet. Hvad tempoet er i bpm (beats per minute) udregnes sådan: 750/speed=bpm. -S Disk Open drev Kommandoen åbner trackdisk.device, som skal bruges til alle trackdisk kom- mandoerne. Du skal altså bruge denne kommando inden du bruger nogen af de andre trackdisk kommandoer (ellers kommer der en fejlmeddelelse). Hvis kommandoen bruges flere gange, med forskellige drev parametre, lukkes trackdisk.device for de andre drev automatisk. -S Disk Close Lukker trackdisk.device, og frigiver system resourcer osv. -S Motor On Tænder diskette motoren. Der er ingen grund til at gøre dette, men da der er en motor off kommando, må der også være en motor on. -S Motor Off Slukker diskette motoren. Kommandoen bruges kun sjældent. -S Disk Read disk_offset,buffer_adresse,længde Kommandoen læser rå data fra disketten med den angivne længde, og lægger dem ind i bufferen. Offset på disketten angives i byte, og derfor må man kende lidt til disket- te strukturen. En diskette består (normalt) af 160 spor (80 på hver side), med hver 11 sektorer i. Hver sektor indeholder 512 bytes. Hvis vi nu vil læse 1. sektor af spor 10 bliver offset=512*11*10=56320. Bemærk at der er flere måde at betegne diskette strukturen på, man kan f.eks. bruge cylinder, som betegnelse for et spor på hver side. Se iøvrigt min artikel om trackdisk.device i DABG #1 fra oktober 1994. Kommandoen venter til læsningen er færdig, før den fortsætter, i modsætning til næste variant... -S Disk Send Read disk_offset,buffer_adresse,længde Er næsten magen til den ovenstående, men fortsætter programudførelsen, inden disketteoperationen er færdig. Dette er også grunden til at motoren ikke vil blive slukket automatisk, som normalt (brug "S Motor Off"). -S Disk Write disk_offset,buffer_adresse,længde Argumenterne svarer til "disk read" kommandoernes, men her skrives fra buf- feren til disketten. Trackdisk device understøtter to forskellige kommandoer til at skrive på disketten med, nemlig write og format. Forskellen er, at format kommandoen kun kan skrive hele spor ad gangen og at offset'et skal være starten på et spor. Fordelen er naturligvis en stor hastighedsforøgelse. "S Disk Write" bruger begge kommandoer og vælger automatisk format, hvis ar- gumenterne passer, ellers vælges write, som altid kan bruges. Dette betyder at du har muligheden for at speede disk operationerne geval- digt op, ved at skrive hele spor ad gangen. -S Disk Send Write disk_offset,buffer_adresse,længde Se "S Disk Write" og "S Disk Send Read". -S Disk Wait Kommandoen sørger for at fryse amos indtil alle diskette operationerne er færdige. Kommandoen bruges naturligvis i forbindelse med "S Disk Send Read" og "S Disk Send Write". -S Disk Abort Kommandoen stopper eventuelle igangværende diskette operationer inden de er færdige. -S Disk Update Trackdisk device har en buffer, som beholder den sidste sektor i hukommelsen, og altså ikke på disketten. Denne buffer bliver først skrevet på disketten ved næste read/write kommando, eller ved brug af denne kommando... -=S Disk State Funktionen returnerer -1, hvis der er en diskette i drevet, ellers 0. -=S Disk Prot State Funktionen returnerer -1, hvis disketten er skrive beskyttet, ellers 0. Hvis der ikke er nogen diskette i drevet, returneres værdien for den sidste diskette der var i. -=S Disk Changes Funktionen returnerer antallet af diskette skift siden sidste reset. Værdi- en stiger med 1 både når disketten tages ud, og når den sættes i. -=S Num Tracks Funktionen returnerer antallet af spor på disketten i drevet, som vil være 160 for en almindelig DD diskette, og det dobbelte for en HD diskette. Hvis der ikke er nogen diskette i drevet returneres -1. -=S Disk Dev Check Giver 0 hvis trackdisk device ikke er åbnet, og -1 hvis det er. -S Disk Rename Nyt_navn$ Kommandoen omdøber disketten til "Nyt_navn$". Navnet må ikke være over 30 bogstaver langt. Kommandoen har det problem, at efter omdøbningen skal disketten tages ud, og sættes ind igen, før systemet opdager navneforandringen. -=S Checksum (adresse) Dette er den eneste trackdisk kommando, som hverken kræver at trackdisk de- vice er åbnet, eller åbner det selv. Kommandoen regner simpelthen checksum- men ud for den sektor (512 bytes), der starter ved den angivne adresse. Checksummen er det longword (4 bytes tal), der står ved den 20. byte i en- hver normal sektor (bootblocks er ikke normale).