DOC_20150804215459

2
 D e C-16 zit vol me t handige truc jes,waarmee relatief veel uit de ze machine is te halen. Deze keer gaat het over de smooth scroll. Scrollen is het engelse woord voor schui ven, afrollen en is bij een computerbeeld het geleideli jk verschuiven (“panning”) van het beel d. De schuifmogelijkheid, die we bij het scrollen van het beeld nodig heb ben, komt ook weer uit de T.E.D.chip van dec-16. Laten weeerst eens é é n woordje over het beeld schuiven, dus het steeds é é n karak terpositie verder op het beeld zetten. Dit gaat relatiefeenvoudigdoor na het intypen van een woord, b.v. “0-16”, de cursor op de “0” van”O-l 6”tezetten en dan de shift knop ingedrukt tehouden, en daarna ook de (Inst/Del) toets in te drukken. U ziet nu het woord zeer houter ig over het scherm naar rechts schuiven. Dit effekt was u ongetwijfeld bekend. Smooth scroll, het mooi geleidelijk ver schuiven, vraagtwat meeringrepen, maar daarvoormoeten we wel de plaats in het geheugen ken nen , waar dat wordt gere geld, dat gaat met z.g.n. registers. Hier voor gebruiken we de volgende registers: t ~ omhoog/omlaag regi ster = -. -  FFO6(=65286) —~€— links/rechts register =  FF07  = 65287) Bij het schuiven wordt het scherm vaak wat kleiner, het act’eve deel wordt geredu ceerd en de gehele rand van het scherm wordt dan een hele karakterdikte breder. De tweebelangrijkste regi ster s zijn  FF07 Deze gebruiken we voor de bewe ging in horizont ale richting  FF07  )~ ,VJÇ....... Is dit bit  dan heeft het scherm een normale breedte, is dit bit 0 dan is het scherm links en rechts een karakter breedtesmaller. Normaal, dat is bij 0000 1000, verschuift na verhogen hiervan het he le scherm een plaats naar rechts. In Basic: Smal scherm: POKE 65287, PEEK(65287) AND 247 Normaal scherm: POKE 65287, PEEK (65287) CR 8 Dit verkleinen is nodig, om een nieuw karakter aan de rand niet direkt te laten zien,het komt dus eerst achter de bedekte rand te staan en schuift dan langzaam daaronder vandaan. Met deze verworven kennis kunnen we al wat leuks doen; 10 POKE 65287, PEEK(65287) AND 247 20 FOR X = 7 to 0 step  30 FOR T = 0 to 25: NEXT T 40POKE 65287, X 50NEXT X 60 FOR X 0 to 7 70 FOR ~f = 0 to 25: NEXT T 80POKE 65287, X 90 NEXT X 100 GOTO 20 Typedit goed over, zorg dat er wel wat op het schermstaat enrun het dan. U ziet dan het scherm heel smooth (geleidelijk) heen en weer schuiven. Alles gaat sneller als u de “25” op regels 30 en 70 kl einer maakt, of groter om het snel ler te laten verlopen.  FF06 Is voor de vert icalebeweging, dit levert wat problemen op , omdat niet alle twee de randen he**aal bedekt worden.  FF06  XXX---- niet voor schuiven Als dit bit  is en de schuif -bit- combi na tie is 011 dan is alles normaal. Als u dit bit 0 maakt, dan worden de bovenste 4 bits en de onderste 4 bits on zichtbaar. Dit houdt in dat boven de halve en beneden dehalve bo venkant van hetdaar- geplaatste karakter zichtbaar is. Nu kunt u met de 3 rechtse bits op en neer schuiven. Wij gebruiken nu de volgende bitcombina ties voor de rechtse 4 bits, 1011 = normaal; 0111 het scherm is boven en onder half gereduceerd maar alleen onder is het scherm een karakterlengte bedekt en bo ven is het scherm ‘normaal. Na verlagen : 0110 , 0101 , 0100 , 0011, 0010 , 001 , OO G gaat scherm omhoog, en met nu weer verhogen tot 0111 is de onderste rand bedekt en het scherm is weer naa r beneden geschoven. In Basic kunnen we weer van boven naar beneden en andersom schuiven: 10 POKE 65286, 23 20 FOR X = 23 to 16 Step-1 30 FORT = 0to25: NEXTT 40 POKE 65286,X 50 NEXT X Metdeze bijdrage geeft RobVogelaar een vervolg aan zijn vorige artikelover de 0-16 me t voorbeelden van speciale technieken. Die zijn apart te gebruiken, maar oo k erg bruikbaar in zelfgebouwde spelletjes of programma’s van andere aard. Hierbij wordt gewerkt me t machinetaal en met Basic. Special Effects met de C-16 Smooth Scroll 1~2~I i3RFiF~HIC1~ 1 2,21 FO=OTO~STEF’3 3,2f CIF~CLE1.. 1E~2i.. 11210..><., 1—>O..SE~’ .4,21 CIF~CLE1 1E,21., 1~21’21.. 1—><.~><., 0... 3E~’l ~o E121 DHRF~1..20... 12.. “C—1’S”  hoe groter de binaire waarde des te lager zakt (schuift) het scherm. L~ 19

description

Special effect met de C-16.Smooth Scroll.

Transcript of DOC_20150804215459

  • D e C-16 zit vol met handige trucjes, waarmee relatief veel uit deze machine is te halen. Dezekeer gaat het over de smoothscroll.Scrollen is het engelse woord voor schuiven, afrollen en is bij een computerbeeldhet geleidelijk verschuiven (panning) vanhet beeld. De schuifmogelijkheid, die webij het scrollen van het beeld nodig hebben, komt ook weer uit de T.E.D.chip vandec-16.Laten we eerst eens n woordje over hetbeeld schuiven, dus het steeds n karakterpositie verder op het beeld zetten. Ditgaat relatief eenvoudig door na het intypenvan een woord, b.v. 0-16, de cursor opde 0 vanO-l 6 te zetten en dan de shiftknop ingedrukt te houden, en daarna ookde (Inst/Del) toets in te drukken. U ziet nuhet woord zeer houterig over het schermnaar rechts schuiven.Dit effekt was u ongetwijfeld bekend.Smooth scroll, het mooi geleidelijk verschuiven, vraagt wat meer ingrepen, maardaarvoor moeten we wel de plaats in hetgeheugen kennen, waar dat wordt geregeld, dat gaat met z.g.n. registers. Hiervoor gebruiken we de volgende registers:t ~ omhoog/omlaag register =

    -. - $FFO6(=65286)~ links/rechts register =

    $ FF07 (= 65287)Bij het schuiven wordt het scherm vaakwat kleiner, het acteve deel wordt gereduceerd en de gehele rand van het schermwordt dan een hele karakterdikte breder.De twee belangrijkste registers zijn$ FF07 Deze gebruiken we voor de bewe

    ging in horizontale richting$ FF07 * )~(,VJ.......

    Is dit bit 1 dan heeft hetscherm een normalebreedte, is dit bit 0 dan ishet scherm links enrechts een karakterbreedte smaller.

    Normaal, dat is bij 0000 1000, verschuift naverhogen hiervan het hele scherm een plaatsnaar rechts.In Basic:Smal scherm:

    POKE 65287, PEEK (65287) AND 247Normaal scherm:

    POKE 65287, PEEK (65287) CR8Dit verkleinen is nodig, om een nieuwkarakter aan de rand niet direkt te latenzien, het komt dus eerst achter de bedekterand te staan en schuift dan langzaamdaaronder vandaan. Met deze verworvenkennis kunnen we al wat leuks doen;

    10 POKE 65287, PEEK (65287) AND 24720 FOR X = 7 to 0 step - 130 FOR T = 0 to 25: NEXT T40 POKE 65287, X50 NEXT X60 FOR X 0 to 770 FOR ~f = 0 to 25: NEXT T80 POKE 65287, X90 NEXT X100 GOTO 20

    Type dit goed over, zorg dat er wel wat ophet scherm staat en run het dan. U ziet danhet scherm heel smooth (geleidelijk) heenen weer schuiven.Alles gaat sneller als u de 25 op regels 30en 70 kleiner maakt, of groter om hetsneller te laten verlopen.

    $ FF06 Is voor de verticale beweging, ditlevert wat problemen op, omdatniet alle twee de randen he**aalbedekt worden.

    FF06 * XXX----niet voor schuiven

    Als dit bit 1 is en deschuif -bit- combinatie is 011 dan is allesnormaal. Als u dit bit 0maakt, dan wordende bovenste 4 bits ende onderste 4 bits onzichtbaar.Dit houdt in dat bovende halve onderkant enbeneden de halve bovenkant van het daar-geplaatste karakterzichtbaar is.Nu kunt u met de 3rechtse bits op enneer schuiven.

    Wij gebruiken nu de volgende bitcombinaties voor de rechtse 4 bits, 1011 = normaal;0111 het scherm is boven en onder halfgereduceerd maar alleen onder is hetscherm een karakterlengte bedekt en boven is het scherm normaal.Na verlagen : 0110 , 0101 , 0100 , 0011,

    0010 , 001 , OOG gaatscherm omhoog, en met nu weer verhogentot 0111 is de onderste rand bedekt en hetscherm is weer naar beneden geschoven.In Basic kunnen we weer van boven naarbeneden en andersom schuiven:

    10 POKE 65286, 2320 FOR X = 23 to 16 Step-130 FORT = 0to25: NEXTT40 POKE 65286,X50 NEXT X

    Met deze bijdrage geeft Rob Vogelaar een vervolg aan zijn vorige artikel over de 0-16met voorbeelden van speciale technieken. Die zijn apart te gebruiken, maar ook ergbruikbaar in zelfgebouwde spelletjes of programmas van andere aard. Hierbij wordtgewerkt met machinetaal en met Basic.

    Special Effects met de C-16

    Smooth Scroll1~2~I i3RFiF~HIC1~ 12,21 FO=OTO~STEF33,2f CIF~CLE1.. 1E~2i.. 11210..>O..SE~.4,21 CIF~CLE1 1E,21., 1~2121.. 1>

  • S60 FOR X = 16 to 2370 FOR T = 0 to 25: NEXT T80 POKE 65286,X90 NEXT X100 GOTO 20

    Als u dit goed intypt ziet u het scherm vanboven naar beneden en weer terug schuiven, en wel zeer smooth, dus geleidelijken rustig.Wij laten het hierbij wat betreft de verticalebewegingen. We hebben tot nu toe slechtsn karakter per keer verschoven en wegaan nu ook schuiven over langere afstanden. Het proces voor een beweging naarlinks over het hele scherm is als volgt:Oreduce horizontaalO zet schuifregister op maximaalo verlaag met nOeen eventuele pauze (delay loop) ga naar stap 3 als register nog geen nul

    isOzet schuifregister op maximaal$ in machinetaal routine schuift een gehe

    le regel tekst vliegensviug naar links -o ga terug naar stap 2 (totdat de tekst op

    is).Hot kan ook zonder stap 6 maar dan trilt detekst hinderlijk.We hebben nu alle stappen behandeldbehalve stap 7Daarin wordt de de machinetaal-routinegezet. die vliegensvlug een hele regel tekstnaar links verplaatst.De overgang van stap 6 naar 7 moet heelsnel gaan om flikkering te voorkomen, duswe doen stap 6 ook maar in machinetaal.Stel dat we de tekst over de bovenste regelwillen schuiven.Die bovenste regel is het gebied van 3072tlm 3072 + 39 = $0000 t/m $0027De routine voor stap 6 en 7 ziet er dan zouit:A3000 A9 07 LDA# $07 * stap 6A3002 8D 07 FFSTA $FFO7A3005 A0 00 LDY# $00A3007 B9 01 OCLDA$0001,Y *stap7A300A 99 00 00 STA $ 0000,YA330D 08A300E 00 27A3010 DO F5A3012 60

    INYCPY # $28BNE $3007RTS

    Type het bovenstaande in Monitor-modein.

    De andere stappen kunnen in een Basicprogram ma.10 POKE 65287, PEEK (65287) 0

    AND 24720 POKE 65287, PEEK (65287) OR 7 03OFORX=7to0step-1:POKE

    65287,X40 FOR T = 0 to 25: NEXT T 05ONEXTX 0

    60 SYS DEC (3000)70 GOTO 20 0Als u dit ingetypt heeft, maakt u het schermweer schoon en zet dan wat tekst op debovenste regel, ongeveer in het middenvan die regel. Dan met de cursor naarbeneden en u typt RUN en return natuurlijk. Als resultaat wordt het scherm smallerworden en het woord RUN naar linksschuiven, dan snel naar rechts gaat enweer naar links schuift.De tekst zelf schuift heel smooth naar linkstotdat het weggeschoven is. U kunt hetstoppen en weer wat nieuwe tekst ingeven. Op deze manier is hier zelf wat leuksmee te doen.

    LichtkrantTer afsluiting een iets groter programma inmachinetaal, waarmee een stukje tekstover het beeld schuift en dus een soortlichtkrant-simulatie vormt. Zie hiernaast.Dit machinetaal programma slaat aan hetschuiven, maar dan met verschillendesnelheden. Het voordeel van de gebruikteaanpak is, dat er met de IRQ-interruptvector wordt gewerkt, zodat er tijdens lietschuiven tijd is voor andere dingen, zoalshet afwerken van een Basic programma.De te schuiven tekst moet staan in degeheugenplaatsen vanaf hex $3000, waarbij het laatste byte een 00 is om het eindevan de boodschap aan te geven. Het volgende eenvoudige programma stopt eenstukje tekst op de luiste plaats in hetgeheugen, door de inhoud van de T$ (detekst) weg te poken.10 INPUTT$20 FOR X=1 TO LEN(T$)30 POKE 12287 + X,ASC(M~D$~T$,X,1))40 NEXT X: POKE 12287 -i- X,0

    Type nu het grotere machinetaal programma in en save het. Er wordt gebruik gemaakt van raster-interrupt technieken, zodat de overige tekst op het scherm niethinderlijk verschuift. Om de zaak in beweging te zetten is de volgende sys nodigSYS DEC (2050)Hier wordt de interrupt vector veranderd,voor de snelheid is lokatie $2075 (= 8309)te veranderen, daar kunnen waardes van 1-8 in worden gepoked. Met de run/stoptoets, samen met de reset toets en dan deX-toets wordt het schuiven gestopt.

    In volgende bijdragen gaan we verdermet zelf gedefinieerde tekensets, raster-interrupts en het toevoegen van eenPLAY commando aan de Basic via een

    ~~edge.

    De illustraties bij dit artikel zijn door RobVogelaar gemaakt met een MPS-801 en de0-16.

    MONITOR

    PC SR 80 XR VR SP2000 00 00 08 00 F8

    2800 2803 2006

    28139 21380 28136 29113 21313 2016 2019 2016 2016 2021 2823 2826 2028

    202B202E

    2031 2033 2834 2836 2038 2839

    20382838203E203F

    2841 2044 2045 2046 2047

    28482049

    204R2048204028402046284F2135021352

    20552057

    205920592950205E

    213602063

    2136528682069286R206820602060286E2136F

    287820T320742076287920782870

    207F2082

    2084208720882089

    2880208F

    2891 2093 2095 2097 2099 2098

    2090 209F 21382 2883 2885 21388 2088 2880 2086 21390

    EE 44 20 TNO $2044NO 139 FR LOR $FFO980 09 FF STR OFFO9F10 44 20 LOR 9204405 0E 8136 $2810Fi9 CC LOR ~CC813 89 FR STA $FFO8630 63 03 LOR $833380 07 FR STR $FF1374C EE F5 .JT1P 3FC9E89 FF LOR 99FF80 44 20 STR 9204489 80 LOR 930080 07 FF STR $FFO789 02 LOR 950280 08 FF STR $FF0B20 70 20 JSR $287820 8F OF .366 $C~BF85 F9 LOR SF848 PHR89 00 LOR 950885 F8 STR $F808 FHP58 CLI20 11 08 JSR 5591128 PLP68 FL885 F8 STR $~840 86 F5 JM~ S~8EFF 7??00 881